首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将PDFBox org.apache.pdfbox.cos.COSInteger转换为org.apache.pdfbox.cos.COSDictionary

不能将PDFBox org.apache.pdfbox.cos.COSInteger转换为org.apache.pdfbox.cos.COSDictionary
EN

Stack Overflow用户
提问于 2022-09-16 05:54:05
回答 1查看 119关注 0票数 0

使用PDFBox 2.0.25,过程文档获取签名字典,例pdf

代码语言:javascript
复制
try{
    doc = PDDocument.load(inputFile);
    doc.getSignatureDictionaries()
}catch(Exception e)
{
    e.printStackTrace();
}

由扫描的生产者生成的文件:

代码语言:javascript
复制
Foxit PhantomPDF Printer Version 6.1.0.0923

doc = PDDocument.load(inputFile);中的警告消息

代码语言:javascript
复制
Object (140:0) at offset 4039608 does not end with 'endobj' but with '0'

然后得到行doc.getSignatureDictionaries();中的错误

代码语言:javascript
复制
java.lang.ClassCastException: org.apache.pdfbox.cos.COSInteger cannot be cast to org.apache.pdfbox.cos.COSDictionary
        at org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm.getFields(PDAcroForm.java:378)
        at org.apache.pdfbox.pdmodel.interactive.form.PDFieldTree$FieldIterator.<init>(PDFieldTree.java:79)
        at org.apache.pdfbox.pdmodel.interactive.form.PDFieldTree$FieldIterator.<init>(PDFieldTree.java:68)
        at org.apache.pdfbox.pdmodel.interactive.form.PDFieldTree.iterator(PDFieldTree.java:62)
        at org.apache.pdfbox.pdmodel.PDDocument.getSignatureFields(PDDocument.java:932)
        at org.apache.pdfbox.pdmodel.PDDocument.getSignatureDictionaries(PDDocument.java:952)

为什么会发生这种事?这样的文件能被处理吗?

*更新:我尝试将maven repo Apache PDFBox 2.0.25替换为Apache PDFBox 2.0.26,但仍然得到相同的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 12:37:59

基本问题是PDF.中的对象流中有一个错误。

根据PDF规范ISO 32000 (第1部分和第2部分),第7.5.7节-对象流-

对象流中的对象不应仅由对象引用组成。

但是@ by共享的示例文档在对象流中确实有这样的对象,特别是对象140的113 0 R、对象157的141 0 R和对象191的179 0 R

由于对象流中禁止这些对象引用,许多PDF处理器将这些引用解析为以整数开头的唯一其他类型的对象,即数字对象。例如,对象140被解析为数字113,而不是对对象113的引用(该对象恰好是表单字段对象)。

因此,示例文档中的这些PDF处理器在数组中找到只能容纳表单字段对象的number对象。如果没有对这些处理器的表单字段读取进行防御性编程,您将得到类似于此处观察到的ClassCastException

因此,,虽然PDFBox过去没有在这里进行防御性编程,但主要问题在于创建了当前PDF的PDF生成器。问题应该提交给他们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73740429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档