PDFBox 2.0.4:XFA 到文本错误

2023-12-27

我在尝试将 PDF(XFA) 转换为字符串时收到以下错误。 当我从PDFBox 1.8.12 to PDFBox 2.0.4

这是日志

Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray
WARNING: Corrupt object reference at offset 779916
Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray
WARNING: Corrupt object reference at offset 780049
Mar 09, 2017 7:16:07 AM org.apache.pdfbox.pdfparser.BaseParser parseCOSArray
WARNING: Corrupt object reference at offset 780074
java.io.IOException: Unknown dir object c='>' cInt=62 peek='>' peekInt=62 at offset 780074
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:951)
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSArray(BaseParser.java:651)
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:866)
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryValue(BaseParser.java:150)
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionaryNameValuePair(BaseParser.java:274)
    at org.apache.pdfbox.pdfparser.BaseParser.parseCOSDictionary(BaseParser.java:207)
    at org.apache.pdfbox.pdfparser.BaseParser.parseDirObject(BaseParser.java:854)
    at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:772)
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:741)
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:672)
    at org.apache.pdfbox.pdfparser.COSParser.parseDictObjects(COSParser.java:632)
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:217)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252)

and

java.io.IOException: Wrong type of referenced length object COSObject{7, 0}: COSDictionary
    at org.apache.pdfbox.pdfparser.COSParser.getLength(COSParser.java:907)
    at org.apache.pdfbox.pdfparser.COSParser.parseCOSStream(COSParser.java:949)
    at org.apache.pdfbox.pdfparser.COSParser.parseFileObject(COSParser.java:780)
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:741)
    at org.apache.pdfbox.pdfparser.COSParser.parseObjectDynamically(COSParser.java:672)
    at org.apache.pdfbox.pdfparser.COSParser.parseDictObjects(COSParser.java:632)
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:217)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:966)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:922)
    at org.apache.pdfbox.pdmodel.PDDocument.load(PDDocument.java:870)

我阅读了迁移并使用了 load 而不是 loadNonSeq,因为现在 PDFBox 在内部处理该问题。

有关如何修复这些错误的任何建议。

EDIT Error#1 https://www.dropbox.com/s/2cfed23rjhrppzo/Error1.pdf?dl=0 Error#2 https://www.dropbox.com/s/npt90qnginds7pi/Error2.pdf?dl=0

编辑#2 @TilmanHausherr 我检查了你的理论。我在 Sublime 中打开该文件,删除开头的多余空格并保存。我收到以下错误

    org.apache.pdfbox.filter.FlateFilter decode
SEVERE: FlateFilter: stop reading corrupt stream due to a DataFormatException
java.io.IOException: java.util.zip.DataFormatException: invalid distance too far back
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:82)
    at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69)
    at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:162)
    at org.apache.pdfbox.pdfparser.PDFXrefStreamParser.<init>(PDFXrefStreamParser.java:56)
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefStream(COSParser.java:2075)
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefObjStream(COSParser.java:348)
    at org.apache.pdfbox.pdfparser.COSParser.parseXref(COSParser.java:303)
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:194)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252)
    at utils.PDFManager.PDFToText(PDFManager.java:280)
    at processing.charge.CertificateUtils.getCertificateTypeFromFile(CertificateUtils.java:56)
    at processing.charge.CertificateUtils.getCertificateType(CertificateUtils.java:48)
    at processing.Controller.getDocumentType(Controller.java:110)
    at processing.Controller.insertIntoDb(Controller.java:43)
    at Test.main(Test.java:203)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.util.zip.DataFormatException: invalid distance too far back
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Inflater.java:259)
    at java.util.zip.Inflater.inflate(Inflater.java:280)
    at org.apache.pdfbox.filter.FlateFilter.decompress(FlateFilter.java:107)
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:64)
    ... 19 more
