我正在创建一个pdf,其中每个pdf页面的标题将根据当前页码自定义。例如,在第一页中标题是“第一页”,在第二页中标题是“第二页”,依此类推......
我们现在要做的是将标题添加到PdfPTable中,然后我们还向PdfPTable添加了许多其他内容,因此这个PdfPTable包含几页数据。最后,我们将这个大的PdfPTable对象添加到文档中。现在我们要使用PdfPageEventHelper中的onStartPage()方法来获取当前页码,以便我们可以自定义每个页面的标题。
问题是onStartPage()在我们将大的PdfPTable对象添加到文档之前不会触发,这意味着我们无法在将PdfPTable对象添加到文档之前使资源包加载不同的键值,对吧?有没有意识到这个?
--------------------我们有以下代码---------------------- ---------------
Phrase title = new Phrase();
title.add(new Chunk(bundle.getString(pdfNewPageEventHandler.getKey()), headerFont));
PdfPCell cell = new PdfPCell(new Paragraph(
new Phrase(title)));
.........
PdfPTable table = new PdfPTable(tableSize);
table.addCell(cell);
.........
document.add(table);
private class PdfNewPageEventHandler extends PdfPageEventHelper {
private int currentPageNum = 0;
private String key;
@Override
public void onStartPage(PdfWriter writer, Document document) {
currentPageNum = currentPageNum + 1;
if (currentPageNum == 1) {
key = "firstPage";
}
else if (currentPageNum == 2) {
key = "secondPage";
}
}
public String getKey() {
return key;
}
}
答案 0 :(得分:0)
我有不止一个答案。我不知道哪一个适用于您的具体情况:
不要在onStartPage()
方法中添加内容。如文档所述,所有内容都应添加到onEndPage()
方法中。
创建一个大表(它在内存中构建)然后将表添加到文档中并不总是明智的(仅此时才能释放内存)。也许您想从文档中尝试一些大表策略。
在某些情况下,在内存中构建表格然后将其添加到文档中是您可以使用的唯一策略。然后,iText将在不同页面上分发表格内容,从而触发页面事件。但是:如果要触发特定于表的事件,还可以在表的级别定义事件。为了这个目的,有一个PdfPTableEventSplit和一个PdfPTableEventAfterSplit类。
您提供的代码示例并未真正说明问题。你能不能重新解释一下这个问题,因为我不确定我的任何答案是否都是问题的核心。