И пейзаж, и портрет для PDF с Flying Saucer/iText

Есть ли способ установить разные стили страниц с помощью Flying Saucer/iText? Мне нужно иметь первые несколько страниц в пейзаже, а затем переключиться на портрет на определенной странице и выйти.

Любые идеи?

Ответы

Ответ 1

Nevermind, нашел ответ. Для всех, кого это интересует, вот как вы это делаете:

@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }

вуаля!

Ответ 2

Для тех, кто все еще придерживается проблемы, упомянутой Дереком, я обнаружил, что мне нужно явно задать ширину элемента, который переключает его макет. Итак, с примером 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.

Ответ 3

Вы можете обрабатывать свой размер страницы динамически во время выполнения. Следуйте приведенному ниже шагу.

  • Добавьте дополнительный параметр для типа страницы, например, пейзаж или портрет в параметре pageType
  • Добавьте следующий код в свой тег стиля, когда вы создаете свой html на стороне сервера, например,
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);