Mar 09, 2017 11:07:22 PM org.apache.pdfbox.filter.FlateFilter decode
SEVERE: FlateFilter: stop reading corrupt stream due to a DataFormatException
java.io.IOException: java.util.zip.DataFormatException: invalid distance too far back
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:82)
    at org.apache.pdfbox.cos.COSInputStream.create(COSInputStream.java:69)
    at org.apache.pdfbox.cos.COSStream.createInputStream(COSStream.java:162)
    at org.apache.pdfbox.pdfparser.PDFXrefStreamParser.<init>(PDFXrefStreamParser.java:56)
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefStream(COSParser.java:2075)
    at org.apache.pdfbox.pdfparser.COSParser.parseXrefObjStream(COSParser.java:348)
    at org.apache.pdfbox.pdfparser.COSParser.parseXref(COSParser.java:303)
    at org.apache.pdfbox.pdfparser.PDFParser.initialParse(PDFParser.java:194)
    at org.apache.pdfbox.pdfparser.PDFParser.parse(PDFParser.java:252)
    at utils.PDFManager.PDFToText(PDFManager.java:280)
    at processing.charge.CertificateUtils.getCertificateTypeFromFile(CertificateUtils.java:56)
    at processing.charge.CertificateUtils.getCertificateType(CertificateUtils.java:49)
    at processing.Controller.getDocumentType(Controller.java:110)
    at processing.Controller.insertIntoDb(Controller.java:43)
    at Test.main(Test.java:203)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.util.zip.DataFormatException: invalid distance too far back
    at java.util.zip.Inflater.inflateBytes(Native Method)
    at java.util.zip.Inflater.inflate(Inflater.java:259)
    at java.util.zip.Inflater.inflate(Inflater.java:280)
    at org.apache.pdfbox.filter.FlateFilter.decompress(FlateFilter.java:107)
    at org.apache.pdfbox.filter.FlateFilter.decode(FlateFilter.java:64)

另外为了验证你的理论,我在 Sublime 中打开了另一个文件(工作正常),它具有相同的空格、制表符和 CR。

工作文件 https://www.dropbox.com/s/igk7i0aryntzu71/correct.pdf?dl=0


正如评论中所讨论的,文件在 PDF 标题开始之前有空白(CR 和 TAB)。您可以使用NOTEPAD ++(或任何可以编辑二进制文件的编辑器)删除它们,或者(如果您的所有文件都有该缺陷)通过编写打开输入流的简短代码,吞咽字节直到您点击“%”,然后复制其余的都从那里到输出流。

我也打开了问题PDFBOX-3714 https://issues.apache.org/jira/browse/PDFBOX-3714.

更新: 该问题已在 2.0.5 中修复,现已推出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PDFBox 2.0.4:XFA 到文本错误 的相关文章

