2016-01-19 10 views
0

Я читаю спецификации в формате PDF, и у меня есть несколько вопросов о структуре, которую она имеет.Минимальный размер PDF согласно спецификации

Прежде всего, подпись файла %PDF-n.m (8 байт). После этого в документах указывается может быть не менее 4 байта двоичных данных (но их также может не быть). Документы не говорят, сколько бинарных байтов может быть, так что это мой первый вопрос. Если я пытался проанализировать PDF-файл, как я должен разбирать эту часть? Как я узнаю, сколько бинарных байтов (если они есть) там, где они размещены? Где я должен прекратить разбор?

После этого должно быть тело, стол для креста и трейлер и %%EOF.

Каким может быть минимальный размер файла PDF, если в файле PDF нет ничего (никаких объектов), если предполагается, что файл не содержит секцию необязательных двоичных байтов в начале?

Третий и последний вопрос: Если было несколько разделов кузова + xref + трейлер, где было бы смещено непосредственно перед тем, как указывать %%EOF? Первая или последняя таблица xref?

+0

Вторая строка не может быть произвольным двоичным данным - это просто строка комментария. Сказанное: вы можете разобрать его как любую случайную линию комментариев. – usr2564301

+0

@Jongware Нет, насколько я могу прочитать в спецификациях, это фактически как минимум 4 полностью случайных байта. – alexandernst

+0

Не * полностью * случайный - он все равно должен быть разобран! В собственном руководстве Adobe (у меня нет ISO-32000 на моем iPad) говорится в 3.4.1 «строка комментария, содержащая по крайней мере четыре двоичных символа». Обратите внимание на «комментарий»; представьте, что ваш 1-й символ - LF! (Они также используют «двоичный» как синоним символьного кода> 128: P То, что они явно означают, это «с самым высоким набором бит».) – usr2564301

ответ

2

Прежде всего, подпись файла% PDF-n.m (8 байт). После этого в документах указывается, что может быть не менее 4 байтов двоичных данных (но их также может не быть). Документы не говорят, сколько бинарных байтов может быть, так что это мой первый вопрос. Если я пытался проанализировать PDF-файл, как я должен разбирать эту часть? Как я узнаю, сколько бинарных байтов (если они есть) там, где они размещены? Где я должен прекратить разбор?

Какие документы у вас есть? Спецификация PDF ISO 32000-1 говорит:

Если PDF-файл содержит двоичные данные, так как большинство из них (см 7.2, «Лексические конвенции»), строка заголовка должна быть непосредственно следует комментарий линия, содержащий по меньшей мере четыре двоичных символа, то есть символы, коды которых имеют значение 128 или больше.

Таким образом, эти по крайней мере, 4 байта двоичных данных не сразу после подписи файла без какой-либо структуры, но они находятся на комментарий линии! Это означает, что они

  1. предшествует % (который начинается комментарий, то есть данные, которые вы игнорировать при разборе в любом случае) и
  2. с последующим концом-линии, т.е. CR, LF, или CR LF.

Так легко распознать при разборе. В частности, это просто частный случай строки комментария и ничего особо не предназначен для лечения.

(вздох, я только что видел вас и @Jongware, что в комментариях, когда я писал это ...)

Что может быть минимальным размером файла в формате PDF, при условии, что нет ничего вообще (не объектов, вообще) в файле PDF и предполагая, что файл не содержит дополнительные байты двоичных раздела в начало?

Если нет нет объектов, вы не имеете файл PDF, как некоторые объекты, необходимые в файле PDF, в частности каталога. Итак, вы имеете в виду минимальный действительный файл PDF?

Как вы прокомментировали, вы действительно имеете в виду минимальный действующий PDF.

Пожалуйста, взгляните на вопрос What is the smallest possible valid PDF? на stackoverflow, есть некоторые попытки создать минимальные PDF-файлы, придерживающиеся более или менее строго спецификации. Чтение, например. @plinth's answer вы увидите материал, который больше не PDF, но все же принятый Adobe Reader.

Третий и последний вопрос: Если было несколько разделов кузова + xref + трейлер, где бы было смещено непосредственно перед тем, как указывать %% EOF?

Обычно это будет последним перекрестная ссылка стол/поток, как обычный случай использования

  • начать с PDF, который имеет только одно поперечное справочном разделе;
  • вы добавляете инкрементное обновление с перекрестным ссылочным разделом, указывающим на оригинал, как previous, а новое смещение перед %%EOF указывает на эту новую ссылку;
  • вы добавили еще одно инкрементное обновление с перекрестным ссылочным разделом, указывающим на перекрестные ссылки от первого обновления, как , предшествующий, а новое смещение перед %%EOF указывает на эту новейшую перекрестную ссылку;
  • и т.д ...

Исключением является случай линеаризованных документов, в котором смещение до %%EOF указывает на начальные перекрестные ссылки, которые в свою очередь, указывают на раздел в конце файла, как предыдущий. Подробнее см. Приложение F от ISO 32000-1.

И, как вы можете, конечно, применять инкрементные обновления к линеаризованному документу, вы можете иметь смешанные формы.

В общем, лучше всего, чтобы анализатор смог разобрать любой заказ частичных перекрестных ссылок. И не забывайте, что есть не только перекрестные ссылки, но и альтернативные перекрестные ссылки.

+0

% Я не уверен, что OP понял это * должен * быть совершенно отличным регулярным комментарием ... ᧠₩ ü - вот пара «двоичных» символов, чтобы показать, что они * являются действительными в комментарии. И он начинается с '%'. – usr2564301

+0

Спасибо за разъяснение! Первая часть вопроса должна быть рассмотрена в настоящее время. – alexandernst

+0

'Итак, вы имеете в виду минимальный допустимый PDF-файл?' -> Да, я имею в виду минимально возможное содержимое PDF-файла. «Исключение - это линеаризованные документы» -> Можете ли вы дать мне дополнительную информацию об этом случае? – alexandernst