无法使用Adobe Acrobat打开PDF文件

问题描述 投票:0回答:3

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

我生成了这个PDF文件:http://www.o2sol.com/download/Sample_ObjectCompression_CryptBad.pdf 我可以使用我试过的任何PDF查看器(Chrome,Edge,Foxit,SumatraPDF,Xodo等)打开PDF文件,但Adobe 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 - 文件未加密,对象流或外部参照流没有压缩。加密对象已被文档信息替换,以保持相同的对象编号和偏移。

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

pdf pdf-generation
3个回答
2
投票

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

01 00 00 00

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


0
投票

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


0
投票

问题似乎在于对象流的流数据,它似乎没有正确编码。尝试解码它不会产生任何数据,也许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

(或许意味着要发表评论。)

© www.soinside.com 2019 - 2024. All rights reserved.