【问题标题】:iText PDF Concatination fails - InvalidPDFExceptioniText PDF 连接失败 - InvalidPDFException
【发布时间】:2016-12-06 16:13:04
【问题描述】:

我正在尝试使用 itext 4.2.0 实用程序连接 2 个 PDF。在少数情况下,它会在下面的代码中抛出 InvalidPDFException

reader = new PdfReader("c:\tmp\test.pdf");

com.itextpdf.text.exceptions.InvalidPdfException:未找到消息 未找到预告片 com.itextpdf.text.pdf.PdfReader.rebuildXref(未知来源)在 com.itextpdf.text.pdf.PdfReader.readPdf(未知来源)在 com.itextpdf.text.pdf.PdfReader.(Unknown Source) at com.itextpdf.text.pdf.PdfReader.(未知来源)

此 PDF 是有效的 - 我在文本编辑器中打开它并确保它具有 %PDF 以及 %EOF 推荐 here

更新

iText 版本为 2.1.7。 jar 被错误地命名为 4.2.0。

提到的路径(“c:\tmp\test.pdf”)是示例一。我们发送为“c:/tmp/test.pdf”

【问题讨论】:

  • "c:\tmp\test.pdf" 替换为"c:\\tmp\\test.pdf" - 或者您真的有包含水平制表符的文件名?
  • iText 4.2.0 从未由 iText Software 发布。我强烈建议您使用 2.1.7 或 5.5.10。
  • 请分享有问题的 PDF 文件以供分析。没有它,我们只能假设它是缺陷。
  • iText 最高版本 2.1.7 是 com.lowagie.*。任何高于 2.1.7 的版本,包括 ymasory/InProTopia 臭名昭著的 gork,都是com.itextpdf.*。如果您的例外是com.itextpdf.text.exceptions.InvalidPdfException,那么您的 iText 版本绝对是不是 2.1.7。
  • @AmedeeVanGasse AFAIK 4.2s 也使用com.lowagie.*(在包更改之前已应用 4.2.0 标签),因此 OP 似乎实际上使用了 5.x AGPL 版本。跨度>

标签: java itext


【解决方案1】:
  1. 没有 iText 4.2.0。请扔掉它。它是 iText 官方开发人员未发布的流氓版本。这是一个“gork”,意思是只有上帝才真正知道里面是什么。 解决方案:丢弃 iText 4.2.0 并用更新的官方版本替换它: https://github.com/itext/itextpdf/releases
  2. 您收到错误消息,指出未找到键 trailer.not.found 的实际错误消息。这意味着您使用的 iText jar 构建不正确。 jar 中缺少 .lng 文件,因此无法找到实际的错误消息。 解决方案:丢弃 iText 4.2.0 并用更新的官方版本替换它: https://github.com/itext/itextpdf/releases
  3. trailer.not.found 键对应于消息“未找到预告片”。这意味着您正在尝试使用可能看起来像 PDF 的文件创建 PdfReader,但事实并非如此。例如:它以%PDF- 开头,但没有预告片。这意味着 iText 搜索文件(应该以 %%EOF 结尾;请检查是否是这种情况)并且可以找到关键字 startxref。换句话说:预告片不见了。 解决方案:检查 PDF 是否有效。 请注意,旧版本的 iText 无法读取使用 PDF 1.5 之后引入的功能的 PDF。也许你的“非官方”iText 版本太旧了……
  4. 最后:\ 是一个转义字符。这是错误的:"c:\tmp\test.pdf" 因为 if 读取为 "c:[tab] mp [tab] est.pdf" where [tab]是制表符\t。您应该使用"c:/tmp/test.pdf""c:\\tmp\\test.pdf"

【讨论】:

  • 谢谢。 iText 版本是 2.1.7,而不是我在更新中提到的 4.2.0。我所有的 PDF 都已经在数据库中了。我刚刚下载了这个 PDF 并尝试将新的 PDF(这个新的 PDF 页面由 iText 创建)插入到现有的 PDF 中。我可以在阅读器中打开下载的 PDF,如果我在文本编辑器中打开,我可以按照您的建议看到 %PDF、%%EOF、startxref。但是当我试图用这个下载的 pdf 创建 PdfStamper 时,我遇到了异常。相同的代码适用于某些 pdf(相同的用例)
  • 你知道2.1.7应该用在商业环境中吧?请参阅Can iText 2.1.7 / iTextSharp 4.1.6 or earlier be used commercially? 2.1.7 中有一些未解决的法律问题仅在 iText 5 中修复。此外,iText 2.1.7 可以追溯到 2009 年。自那时以来,许多事情都得到了改进。
  • @BrunoLowagie:那不应该是:不应该*用于商业环境
猜你喜欢
  • 2014-01-27
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
相关资源
最近更新 更多