PDF, который отображается в формате Chrome, но не в Acrobat - PullRequest
7 голосов
/ 18 июня 2020
%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 spe c, относящиеся к базовому c PDF, и кажется, что приведенный выше синтаксис следует за ним. Почему Adobe это не нравится?

Вот ссылка на PDF. Обратите внимание, как он открывается в Chrome, но вылетает в Adobe Acrobat. (Этот PDF-файл использует LF для разрывов строк и имеет на странице Resources словарь на основе комментариев.)

1 Ответ

7 голосов
/ 22 июня 2020

Acrobat имеет следующие 2 особенности, обе из которых не соответствуют спецификациям:

  1. Если поток XRef имеет один фильтр, массив использовать нельзя. Итак, /Filter[/FlateDecode] не будет работать, а /Filter/FlateDecode будет. Не уверен, что это может относиться к любому объекту потока.
  2. Поток XRef должен использовать фильтр FlateDecode. ASCIIHexDecode не сработает. Предиктор не требуется.

Вот ссылка на указанный выше PDF-файл, исправленный для Acrobat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...