iText中的PdfPageEventHelper

我正在创建一个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;

}

}

回答:

我有一个以上的答案。我不知道哪种情况适用于您的具体情况:

  1. 永远不要在onStartPage()方法中添加内容。如文档所述,所有内容都应添加到onEndPage()方法中。

  2. 创建一个大表(在内存中建立表)然后将表添加到文档中(这时才可以释放内存)并不总是明智的。也许您想从文档中尝试一些 大表策略

  3. 在某些情况下,可以使用唯一的策略在内存中构建表,然后将其添加到文档中。然后,iText将表的内容分布在不同的页面上,从而触发页面事件。但是:如果要触发特定于表的事件,则还可以在表级别定义事件。为此目的,有一个PdfPTableEventSplit和PdfPTableEventAfterSplit类。

您提供的代码示例并未真正说明问题。您能改一下这个问题吗,因为我不确定我的答案是否是问题的核心。

以上是 iText中的PdfPageEventHelper 的全部内容, 来源链接: utcz.com/qa/435460.html

回到顶部