Это неясно из вашего вопроса, но вы, вероятно, захотите добавлять контент на новую страницу в конце документа на каждой большой итерации.
У вас есть следующий код, который, вероятно, предназначался для достижения цель:
doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
Однако он не перейдет на последнюю страницу, потому что Document
не «видит», существует ли какой-либо контент на страницах, и он просто начинается с верхней части первой страницы, даже если вы изменяете существующий документ.
Решение состоит в том, чтобы перейти к последней странице и затем создать новую страницу. Этого легко добиться с помощью этих двух строк:
doc.add(new AreaBreak(AreaBreakType.LAST_PAGE));
doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));
Он не будет запоминать позиции добавленного контента и просто каждый раз будет создавать новые страницы. Если вы хотите запомнить эти позиции, вам нужно будет написать дополнительный код и передать эти позиции в currentArea
, как вы это делали в своем пользовательском рендерере.
Между прочим, настройку пользовательского рендерера необходимо выполнить перед добавлением страницы разрываются, поэтому порядок должен быть следующим:
doc.setRenderer(new DocumentRenderer(doc) {
protected LayoutArea updateCurrentArea(LayoutResult overflowResult) {
LayoutArea area = super.updateCurrentArea(overflowResult);
if (area.getPageNumber() == 1) {
area.getBBox().decreaseHeight(266);
}
return area;
}
});
doc.add(new AreaBreak(AreaBreakType.LAST_PAGE));
doc.add(new AreaBreak(AreaBreakType.NEXT_PAGE));