com.itextpdf.text.exceptions.InvalidPdfException:重建失败:在文件指针处读取字符串时出错

com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: Error reading string at file pointer

阅读 PDF 时遇到异常。它在 Acrobat reader 中打开良好。我在另一个问题中读到,虽然它在 acrobat 中打开,但没有必要通过 iText 打开,因为 PDF 包含错误,他建议修复 PDF。但是文件来自客户端,他们可以打开 Acrobat,所以要么我必须修复它,要么在 Acrobat 中显示错误或警告。

com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed: Error reading string at file pointer 10891; Original message: Error reading string at file pointer 10891
at com.itextpdf.text.pdf.PdfReader.readPdf(PdfReader.java:655)

PDF 文件摘录

%PDF-1.1
1 0 obj
<<
/Creator (Developer 2000)
/CreatorDate (
/Author (Oracle Reports)
/Producer (Oracle PDF driver)
/Title (con5010I412014141258.pdf)
>>
endobj
3 0 obj
<<
/Type /Pages
/Kids 4 0 R
/Count 5 0 R
>>
endobj
7 0 obj
<</Length 8 0 R>>
stream
BT
  1. 有什么方法可以让客户知道 PDF 有错误吗?通过 Acrobat 或其他一些软件而不是 Java 异常。
  2. 有没有办法绕过这个错误并继续?我们在安全 PDF 方面遇到了类似的问题,我们确实解锁了。请推荐

它实际上是一个无效的 PDF。当我在文本编辑器中打开 PDF 时,我注意到 header 有没有右括号的 CreatorDate。我只是添加了带有有效日期的右括号,例如 CreatorDate(2014 年 11 月 5 日 17:50:24),然后就可以了。我要求客户在他们这边纠正

在文本编辑器(记事本、notepad++ 等)中编辑 PDF 并简单地添加右括号。

所以下面一行:
/创作者日期(

更改为:
/创作者日期()

就我而言,它允许我使用打印来修复文件。

(打印出来的文件基本是一个binary/image的文件,很多info/metadata丢失了)