You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级iText从7.1.4到7.2.2后单元测试失败求助

解决iText 7.2.2升级后的单元测试失败问题

针对升级iText从7.1.4到7.2.2后遇到的两个单元测试错误,给出具体修复方案:

错误1:java.lang.AssertionError: testHandleEvent中出现异常com.itextpdf.kernel.exceptions.PdfException: Pdf间接对象属于其他PDF文档,请将对象复制到当前PDF文档。

iText 7.2.x版本强化了PDF文档对象的隔离机制,禁止直接跨文档复用PdfObject子类实例(比如字体、图片、字典等)。修复时需要将来自其他文档的对象复制到当前操作的文档中:

// 示例:复制源文档的字体到目标文档
PdfDocument sourceDoc = new PdfDocument(new PdfReader("source.pdf"));
PdfDocument targetDoc = new PdfDocument(new PdfWriter("target.pdf"));

PdfFont sourceFont = sourceDoc.getFonts().get(0);
// 调用copyTo方法完成对象迁移
PdfFont targetFont = sourceFont.copyTo(targetDoc);

// 后续使用targetFont操作目标文档

排查所有测试代码,找到跨文档传递PdfObject的逻辑,统一替换为复制操作。

错误2:com.itextpdf.kernel.exceptions.PdfException: 未找到Trailer。

该错误源于PDF文档完整性校验不通过,7.2.x版本对文档结构的校验比旧版本更严格,修复方向包括:

  • 确保文档正确关闭:使用try-with-resources语法自动管理文档生命周期,避免资源泄漏导致文档不完整:
try (PdfDocument doc = new PdfDocument(new PdfReader(inputStream), new PdfWriter(outputStream))) {
    // 执行PDF操作逻辑
} // 自动关闭文档,确保Trailer正确写入
  • 避免读取未完成的PDF流:测试中如果有生成PDF后立即读取的逻辑,需确保写入流已flush或关闭后再读取。
  • 检查测试用PDF文件:如果测试依赖旧版本生成的PDF,确认文件没有损坏,7.2.x可能不再兼容某些不规范的旧格式PDF,需重新生成符合标准的测试文件。

内容的提问来源于stack exchange,提问作者Rakesh Gourineni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 14:03:13