Ответ 1
Nevermind, нашел ответ. Для всех, кого это интересует, вот как вы это делаете:
@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }
вуаля!
Есть ли способ установить разные стили страниц с помощью Flying Saucer/iText? Мне нужно иметь первые несколько страниц в пейзаже, а затем переключиться на портрет на определенной странице и выйти.
Любые идеи?
Nevermind, нашел ответ. Для всех, кого это интересует, вот как вы это делаете:
@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }
вуаля!
Для тех, кто все еще придерживается проблемы, упомянутой Дереком, я обнаружил, что мне нужно явно задать ширину элемента, который переключает его макет. Итак, с примером div
<div class="portraitPage">
<p>Some page content in portrait</p>
</div>
<div class="landscapePage">
<p>Some page content in landscape</p>
</div>
он будет правильно форматировать портретную страницу, за которой следует ландшафтная страница, но содержание в альбомной странице будет только шириной, чем страница с портретом, даже если декларация земли @page содержит ширину. Мне нужно было установить ширину непосредственно в div, который имеет соответствующий класс, поэтому объявление является чем-то более похожим на
.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);