当前位置: 首页 > 面试题库 >

iText中的PdfPageEventHelper

焦宏硕
2023-03-14
问题内容

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

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



 类似资料:
  • 学习如何在Java编程中使用Itext。 以下是示例 - 如何使用Java在PDF中创建表。 如何使用Java为PDF中的表设置背景。 如何使用Java将图像添加到表中。 如何使用Java在PDF中添加列表。 如何使用Java格式化表中单元格的内容。 如何使用Java将嵌套表添加到PDF。 如何使用Java将文本作为段落添加到PDF文档中。 如何使用Java格式化PDF中的文本。 如何使用Java

  • iText 是一个非常著名的能够快速产生 PDF 文件的 Java 类库。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。 示例代码: // step 1Document document = new Document();// step 2PdfWriter.getInstance(document, new FileOutputStream(filename));// st

  • 我正在为一个项目评估itext,该项目将动态生成的HTML文档转换为pdf文档。XMLWorker完全符合要求。当我的HTML文档包含中文/韩文等字符时,我遇到了问题。 我听说在Itext中,我们可以使用字体而不嵌入它们。我看过FontSelector的例子,FontSelector使我们能够在不嵌入字体的情况下使用字体。生成的pdf提示从adobe网站下载语言包,这就是我想要的。 但我不确定这对

  • 问题内容: 我们使用iText从Java生成PDF(部分基于此站点的建议)。但是,将徽标的副本以GIF之类的图像格式嵌入会导致人们放大和缩小时看起来有些奇怪。 理想情况下,我们希望以矢量格式嵌入图像,例如EPS,SVG或只是PDF模板。该网站声称EPS支持已被删除,在PDF中嵌入PDF或PS可能会导致错误,甚至没有提到SVG。 我们的代码直接使用Graphics2D API而不是iText,但是我

  • 我正在使用iText4.2.1生成pdf报告。所以基本上我有一个PDF模板,它包含一个封面页,结束页和一个内容页(只包含一个图像头)。 我正在使用pdfcopy&pdfimportedpage复制我的模板,并使用pageStamp动态添加我的内容。 需要:我需要多次使用内容页:与报表中的内容页一样多。 下面是一个代码示例: -->在第2页中,我将看到我的文本1和文本2 我尝试使用相同的pdfimp

  • 我正在尝试使用iText 7为Java创建一个带有希腊字符的pdf。PDF中只有拉丁字符和数字可见。 我正在使用以下代码加载字体: 我该怎么办?