【问题标题】:iText compatibility with PDF 1.6iText 与 PDF 1.6 的兼容性
【发布时间】:2018-09-20 12:16:48
【问题描述】:

我发现如果我尝试使用 iText(版本 5.1.1)打开现有的 1.6 PDF 时出现错误。如果我将相同的 PDF 转换为 1.5,我可以阅读它。

我试图找出处理了哪个版本的 iText PDF 1.6 但找不到信息。 任何的想法? 谢谢!

编辑:这里是堆栈:

Caused by: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString
    at com.itextpdf.text.pdf.PdfEncryption.<init>(PdfEncryption.java:147)
    at com.itextpdf.text.pdf.PdfReader.readDecryptedDocObj(PdfReader.java:775)
    at com.itextpdf.text.pdf.PdfReader.readDocObj(PdfReader.java:1152)
    at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:512)
    at com.itextpdf.text.pdf.PdfReader.<init>(PdfReader.java:172)

执行行时发生错误:

final PdfReader reader = new PdfReader(file.getAbsolutePath());

【问题讨论】:

  • 你能用 iText 5.5.13 重现错误吗?可以分享一下PDF吗?你能分享一个错误的完整堆栈跟踪吗?
  • 我已经编辑了我的帖子以添加堆栈,是的,我尝试使用 5.5.13 并且仍然有同样的错误
  • iText 5.1.1 是旧的,但它可以完美地处理 PDF 1.6 文件。当您将 PDF 转换为 PDF 1.5 文件时,您的 PDF 可能存在一些已修复的缺陷。您可以轻松地将其转换为 PDF 1.7 文件,它也可以工作。您的问题不完整,因为您没有分享您的 PDF,您没有分享您的代码,甚至没有分享错误消息。
  • 我无法共享 PDF,因为它是个人文档(不是我的)。我已经编辑了我的问题
  • orimi.com/pdf-test.pdf 这里也是一个 1.6 PDF,它给出了同样的错误。

标签: itext


【解决方案1】:

您的问题具有误导性,因为您提出了虚假指控。您声称您使用的 iText 版本不支持 PDF 1.6。

但是,您在问题的编辑版本中添加的错误消息显示了真正的原因:

Caused by: java.lang.NoClassDefFoundError: org/bouncycastle/asn1/ASN1OctetString

我在 Acrobat Reader 中打开了您在评论中分享的 PDF,这是我看到的:

你可以清楚地阅读:

文档的安全方法限制了可以对文档执行的操作。要删除安全限制,请将安全方法设置为无安全。

这正是您将与 PDF 1.6 兼容的原始 PDF 转换为与 PDF 1.5 兼容的文档时所做的事情。如果您删除了安全限制并将文件保存为 PDF 1.6 文档,则不会发生此问题。

这就是说。您不需要删除安全限制。您可以通过将正确版本的 BouncyCastle 库添加到您的 CLASSPATH 来解决 java.lang.NoClassDefFoundError。您可能需要将 unethicalreading 变量更改为 true,如下所述:How to read PDFs created with an unknown random owner password?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 2013-12-03
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2015-03-07
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多