ITextRenderer: настройка высоты страницы в соответствии с содержимым

Я использую ITextRenderer для создания PDF из HTML, и мне нужно получить квитанцию кассового аппарата. Этот чек имеет динамическую ширину и, конечно же, динамический контент. При этом высота содержимого всегда будет разной, и сейчас я изо всех сил пытаюсь найти способ подгонки высоты страницы PDF к содержимому. Если он слишком большой, в конце квитанция имеет длинную белую часть, а если она короткая, PDF-файл разбит на страницы, и мне нужно, чтобы он был только на одной странице.

я использую@page {size: Wpx Hpx;} установить размер страницы, но практически невозможно (было бы очень больно) рассчитать высоту содержимого на основе ширины и данных.

Это код, который генерирует 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();

Я также пыталсяrenderer.getSharedContext().setPrint(false);, но это бросает NPE.

Также@page {-fs-page-sequence: "none";} без удачи.

-------------- "Решение" ----------------

Решение, которое я нашел, даже близко не идеально, но работает!

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

Это создаст 1px страниц для всего контента. Тогда я просто должен сказать принтеру распечатать все страницы с0px margin между страницами.

Почему это решение не идеально? Размер файла составляет от 1 или 2 КБ до 200 КБ. Не очень хорошо при потоковой передаче через 3G.

Ответы на вопрос(0)

Ваш ответ на вопрос