【问题标题】:PDF file cannot be opened with Adobe Acrobat无法使用 Adob​​e Acrobat 打开 PDF 文件
【发布时间】:2019-02-16 02:54:21
【问题描述】:

不是一个真正的编程问题,但我的想法已经不多了。

我生成此 PDF 文件:http://www.o2sol.com/download/Sample_ObjectCompression_CryptBad.pdf
我可以使用我尝试过的任何 PDF 查看器(Chrome、Edge、Foxit、SumatraPDF、Xodo 等)打开 PDF 文件,但 Adob​​e Acrobat 无法打开它,错误是“文件已损坏,无法修复。”

谁能告诉我文件有什么问题?

免责声明:PDF 文件是使用我工作的库 PDF4NET 生成的。

更新:
我修复了对象 10 的偏移量,但仍然无法使用 Acrobat 打开文件。
我创建了 2 个更新的文件:
http://www.o2sol.com/download/Sample_ObjectCompression_CryptBad2.pdf - 文件刚刚使用 RC4 加密,没有压缩对象流或外部参照流
http://www.o2sol.com/download/Sample_ObjectCompression_NoCrypt2.pdf - 文件没有加密,没有压缩对象流或外部参照流。加密对象已替换为文档信息,以保持相同的对象编号和偏移量。

两个文件具有相同的外部参照流和对象流。 CryptBad2 仍然无法被 Acrobat 打开,所以我怀疑这是一个加密问题,虽然如果我加密文件但放弃对象压缩,文件打开时 Acrobat 没有问题。

【问题讨论】:

    标签: pdf pdf-generation


    【解决方案1】:

    对象 10(交叉引用流本身)本身没有有效条目。它的字段是:

    01 00 00 00
    

    这意味着(通过 W [1 2 1])它位于偏移量 0 处,这是错误的(肯定的)。

    【讨论】:

    • 谢谢,我修正了偏移,但问题仍然存在。
    • 嗯……真的很奇怪。这个结果在我看来也不错:-/
    【解决方案2】:

    Acrobat 可能会在打开文件之前尝试读取整个对象流,而提到的查看工具可能会进行部分读取并允许部分显示。

    【讨论】:

      【解决方案3】:

      问题似乎在于对象流的流数据,它似乎没有正确编码。尝试对其进行解码不会产生任何数据,可能是 Flate 编码过程出了问题。

      PDF 库在对象流中查找对象时发现相同的问题并引发错误(这很可能与 Acrobat 中出现的问题相同,因为 Acrobat 使用它来打开文档)。


      在偏移量 0x0A 处似乎还有一些(11 字节)垃圾,就在标头之后和对象 ID 1 之前:

      25 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8
      

      (可能是评论。)

      【讨论】:

      • 我更新了文件,我删除了压缩,只保留了加密但仍然无法使用 Acrobat 打开文件。
      猜你喜欢
      • 2019-01-20
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2012-03-09
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多