每个 iText 文档多个渲染器:更新了更多详细信息

2023-12-01

我正在使用 iText7 创建一个包含多个部分的文档。有些部分要正常格式化,但有些要格式化为列。我可以使用 ColumnDocumentRenderer 对象将其正确格式化为列,但是当我这样做时,整个文件设置为使用列。有什么方法可以让 iText 即时交换要使用的渲染器吗?

当我尝试即时交换渲染器时,出现空指针异常(com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:482))。

PdfDocument pdf = new PdfDocument(new PdfWriter(targetFile));
Document document = new Document(pdf);
DocumentRenderer defRender = new DocumentRenderer(document);
document.setRenderer(defRender);
ColumnDocumentRenderer dictRender = getColumnRender();

while (<CONDITION>) {
    document.setRenderer(dictRender);
    document.add(new Paragraph("THIS IS NORMAL TEXT"));
    document.add(new Paragraph("THIS IS NORMAL TEXT"));
    document.add(new Paragraph("THIS IS NORMAL TEXT"));
    <...> 
    document.setRenderer(defRender);
    document.add(new Paragraph("THIS IS COLUMN TEXT"));
    document.add(new Paragraph("THIS IS COLUMN TEXT"));
    document.add(new Paragraph("THIS IS COLUMN TEXT"));
    <...>
}

将渲染器设置为 dictRender 后,第一个 document.add() 语句在 com.itextpdf.kernel.pdf.PdfDictionary.get(PdfDictionary.java:482) 处引发空指针错误。

我不想创建多个不同的 PDF 文件,但我想这可能是我最终必须要做的。感谢您在这里的任何帮助。


发生异常的原因是,默认情况下,页面内容会在可以节省内存的情况下立即刷新。

为了避免立即刷新内容,有一个参数DocumentRenderer and ColumnDocumentRenderer构造函数。

因此,例如,要创建一个DocumentRenderer关闭立即冲洗后,您必须按如下方式创建它:

DocumentRenderer defRender = new DocumentRenderer(document, false);

这非常相似ColumnDocumentRenderer.

接下来,由于您已关闭自动刷新并自行更改渲染器,因此在代码末尾,就在之前document.close();,您必须手动刷新渲染器:

defRender.flush();
dictRender.flush();

