iText 中的 PdfPageEventHelper

2024-03-16

我正在创建一个 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() method.

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

  3. 在某些情况下,在内存中构建表格然后将其添加到文档中是您可以使用的唯一策略。然后,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(使用前将#替换为@)

iText 中的 PdfPageEventHelper 的相关文章

随机推荐

  • Laravel homestead 多个站点选择哪个本地可访问

    我在 laravel homestead 中有多个站点 现在 我想通过本地网络中的 IP 访问特定站点 但我总是得到我不想要的网站 家园 yaml sites map mdb local to home vagrant code mdb p
  • 在 Scala 中,我如何以无状态、功能性的方式对银行账户进行建模?

    在面向对象的范式下 你可以有类似的东西 class BankAccount balance Double def deposit def withdraw 我想知道你如何在函数范式中做等效的事情 让 BankAccount 类中的每个方法返
  • 如何为发布的EXE(.Net Core)添加版权

    如何将版权 公司信息添加到发布 Net Core 应用程序时生成的 EXE 中 实际上 通过在 csproj 中添加这些信息 生成的 DLL 会被更新 但 EXE 不会被更新 右键单击解决方案中的项目 选择 包 选项卡下的 属性 更改公司和
  • 如何使用装饰器计算函数调用次数?

    我正在刷新我对一些我还没有得到的Python功能的记忆 我正在从中学习这个Python教程 http www python course eu python3 decorators php还有一个我不完全理解的例子 这是关于装饰器计算对函数
  • JFormattedTextField 问题

    1 如何在不使用包含在invokeLater 中的Caret或Focus的情况下将Cursor设置为0位置 可以通过使用 camickr轻松解决格式化文本字段提示 http tips4java wordpress com 2010 02 2
  • 停止 Unicorn 服务器进程运行的最佳方法是什么?

    停止 Unicorn 服务器进程运行的最佳方法是什么 每当我尝试使用它来阻止它时kill p 90234这是行不通的 这很可能是我做错了 Thanks 看看独角兽信号页面 http unicorn bogomips org SIGNALS
  • 配置 org.hibernate.SQL 记录器时,Logback 显示 DEBUG 输出,根目录位于 INFO 级别

    为什么 logback 允许通过设置为 INFO 级别的根记录器进行 DEBUG 输出 上下文是一个使用 Hibernate 的 spring boot starter 项目 在版本 1 2 0 中 POM 命名为 logback clas
  • 带有动态Where子句的Android rawquery

    我正在尝试在 Android 中执行 SQL 查询 如下所示 SELECT FROM Flashcards WHERE category Anatomy OR category Surgery AND difficulty Easy OR
  • 在 Xamarin Android 中访问 UI 线程

    我的应用程序发送和接收 TCP 字符串 这些字符串之一是根据该字符串使对象可见 我当前的代码给出System NullReferenceException has been thrown Object reference not set t
  • jQuery Datatable:标题和搜索在同一行

    目前我的 jQuery 数据表如下所示 我希望历史标题和搜索栏位于同一行 我已经实现了标题和表格 如下所示 h2 History h2 table class table style width 100 thead tr tr thead
  • 如何在我的控制器中使用 Spring HttpRequest?

    我这样设置了测试 SpringBootTest AutoConfigureMockMvc RunWith SpringRunner class public class PublicControllerTest Autowired priv
  • 创建文件夹中每个文件内容的索引

    我正在用Python 制作一个搜索工具 其目标是能够按内容搜索文件 我们主要谈论源文件 文本文件 而不是图像 二进制文件 即使在元数据中搜索将是一个很大的改进 目前我不使用正则表达式 随意的纯文本 这部分算法效果很好 问题是我意识到我主要在
  • 为经典 asp 站点启用日志记录

    我继承了一个经典的 ASP 项目并将其部署在 IIS 7 5 上 我可以访问该网站 但在某些时候我会收到通用 500 错误页面 我想知道发生了什么 所以我认为最好是查看日志 在 c WINDOWS system32 LogFiles 和 c
  • 当RID在SQL Server中遇到相同行时汇总数量

    我尝试了几种选择 但未能得到我想要显示的确切答案 我希望从这里得到想法 以下是我选择进入后的最后温度 RID LOTID SAVID QTY A1278 G926 87 A1278 1 Y976 D958 G 108 A1278 T898
  • 如何在 Django 中为用户创建注册表单

    Django 创建用户的方式是什么 我不是在谈论超级用户 只是一个简单的用户表单和创建帐户 Django 文档很好地涵盖了身份验证主题 并且 Django 本身附带了用于登录 注销 密码更改和重置的视图 对于注册 您必须创建自己的视图 如下
  • 将聊天服务器实现为 WebService

    我有一个学校项目 我必须在其中实现一个聊天应用程序 其服务器将是一个 java web 服务 问题是 我一直认为 Web 服务是调用远程功能的一种方式 而且我不知道如何在 Web 服务上保持 会话 活动 也不知道如何跟踪当前处于活动状态的所
  • 在 URL 中发送参数的最佳且安全的方法

    我正在开发一个网站 该网站具有根据 id 更新和删除数据的功能 现在我担心的是我的网址是 www example com public controller action 1 如果行动是delete 任何人都可以change id from
  • 如何处理 Nimbus Look and Feel 中的派生颜色?

    我想要的是使不可编辑的文本区域的背景与其禁用的背景相同 我知道该颜色可以从UIManager用钥匙TextArea disabled DerivedColor color 214 217 223 parent control offsets
  • 是否可以使用引用键在 Rmarkdown 文档中间插入文章的完整参考文献?

    Here http rmarkdown rstudio com authoring bibliographies and citations html我学习如何在文本中间插入引文并在文档末尾生成完整的参考书目 我想知道是否可以使用引用键得到
  • iText 中的 PdfPageEventHelper

    我正在创建一个 pdf 其中每个 pdf 页面的标题将根据当前页码进行自定义 例如 在第一页中 标题是 第一页 在第二页中 标题是 第二页 依此类推 我们现在要做的是将标题添加到 PdfPTable 中 然后我们还将许多其他内容添加到 Pd