Pregunta

¿Hay alguna forma de configurar 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 página determinada y salir.

¿Alguna idea?

¿Fue útil?

Solución

No importa, encontré la respuesta. Para cualquier persona interesada, así es como lo hace:

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

voil & # 225 ;!

Otros consejos

Para cualquiera que todavía tenga problemas con el problema que Derek mencionó, descubrí 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 vertical seguida de una página horizontal, pero el contenido en la página horizontal solo será tan ancho como la página vertical, incluso si la declaración @page land 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 cualquier margen o 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

  1. Agregue un parámetro adicional para el tipo de página, p. ej., paisaje o retrato en pageType param
  2. 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top