现在内容出现了,但由于内容重叠,结果仍然可能看起来很难看。这要由开发人员来解决,因为两个渲染器是独立的实例,并且它们维护currentArea彼此独立。要正确处理此问题,您必须更新currentArea您要切换到的渲染器的currentArea您刚刚完成的上一个渲染器的工作。您可以通过扩展提供的标准渲染器或调用来做到这一点renderer.getCurrentArea()并修改bBox.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每个 iText 文档多个渲染器:更新了更多详细信息 的相关文章

  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • Java 创建浮雕(红/蓝图像)

    我正在编写一个 Java 游戏引擎 http victoryengine org http victoryengine org 并且我一直在尝试生成具有深度的 3D 图像 您可以使用那些红色 蓝色眼镜看到 我正在使用 Java2D 进行图形
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 所有junit测试后的清理

    在我的项目中 我必须在所有测试之前进行一些存储库设置 这是使用一些棘手的静态规则来完成的 然而 在所有测试之后我不知道如何进行清理 我不想保留一些神奇的静态数字来引用所有测试方法的数量 我应该一直维护它 最受赞赏的方法是添加一些侦听器 该侦
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 想要开发像 Facebook 这样的网站 - 处理数百万个请求 - 高性能 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想用 Java 开发一个像 Fac
  • 参数动态时如何构建 JPQL 查询?

    我想知道是否有一个好的解决方案来构建基于过滤器的 JPQL 查询 我的查询太 富有表现力 我无法使用 Criteria 就像是 query Select from Ent if parameter null query WHERE fiel
  • 覆盖 MATLAB 默认静态 javaclasspath 的最佳方法

    MATLAB 配置为在搜索用户可修改的动态路径之前搜索其静态 java 类路径 不幸的是 静态路径包含相当多非常旧的公共库 因此如果您尝试使用新版本 您可能最终会加载错误的实现并出现错误 例如 静态路径包含 google collectio
  • 从 Java 日历迁移到 Joda 日期时间

    以前 当我第一次设计股票应用相关软件时 我决定使用java util Date表示股票的日期 时间信息 后来我体会到了大部分方法java util Date已弃用 因此 很快 我重构了所有代码以利用java util Calendar 然而
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • 如何为 Jackson 编写一个包罗万象的(反)序列化器

    当您提前知道类型时 编写自定义序列化器非常容易 例如 MyType一个人可以写一个MyTypeSerializer extends StdSerializer
  • 从java中的字符串数组中删除空值

    java中如何从字符串数组中删除空值 String firstArray test1 test2 test4 我需要像这样没有 null 空 值的 firstArray String firstArray test1 test2 test4
  • struts 教程或示例

    我正在尝试在 Struts 中制作一个登录页面 这个想法是验证用户是否存在等 然后如果有错误 则返回到登录页面 错误显示为红色 典型的登录或任何表单页面验证 我想知道是否有人知道 Struts 中的错误管理教程 我正在专门寻找有关的教程 或
  • 从一个文本文件中获取数据并将其移动到新的文本文件

    我有一个文件 里面有数据 在我的主要方法中 我读入文件并关闭文件 我调用另一种方法 在原始文件的同一文件夹内创建一个新文件 所以现在我有两个文件 原始文件和通过我调用的方法生成的文件 我需要另一种方法 从原始文件中获取数据并将其写入创建的新
  • Java 编码风格、局部变量与重复方法调用

    我更喜欢使用局部变量而不是多次调用同一方法 I prefer this Vehicle vehicle person getVehicle if vehicle instanceof Car Car car Car vehicle car
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 如何使用[[UIApplication sharedApplication] openURL:]打开其他应用程序?

    我跟着http iosdevelopertips com cocoa launching your own application via a custom url scheme html在 app2 FontTest 中打开 app1 G
  • 以编程方式为 Outlook 2010 创建自定义通讯簿

    我想创建一个自定义联系人列表 或地址簿 因为它被称为 这样在 Outlook 中 用户将查看 建议的联系人 联系人 等 然后是 自定义联系人 我去尝试了以下方法 int count this Application GetNamespace
  • Java NetBeans 中无法识别 .isBlank() [重复]

    这个问题在这里已经有答案了 我尝试实现 isBlank 来省略空格 netBeans IDE 11 0 和 8 2 显示 找不到符号 错误 当这个项目从另一台电脑打开时它就可以工作了 public FormulaElement parseF
  • 使用 VBA 时 Form.Submit 未完成

    我有一个正在从中提取数据的网页 除了单击图像元素然后提交表单并创建包含数据的弹出窗口之外 我可以使用 VBA 完成所有操作 图像元素中的属性之一称为 productguid 并且具有字符串值 a12 545 在我用鼠标单击图像元素之前 表单
  • 量角器 AngularJS 全局变量

    我使用 Protractor 和 angularjs 来创建我的 e2e 测试 我有许多文件 其规格数组非常大 并且我想在所有文件之间共享一个通用函数 有没有办法创建一个全局的 beforeEach 我可以在其中注入我的函数 Exports
  • 如何解析具有相同结构但不同名称的json数组[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想解析一个 json 文件 但它的过程是这样的 CDG id 32569 airport name Charles De Gaulle latitude 49 0167 longi
  • 需要 GeckoFX 的代理用户名和通行证帮助吗?

    我正在尝试设置代理用户名和密码 我看到了这个帖子 http geckofx org viewtopic php id 832 我认为这可能是用户名 密码的类似设置 例如 Skybound Gecko GeckoPreferences Use
  • 使用 Xpath 处理较大 XML 文件的最佳方法是什么?

    我有一个要求 必须使用大型 XML 4 GB 文件 来查找其中的值 基本上我必须编写大约 30 个不同的 Xpath 并将这些值存储在列表中 当我尝试解析 XML 时 它会抛出内存错误 我尝试过使用 lxml 和 ElementTree 来
  • Angular 2 的最佳实践

    Angular 2 被认为是前端开发的完整框架 与 jQuery 的各种功能相比 优点之一是以托管方式进行前端交互 另一方面 jQuery非常灵活 其特性可以按需逐个函数应用 它与纯HTML代码配合良好 尤其是视觉设计师准备了好看的模板 从
  • 防止数字粘贴到 .net windows 窗体中的文本框中

    我已阻止使用按键事件在文本框中输入数字 但是 当使用 Ctrl V 或通过鼠标粘贴内容时 数字将被输入到文本框中 如何防止这种情况发生 我必须允许粘贴 输入除数字之外的所有文本 非常简单的方法是使用以下命令检查文本TextChanged事件
  • C 中的结构填充

    如果我在 C 中有以下结构定义 typedef struct example char c int ii int iii 当我声明上述结构类型的变量时 应该分配什么内存 例如 ee 以及什么是结构填充以及结构填充是否存在任何风险 尝试一下
  • 缩小映射函数的泛型类型

    我期望 TS 的最新版本 例如 43183 使这种模式成为可能 而无需不安全的铸造 有任何想法吗 操场 export type Mapping number number string string function get
  • SSIS(SQL Server 集成服务)安装失败

    安装 Microsoft DataTools IntegrationServices exe 在已安装 Visual Studio 2019 的 Windows 10 PC 上 我收到这个错误 谁能帮助我理解为什么会发生这种情况 预先非常感
  • HTML5 音频无法在 ie7 或 ie8 中工作

    在 IE7 8 中测试时 我的脚本崩溃并收到此错误 SCRIPT438 对象不支持属性或方法 播放 我正在使用 HTML5 音频标签在我的网页上嵌入和播放音频 div div
  • 在 grails 中使用 junit 4

    我想在我的 grails 测试中使用一些 JUnit 4 功能 但目前 grails 测试在 JUnit 3 下运行 JUnit 4 可以从 groovy 使用 但用 JUnit 4 替换 grails 中的 JUnit jar 似乎并不能
  • MySql 错误:#105(代码 150)。当我创建数据库架构时,我收到错误代码 150。

    DROP SCHEMA IF EXISTS YouthMinistry CREATE SCHEMA IF NOT EXISTS YouthMinistry DEFAULT CHARACTER SET utf16 COLLATE utf16
  • 将存储为 NUMERIC 的日期转换为 DATETIME

    我目前正在处理一个查询 需要计算两个不同日期之间的天数差异 我的问题DATE之前的列 因为它们都存储为numeric列这是一个完全的痛苦 我尝试使用CONVERT正如我过去所做的那样 尝试获取不同的部分DATETIME字符串已构建 但我没有
  • Python 中的 if 和 elif 是良好的编程实践

    你好 我目前正在尝试很好地掌握 Python 中的 if elif else 结构 我正在 python 中尝试一些奇怪的组合 有一个测试程序来了解 if if elif elif else 代码中的输出 但是我得到了像这样的奇怪结果 in
  • Oracle 奇怪行为字符串与星期几的比较

    虽然下面的代码打印 错误的星期四 10 FEB 是星期四 BEGIN IF to char to date 10 FEB 2011 DD MON YYYY Day Thursday THEN dbms output put line Cor
  • 每个 iText 文档多个渲染器:更新了更多详细信息

    我正在使用 iText7 创建一个包含多个部分的文档 有些部分要正常格式化 但有些要格式化为列 我可以使用 ColumnDocumentRenderer 对象将其正确格式化为列 但是当我这样做时 整个文件设置为使用列 有什么方法可以让 iT