并不是真正的编程问题,但我的想法已经用完了。
我生成此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-文件未加密,对对象流或外部参照流不进行压缩。加密对象已被文档信息取代,以保持相同的对象编号和偏移量。
两个文件都具有相同的外部参照流和对象流。 CryptBad2仍然无法由Acrobat打开,因此我怀疑这是一个加密问题,尽管如果我加密文件但放弃对象压缩,则打开文件不会出现Acrobat问题。
答案 0 :(得分:2)
对象10(交叉引用流本身)本身没有有效的条目。其字段为:
01 00 00 00
(用W [1 2 1]表示)它位于错误的偏移量0上(肯定)。
答案 1 :(得分:0)
Acrobat可能在打开文件之前尝试读取整个对象流,而提到的查看工具可能会被部分读取并允许部分显示。
答案 2 :(得分:0)
问题似乎出在对象流的流数据中,它似乎没有正确编码。尝试对其进行解码不会产生任何数据,也许Flate编码过程出了点问题。
当在对象流中查找对象时,PDF库会发现相同的问题,并引发错误(这可能是Acrobat中出现的相同问题,因为这是Acrobat用于打开文档的原因)。
在标头之后和对象ID 1之前,偏移量0x0A处似乎还有些垃圾(11字节)。
25 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8 D8
(也许是评论。)