Я пытаюсь создать динамический заголовок страницы с помощью itext7 с помощью EventHandlers. Я использую следующий код для этого:Проблема с динамическим заголовком iText 7
public static void main(String[] args) throws Exception {
File file = new File("C:\\Test\\variable_header.pdf");
file.getParentFile().mkdirs();
new VariableHeader().manipulatePdf(DEST);
}
protected void manipulatePdf(String dest) throws Exception {
PdfDocument pdfDoc = new PdfDocument(new PdfWriter(DEST));
Document doc = new Document(pdfDoc);
VariableHeaderEventHandler handler = new VariableHeaderEventHandler();
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, handler);
handler.setHeader("First Header");
for (int i = 1; i <= 50; i++) {
doc.add(new Paragraph("Added First content"));
}
doc.add(new AreaBreak());
handler.setHeader("Second Header");
for (int i = 1; i <= 15; i++) {
doc.add(new Paragraph("Added Second content"));
}
doc.close();
}
protected class VariableHeaderEventHandler implements IEventHandler {
protected String header;
public void setHeader(String header) {
this.header = header;
}
@Override
public void handleEvent(Event event) {
PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;
try {
new PdfCanvas(documentEvent.getPage())
.beginText()
.setFontAndSize(PdfFontFactory.createFont(FontConstants.HELVETICA), 12)
.moveText(450, 806)
.showText(header)
.endText()
.stroke();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Здесь я создал «VariableHeaderEventHandler», который отображает динамический заголовок страницы для каждой страницы документа.
Первоначально я задал заголовок страницы как «Первый заголовок» и добавил текст «Добавлен первый контент» в документ 50 раз. Затем я добавил Разрыв области, который оставляет оставшуюся часть страницы пустой после рендеринга предыдущего содержимого, и любое другое содержимое будет отображаться на новой странице. Затем я изменил заголовок страницы как «Второй заголовок» и добавил текст «Добавлено второе содержимое» в документ в 15 раз.
В соответствии с приведенным выше кодом заголовок страницы «Второй заголовок» должен отображаться ТОЛЬКО со страницы, на которой отображается текст «Добавлено второе содержимое». Но «Второй заголовок» оказываются на предыдущей странице, где текст «добавлено первое содержание» отображаются, как показано ниже:
iText7 Динамический вопрос заголовка:
Похоже, есть некоторые проблема с механизмом обработки событий в iText 7.0.1.
Есть ли способ решить эту проблему? Любая помощь будет оценена по достоинству.
Это сложнее, чем обычная реализация этой задачи. В частности, если вы хотите, чтобы текущая глава и раздел в верхнем или нижнем колонтитуле или что-то подобное динамически ... – mkl