ITextRenderer: ajusta la altura de la página al contenido

Estoy usando ITextRenderer para generar un PDF desde HTML y lo que necesito hacer es un recibo de caja registradora. Este recibo tiene ancho dinámico y, por supuesto, contenido dinámico. Dicho esto, la altura del contenido siempre será diferente y ahora mismo estoy luchando por encontrar una manera de ajustar la altura de la página PDF al contenido. Si es demasiado grande, el recibo tiene una larga sección blanca al final, y si es demasiado corto, el PDF se paginó y necesito que esté en una sola página.

Estoy usando@page {size: Wpx Hpx;} para establecer el tamaño de la página, pero es casi imposible (sería muy doloroso) calcular la altura del contenido según el ancho y los datos.

Este es el código que genera el PDF:

ITextRenderer renderer = new ITextRenderer();

byte[] bytes = htmlDocumentString.toString().getBytes("UTF-8");
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputSource is = new InputSource(bais);
Document doc = builder.parse(is);

renderer.setDocument(doc, null);

renderer.layout();
renderer.createPDF(outputStream);
outputStream.flush();
outputStream.close();

También he intentadorenderer.getSharedContext().setPrint(false);, pero esto arroja un NPE.

también@page {-fs-page-sequence: "none";} sin suerte

-------------- "Solución" ----------------

La solución que encontré no es ni siquiera perfecta, ¡pero funciona!

@page {
    size: Wpx 1px;
}
* { page-break-inside: always; }

Esto generará páginas de 1px para todo el contenido. Entonces solo tengo que decirle a la impresora que imprima todas las páginas con0px margin entre páginas.

¿Por qué esta solución no es perfecta? El tamaño del archivo va de 1 o 2 KB a 200 KB. No es muy bueno cuando se transmite a través de 3G.

Respuestas a la pregunta(0)

Su respuesta a la pregunta