我发现如果尝试使用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());
答案 0 :(得分: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文档,则不会发生此问题。
这样说。您无需删除安全限制。您可以通过向java.lang.NoClassDefFoundError
添加正确版本的BouncyCastle库来解决CLASSPATH
。您可能需要按照以下说明将unethicalreading
变量更改为true
:How to read PDFs created with an unknown random owner password?