ITextRenderer: Ajustar a altura da página ao conteúdo

Estou usando o ITextRenderer para gerar um PDF a partir do HTML e o que preciso fazer é um recibo do caixa. Esse recibo tem largura dinâmica e, claro, conteúdo dinâmico. Dito isto, a altura do conteúdo será sempre diferente e neste momento estou a tentar encontrar uma forma de ajustar a altura da página PDF ao conteúdo. Se for muito grande, o recibo tem uma longa seção branca no final e, se é curto, o PDF é paginado e eu preciso que ele esteja em uma única página.

estou a usar@page {size: Wpx Hpx;} para definir o tamanho da página, mas é quase impossível (seria muito doloroso) calcular a altura do conteúdo com base na largura e nos dados.

Este é o código que gera o 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();

Eu também tenteirenderer.getSharedContext().setPrint(false);, mas isso gera um NPE.

Além disso@page {-fs-page-sequence: "none";} sem sorte.

-------------- "Solução" ----------------

A solução que encontrei não é nem perto da perfeição, mas funciona!

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

Isso gerará páginas de 1 px para todo o conteúdo. Então eu só tenho que dizer à impressora para imprimir todas as páginas com0px margin entre as páginas.

Por que essa solução não é perfeita? O tamanho do arquivo vai de 1 ou 2KB para 200KB .. não é muito bom, quando streaming através de 3G.

questionAnswers(0)

yourAnswerToTheQuestion