首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfPageEventHelper in iText

PdfPageEventHelper in iText
EN

Stack Overflow用户
提问于 2013-11-06 22:14:58
回答 1查看 4.8K关注 0票数 1

我正在创建一个pdf,其中每个pdf页的标题将根据当前的页码定制。例如,在第一页标题是“第一页”,在第二页标题是“第二页”,等等.

我们现在要做的是将标题添加到PdfPTable中,然后向PdfPTable添加许多其他内容,因此PdfPTable包含了几个页面的数据。最后,我们将这个大型PdfPTable对象添加到文档中。现在,我们希望使用PdfPageEventHelper中的PdfPageEventHelper()方法来获取当前的页码,这样我们就可以自定义每个页面的标题。

问题是onStartPage()在将大型PdfPTable对象添加到文档之前不会触发,这意味着我们不能在将PdfPTable对象添加到文档之前使资源包加载不同的键值,对吗?有什么建议要意识到这一点吗?

--我们有下面的代码

代码语言:javascript
复制
  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;
    }

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-07 08:39:40

我有不止一个答案。我不知道哪一个适用于你的具体情况:

  1. 永远不要在onStartPage()方法中添加内容。如文档所示,所有内容都应该添加到onEndPage()方法中。
  2. 创建一个大表(它建立在内存中),然后将表添加到文档中并不总是明智的(只有此时,内存才能被释放)。也许您想尝试一下文档中的一些大型表策略。
  3. 在某些情况下,在内存中构建一个表,然后将它添加到文档中是您可以使用的唯一策略。然后,iText将将表的内容分发到不同的页面上,从而触发页面事件。但是:如果要触发特定于表的事件,也可以在表的级别定义事件。为此,有一个PdfPTableEventSplit和一个PdfPTableEventAfterSplit类。

您提供的代码示例并没有真正说明问题。你能不能重新表述一下这个问题,因为我不确定我的答案是否能触及问题的核心。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19823946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档