Пейзаж и портрет для PDF с Flying Saucer / iText - PullRequest
17 голосов
/ 05 марта 2009

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

Есть идеи?

Ответы [ 3 ]

22 голосов
/ 05 марта 2009

Неважно, нашел ответ. Для всех, кто заинтересован, вот как вы это делаете:

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

вуаля!

13 голосов
/ 24 августа 2010

Для тех, кто все еще сталкивается с проблемой, о которой упоминал Дерек, я обнаружил, что мне нужно явно установить ширину элемента, который переключает его макет. Так с примером div

<div class="portraitPage">
    <p>Some page content in portrait</p>
</div>
<div class="landscapePage">
    <p>Some page content in landscape</p>
</div>

будет корректно форматировать портретную страницу, за которой следует альбомная страница, но содержимое альбомной страницы будет иметь такую ​​же ширину, что и портретная страница, даже если объявление @ page land содержит ширину. Мне нужно было установить ширину непосредственно в div, к которому применен соответствующий класс, поэтому объявление выглядит как

.landscapePage { page:land; width: 29.7cm; }

Будьте осторожны, хотя ширина должна учитывать любые поля или отступы, применяемые через блок объявления @page.

1 голос
/ 12 июня 2014

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

  1. Добавить дополнительный параметр для типа страницы, например ландшафт или портрет, в параметре pageType
  2. Добавьте следующий код в тег стиля, когда вы генерируете 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...