我用这个基本代码通过密码解密pdf
pdfReader = PdfReader(sourceFileInputStream, ReaderProperties().setPassword(ownerPassword.toByteArray()))
但它只适用于我从iText示例repo下载的加密pdf,而不适用于其他类似的pdf:
- 具有所有者密码的示例PDF 1-ownerpw
- 示例PDF 2具有所有者密码-所有者密码和用户密码-用户密码
它为我提供了上述pdfs:的堆栈竞争
com.itextpdf.kernel.exceptions.BadPasswordException: Bad user password. Password is not provided or wrong password provided. Correct password should be passed to PdfReader constructor with properties. See ReaderProperties#setPassword() method.
at com.itextpdf.kernel.crypto.securityhandler.StandardHandlerUsingAes256.initKeyAndReadDictionary(StandardHandlerUsingAes256.java:253)
at com.itextpdf.kernel.crypto.securityhandler.StandardHandlerUsingAes256.<init>(StandardHandlerUsingAes256.java:89)
at com.itextpdf.kernel.pdf.PdfEncryption.<init>(PdfEncryption.java:245)
at com.itextpdf.kernel.pdf.PdfReader.readDecryptObj(PdfReader.java:1403)
at com.itextpdf.kernel.pdf.PdfReader.readPdf(PdfReader.java:762)
at com.itextpdf.kernel.pdf.PdfDocument.open(PdfDocument.java:1982)
at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:246)
at com.itextpdf.kernel.pdf.PdfDocument.<init>(PdfDocument.java:228)
我想可能在我的实现中有一些错误,所以我尝试了iText基于Web的解锁器,但它也导致了";错误的所有者密码。请重试&";。
我在上面使用的pdf是由我生成的,用于使用Adobe Acrobat Pro进行测试。
这些pdf文件也被这个在线服务成功解密。
如果有人知道它出了什么问题,请告诉我。非常感谢。
文件中的加密信息无效。
在文件的相应加密字典中,R(修订(值为6,O和U条目的值为127字节长。
不过,根据规范:
键 | 类型 | 值 | |
---|---|---|---|
O | 字节字符串 | (必需(一个字节字符串,如果R的值为4或更小,则32字节长;如果R6,则48字节长,[…][/tr>||
U | 字节字符串 | (必需(字节字符串,如果R的值为4或更小,则为32字节长;如果R6,则为48字节长,[…][/tr>