При создании документа мне нужно вставить специальный нижний колонтитул на последнюю страницу. Моя проблема в том, что при создании документа абзац может находиться между двумя страницами. Итак, мне нужно найти последнее слово в абзаце, который находится на предпоследней странице, разделить один абзац на два и вставить между ними разрыв раздела. Я нашел, как сделать разрыв раздела:
Код: Выделить всё
public static void createSectionBreak(XWPFDocument document){
CTBody body = document.getDocument().getBody();
CTSectPr sectPr = body.getSectPr();
if (sectPr != null) {
XWPFParagraph lastParagraph = document.createParagraph();
lastParagraph.getCTP().addNewPPr().setSectPr(sectPr);
body.unsetSectPr();
}
document.createParagraph().setPageBreak(true);
}
Чтобы найти слово, в котором мне нужно сделать разрыв абзаца, я хочу удалить содержимое по частям и использовать количество страниц, чтобы определить, где мне нужно вставить разрыв. Чтобы получить информацию о количестве страниц в документе, я нашел следующий код:
Код: Выделить всё
public static int getPagesInDoc(XWPFDocument document) {
return document.getProperties().getExtendedProperties().getUnderlyingProperties().getPages();
}
Но этот вариант работает плохо. Он дает одно и то же число независимо от фактического состояния документа. Исходный шаблон состоит из двух страниц. После работы с документом их четыре, но этот метод все равно возвращает два. Даже если я запишу файл и открою его снова, результат тот же. Возможно, есть другой способ решения моей проблемы или метод получения текущего количества страниц (желательно без закрытия файла)?
Я использую актуальную на данный момент библиотеку Apache POI 5.3.0.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... -poi-5-3-0