Flying Saucer/iText에서 다른 페이지 스타일을 설정하는 방법이 있습니까? 나는 풍경의 첫 페이지를 몇 장 가지고 있어야하고, 특정 페이지에서 초상화로 바깥 쪽을 바꿔줘야합니다.Flying Saucer/iText를 사용하여 pdf 용 가로 및 세로 모두
아이디어가 있으십니까?
Flying Saucer/iText에서 다른 페이지 스타일을 설정하는 방법이 있습니까? 나는 풍경의 첫 페이지를 몇 장 가지고 있어야하고, 특정 페이지에서 초상화로 바깥 쪽을 바꿔줘야합니다.Flying Saucer/iText를 사용하여 pdf 용 가로 및 세로 모두
아이디어가 있으십니까?
해답을 찾지 못했습니다. 관심있는 사람은 다음과 같이하십시오.
@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }
voilá!
Derek이 언급 한 문제로 여전히 고생하는 사람에게는 레이아웃을 전환하는 요소의 너비를 명시 적으로 설정해야한다는 것을 알았습니다. 예제 사업부와 그래서
<div class="portraitPage">
<p>Some page content in portrait</p>
</div>
<div class="landscapePage">
<p>Some page content in landscape</p>
</div>
이 올바르게 가로 페이지 다음에 세로 페이지의 서식을하지만, 가로 페이지의 콘텐츠는, 세로 페이지로 넓은 것조차 @page 토지 선언하는 경우 너비가 있습니다. 내가 필요로하는 것은 적용 관련 클래스가 사업부에 직접 폭을 설정하는, 그래서 선언은 폭이 계정에를 통해 적용된 마진이나 패딩을해야하지만
.landscapePage { page:land; width: 29.7cm; }
조심 더
같은 것입니다 @page 선언 블록.런타임시 페이지 크기를 동적으로 처리 할 수 있습니다. 다음 단계
FileOutputStream fos = new FileOutputStream(file); ITextRenderer renderer = new ITextRenderer(); StringBuilder htmls = new StringBuilder(); htmls.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"); htmls.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">"); htmls.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">"); htmls.append("<head><style type=\"text/css\">"); htmls.append("@page{ size: "+request.getParameter("pageType")}"); htmls.append("</style></head>"); htmls.append("<body><div>dynamic pdf data</div></body></html>"); renderer.getFontResolver().addFont("C:\\Windows\\Fonts\\Calibri.ttf","UTF-8",BaseFont.NOT_EMBEDDED); renderer.setDocumentFromString(htmls.toString()); renderer.layout(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + ".pdf\""); renderer.createPDF(outputStream); renderer.createPDF(fos);