template - Paisaje y retrato para pdf con Flying Saucer/iText
java generate pdf from template (3)
¿Hay una manera de establecer diferentes estilos de página con Flying Saucer / iText? Necesito tener el primer par de páginas en horizontal, luego cambiar a vertical en una determinada página y salir.
¿Algunas ideas?
No importa, encontré la respuesta. Para cualquier persona interesada, así es como lo haces:
@page land { size:landscape; }
@page port { size:portrait; }
.landscapePage { page:land; }
.portraitPage { page:port; }
¡voilá!
Para cualquier persona que aún esté atascada con el problema que mencionó Derek, he descubierto que necesito establecer explícitamente un ancho en el elemento que está cambiando su diseño. Así que con el ejemplo div
<div class="portraitPage">
<p>Some page content in portrait</p>
</div>
<div class="landscapePage">
<p>Some page content in landscape</p>
</div>
formateará correctamente una página de retrato seguida de una página de paisaje, pero el contenido de la página de paisaje solo será tan ancho como la página de retrato, incluso si la declaración de la página @page contiene un ancho. Lo que necesitaba era establecer el ancho directamente en el div que tiene aplicada la clase relevante, por lo que la declaración es algo más como
.landscapePage { page:land; width: 29.7cm; }
Tenga cuidado, sin embargo, que el ancho debe tener en cuenta los márgenes o el relleno aplicado a través del bloque de declaración @page.
Puede manejar el tamaño de su página dinámicamente en tiempo de ejecución. Por favor siga el siguiente paso
- Agregue un parámetro adicional para el tipo de página, por ejemplo, paisaje o retrato en pageType param
- Agregue el siguiente código en su etiqueta de estilo cuando genere su html en el lado del servidor para, por ejemplo,
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);