Chrome可以正常打开但是Acrobat无法打开的PDF文件

6
%PDF-1.7
4 0 obj
<</Type/ObjStm/N 3/First 14/Length 139>>
stream
1 0 2 41 3 76 <</Type/Catalog/Version/1.7/Pages 2 0 R>><</Type/Pages/Kids[3 0 R]/Count 1>><</Type/Page/MediaBox[0 0 200 200]/Parent 2 0 R>>
endstream
endobj
5 0 obj
<<
    /Root 1 0 R
    /ID[<7F1FE2C507E6DB4CB0787E660F2B0C65><2450E4E8FF5FC84380428886C0DD4C2F>]
    /Size 6
    /Index[1 5]
    /W[1 4 1]
    /Type/XRef
    /Length 68
    /Filter[/ASCIIHexDecode]
>>
stream
020000000400
020000000401
020000000402
010000000A00
01000000E500
endstream
endobj
startxref
229
%%EOF

上面的PDF在Chrome(或Edge)中打开,但在Adobe Acrobat(Reader)中会崩溃。Ghostscript认为它也很好。请注意,它假定换行符为CRLF。
我阅读了与基本PDF相关的PDF规范部分,似乎上述语法遵循该规范。为什么Adobe不喜欢它?
这里是一个链接到PDF的链接。请注意,它在Chrome中打开,但在Adobe Acrobat中崩溃。(此PDF使用LF作为换行符,并且在页面上有一个基于注释的Resources字典。)

请将PDF文件发布为二进制下载,而不仅仅是文本转储。 - mkl
@mkl 添加了二进制文件的链接。 - wezten
我不会计算偏移量,但我可以告诉你,你的文件缺少一个“资源”字典。这在“页面”级别上是必需的,或者在使用继承时在“页面”级别上也是必需的。至于这是否是Acrobat拒绝你的文件的原因,我不知道。 - David van Driessche
1
此外,交叉引用没有0..Size-1的条目,只有1..Size-1。但是添加一个空的资源字典并添加一个0条目仍然无法使Adobe接受该文件。 - mkl
@DavidvanDriessche 我尝试添加一个空的资源字典,并更新偏移量,但没有帮助。如果您需要包含此内容的PDF,请告诉我。 - wezten
显示剩余2条评论
1个回答

6

Acrobat存在以下两个怪癖,均不符合规范:

  1. 如果XRef Stream只有一个过滤器,则不能使用数组。因此,/Filter[/FlateDecode] 无法使用,而应该使用 /Filter/FlateDecode。这可能适用于任何流对象,但不确定。
  2. XRef Stream必须使用FlateDecode过滤器。ASCIIHexDecode无法使用。不需要预测器。

这里是链接到上述PDF,经过Acrobat修复。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接