Ваша проблема в следующем: drawChildren
метод вызывается после завершения рендеринга. На этом этапе iText обычно не учитывает свойства каких-либо элементов: он просто помещает элемент в его занятую область, которая была рассчитана ранее, на этапе layout()
.
Вы можете преодолеть это с помощью эмуляции макета.
Давайте добавим все ваши абзацы в div, а не прямо в документ. Затем эмулируйте добавление этого div в документ:
LayoutResult result = div.createRendererSubTree().setParent(doc.getRenderer()).layout(new LayoutContext(new LayoutArea(0, PageSize.A5)));
В приведенном выше фрагменте я попытался расположить наш div на документе формата A5.
Теперь вы можете рассмотреть результат компоновки и изменить некоторые элементы, которые затем будут обработаны для реального с Document#add
. Например, чтобы получить 30-й макет абзаца, можно использовать:
((DivRenderer)result.getSplitRenderer()).getChildRenderers().get(30);
Еще несколько советов:
split renderer представляет часть контента, которую iText может разместить в области, overflow - контент, который переполняется.