在 Chrome 中呈现但不在 Acrobat 中呈现的 PDF

wez*_*ten 7 pdf

%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
Run Code Online (Sandbox Code Playgroud)

上面的 PDF 在 Chrome(或 Edge)中打开,但在 Adob​​e Acrobat(阅读器)中崩溃。Ghostscript 也认为它很好。请注意,它假定换行符为 CRLF。

我阅读了与基本 PDF 相关的 PDF 规范部分,似乎上面的语法遵循它。为什么 Adob​​e 不喜欢它?

这是PDF的链接。请注意它如何在 Chrome 中打开,但在 Adob​​e Acrobat 中崩溃。(此 PDF 使用 LF 表示换行符,并Resources根据注释在页面上提供字典。)

wez*_*ten 7

Acrobat 有以下两个怪癖,它们都不符合规范:

  1. 如果外部参照流具有单个过滤器,则不得使用数组。所以/Filter[/FlateDecode]不会起作用,而且/Filter/FlateDecode会。这可能适用于任何流对象,不确定。
  2. 外部参照流必须使用FlateDecode过滤器。ASCIIHexDecode不会工作。不需要预测器。

这是上述 PDF的链接,已针对 Acrobat 进行了修正。