随机推荐

  • 什么是高级模块和低级模块?

    我知道这是以下链接的完全相同的副本 什么是 高级模块 和 低级模块 在依赖倒置原则的背景下 https stackoverflow com questions 3780388 what are high level modules and
  • 更新核心数据对象 swift 3

    我想更新 swift 3 中的核心数据对象 经过一番谷歌搜索后 我没有找到任何有关 swift 3 的信息 所以我的问题是 如何更新 swift 3 中的核心数据对象 使用带有谓词的获取请求来获取现有值 在谓词中使用唯一值 获取对象后 使用
  • Java GUI 自动调整大小

    这里是绘制 GUI 的地方 注意 该类扩展了 JFrame public Cache SubstanceColorChooserUI col new SubstanceColorChooserUI while mode 0 setResiz
  • 在 shell 到 Docker 容器后如何编辑文件?

    我成功地使用以下命令对 Docker 容器进行了 shell 处理 docker exec i t 69f1711a205e bash 现在我需要编辑文件 但里面没有任何编辑器 root 69f1711a205e nano bash nan
  • Alamofire 4 Swift 3 参数编码自定义

    我将我的项目更新为 Swift 3 和 Alamofire 4 我使用的是自定义编码 但它更改为其他编码方法 我无法找到替代方案 等效方案 alamoFire request urlString method HTTPMethod post
  • 如何在 Windows 上的 Git Gui 或 Gitk 中撤消硬重置?

    我在 Windows 上使用 Git Gui 和 Gitk 如何撤消过去两小时内的硬重置 是否可以在不使用命令行的情况下从这些应用程序执行此操作 I saw 这个帖子 https stackoverflow com questions 54
  • 一起记录 Firefox/jQuery/CSS 动画的错误吗?

    我正在编写一个使用 jquery 切换 CSS 类的网站 这些类运行 CSS 动画 在 Google Chrome 和 Internet Explorer 9 10 中 一切正常 在 Firefox Aurora 24 和 Firefox
  • 具有多个客户端的 Azure APIM 和 oAuth 2.0

    我发现很难理解如何使用 oAuth 2 0 区分多个客户端应用程序 使用 APIM 我将后端 Web 服务映射到 Azure API 网关服务 URL 我已将 Oauth 2 0 配置为授予类型作为客户端凭据 因为它是服务到服务集成 在 O
  • 如何在 FDT 内导航/更新 Haxe SDK?

    在 OSX 上 FDT 在此处提供 Haxe SDK Applications FDT 5 app Contents FDT5 haxe haxe 2 09 osx 因为它位于 OSX 包内部 所以我无法导航到它 我如何 在首选项中选择它
  • 为什么 splitViewController:collapseSecondaryViewController:ontoPrimaryViewController: 在 iPhone 6 Plus 上没有被调用?

    我实现了子类UISplitViewController在我的应用程序中 iPhone and iPad 当我旋转设备时 会调用标题中提到的方法Landscape to Portrait方向 除非我在 iPhone 6 Plus 上运行该应用
  • Azure PowerShell - 提取 Azure SQL 数据库信息

    我正在寻找一种方法来提取有关 Azure SQL 数据库的特定信息 已用空间 分配空间和最大存储大小 我知道可以从 Azure 门户获取该信息 但我想使用 PowerShell 来提取它 我已设法使用下面的命令提取一点信息 最大存储大小 但
  • 6000端口有什么特别之处?

    启动你的 Mac 从以下位置获取基本 Flask 应用程序快速启动页面 http flask pocoo org docs 0 10 quickstart 并将端口更改为 6000 这将为您提供以下内容 from flask import
  • 动态 jQuery 变量名

    我想获取 li ID 属性的值 这将是一个 userID 并将其用作字符串的一部分 我最终将使用该字符串作为变量名称的一部分 我将使用这个变量名来创建一个数组 我了解基础知识 但似乎无法找到 jQuery javascript 的正确组合来
  • 将 JavaMail 与自签名证书结合使用

    我有一个包含以下代码的 servlet System setProperty javax net ssl keyStore getServletContext getRealPath keystore jks System setPrope
  • 获取 PushManager 订阅时出错 - JavaScript

    我有以下代码 用于注册服务工作人员并要求用户允许通知 在用户允许推送通知 其中承诺返回 后 我收到错误serviceWorkerRegistration pushManager getSubscription is null 当我关闭浏览器
  • Rails - 显示索引结果并通过 ajax 显示操作

    我有一个非常简单的 Post 资源 有两个操作 索引和显示 我的模板包含一个侧边栏 其中包含指向之前每篇文章的链接 我希望侧边栏链接显示其内容 即 显示 操作的结果 通过阿贾克斯 我知道有很多出色的 http www alfajango c
  • 如何在数据迁移期间使用 mongoose 设置 UpdatedAt 时间戳

    我正在进行从 MS SQL 到 MongoDB 的数据迁移 我正在使用猫鼬 并在我的架构中将时间戳属性设置为 true timestamps true 然后 我尝试设置createdAt和updatedAt字段的值 插入记录时 create
  • 有没有人使用过 ios-sim 实用程序在模拟器中运行 .app 文件?

    如何通过 Developer50ios sim 的路径 我就这样过去了 有什么问题吗 ios sim launch verbose sdk 5 0 env Developer50 这似乎不起作用 I have Developer Devel
  • 如何将映射嵌入到结构中,使其具有平面 json 表示形式

    为了创建类似表的结构 我在之前的应用程序中以以下格式序列化了行数据 key1 key2 15 04 1 3 15 05 1 2 17 08 0 8 现在我正在尝试用 Go 重写它 以便通过实践经验来学习该语言 在 Go 中 可以通过将两个结
  • PDFBox 2.0.4:XFA 到文本错误

    我在尝试将 PDF XFA 转换为字符串时收到以下错误 当我从PDFBox 1 8 12 to PDFBox 2 0 4 这是日志 Mar 09 2017 7 16 07 AM org apache pdfbox pdfparser Bas