我正在创建一个 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;
}
}
我有不止一个答案。我不知道哪一种适用于您的具体情况:
切勿在中添加内容onStartPage()
方法。根据记录,所有内容都应添加到onEndPage()
method.
创建一个大表(它会在内存中建立)然后将表添加到文档中(只有此时才能释放内存)并不总是明智的。也许您想尝试一些大表策略从文档中。
在某些情况下,在内存中构建表格然后将其添加到文档中是您可以使用的唯一策略。然后,iText 会将表格内容分发到不同的页面上,从而触发页面事件。但是:如果您想触发特定于表的事件,您还可以在表级别定义事件。有一个PdfPTable事件分割 http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPTableEventSplit.html and a PdfPTableEventAfterSplit http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfPTableEventAfterSplit.html为此目的而设计的类。
您提供的代码示例并没有真正说明问题。您能否重新表述一下这个问题,因为我不确定我的答案是否触及问题的核心。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)