我使用 PDFBox 版本 2.0.25 出现错误
java.io.IOException:未知的目录对象 c='>' cInt=62 peek='>' peekInt=62 位于偏移量 26096(起始偏移量:26096)
行错误代码是
PDDocument doc = PDDocument.load(inputFile);
尝试打开文档,一些参考尝试
PDDocument doc = PDDocument.loadNonSeq(inputFile);
但是 PDFBox 版本 2.0.25 没有这样的函数 'loadNonSeq'
完整日志错误
java.io.IOException: Unknown dir object c='>' cInt=62 peek='>' peekInt=62 at offset 26096 (start offset: 26096)
at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:913)
at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryValue(BaseParser.java:154)
at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryNameValuePair(BaseParser.java:288)
at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionary(BaseParser.java:218)
at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:857)
at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:907)
at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:876)
at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:796)
at org.apache.pdfbox.pdfparser.COSParser.parseDictObjects(COSParser.java:756)
at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:187)
at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:226)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1105)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1088)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:1047)
at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:995)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
有什么建议吗?谢谢你
CMS 签名应该是十六进制值,所以我已经发表了评论。请在下面找到。即使我也通过下面的评论解决了同样的问题
byte[] cmsSignature = Base64.decodeBase64(signedHash);
RandomAccessFile raf = new RandomAccessFile(inputFile, "rw");
raf.seek(offset);
raf.write(Hex.getBytes(cmsSignature));
// raf.write(cmsSignature);
raf.close();
使用 3.0.1 版本帮助我摆脱了这个异常(即使在最新版本 2.0.30 中我也遇到了一些文档)。
更新时请查看迁移指南(https://pdfbox.apache.org/3.0/migration.html),因为例如你必须使用
Loader.loadPDF
而不是 PDDocument.load
。