【发布时间】:2017-02-03 15:28:07
【问题描述】:
我正在尝试使用 EventHandlers 创建带有 itext7 的动态页眉。我为此使用以下代码:
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”,它为文档的每一页呈现动态页眉。
最初,我将页眉设置为“First Header”,并将“Added First content”文本添加到文档中 50 次。然后我添加了区域中断,它在呈现之前的内容后将页面的另一部分留空,并且任何进一步的内容都将在新页面中呈现。然后我将页眉更改为“第二页眉”,并在文档中添加了文本“添加第二个内容”15次。
所以根据上面的代码,页面标题“第二个标题”应该只从显示文本“添加的第二个内容”的页面呈现。但是“第二个标题”是在上一页中呈现的,其中显示了“添加的第一个内容”文本,如下所示:
iText7 动态标题问题:
iText 7.0.1 中的事件处理机制似乎存在一些问题。
有没有办法解决这个问题?任何帮助,将不胜感激。
【问题讨论】:
标签: itext7