PDF 2.0: что изменилось
Краткий обзор
Заголовок раздела «Краткий обзор»PDF 2.0 — это ISO 32000-2. Это первая спецификация PDF, полностью принадлежащая ISO, а не Adobe. По сути, это консолидация и упорядочивание 1.7, а не радикальное переосмысление. На этой странице описано, что изменилось на самом деле, какие из этих изменений заметны на практике и как NextPDF по умолчанию ориентируется на базовый уровень 2.0, сохраняя возможность записывать более старую структуру файла, когда этого требует профиль.
Почему это важно
Заголовок раздела «Почему это важно»“PDF 2.0” звучит так, будто речь о другом формате. Это не так. Файл 2.0 использует ту же объектную модель, тот же xref и тот же трейлер, что и 1.7, поэтому реальные изменения легко недооценить. Проблемы вызывают не громкие новые возможности, а ужесточения: правила, которые в 1.7 были необязательными, а теперь ожидаются, и возможности, которые незаметно удалили. Документ, который был полностью корректным файлом 1.7, может оказаться несоответствующим файлом 2.0 без единого видимого отличия.
Вторая причина — направление развития. NextPDF — это движок PDF 2.0. Когда вы понимаете, чего ожидает 2.0 и чем он намеренно отличается от 1.7, проще объяснить, почему движок отказывается от некоторых вещей, строже встраивает шрифты и по умолчанию использует поток перекрёстных ссылок вместо таблицы.
Если коротко
Заголовок раздела «Если коротко»- PDF 2.0 = ISO 32000-2; принадлежит ISO, развивает (а не заменяет) 1.7.
- Заголовок становится
%PDF-2.0; генератор, соответствующий стандарту, указывает версию как 2.0 в заголовке или в каталоге/Version. - Большая часть структуры файла не изменилась — те же косвенные объекты, тот же трейлер, та же дисциплина
startxref/%%EOF. - Перекрёстный поток ссылок — это естественное значение по умолчанию для 2.0; классическая 20-байтовая таблица по-прежнему допустима и по-прежнему требуется некоторыми профилями PDF/A.
- 2.0 добавляет возможности (например, более развитую структуру связанных файлов и частей документа, более стойкое шифрование через расширение AES-256-GCM) и удаляет возможности (некоторые теги структуры; ужесточённые требования к встраиванию шрифтов; устаревшие наборы символов CJK).
- NextPDF по умолчанию ориентируется на 2.0 и может сериализовать структуру 1.7/1.4, когда этого требует профиль соответствия.
Как NextPDF подходит к этому
Заголовок раздела «Как NextPDF подходит к этому»Версия — это решение, выраженное в одном месте: стратегии сериализации.
Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) записывает заголовок %PDF-2.0, указывает /2.0 как версию в каталоге и выдаёт сжатый перекрёстный поток ссылок. В ней также прямо учтено ужесточение требований к шрифтам в 2.0. В профиле 2.0 она может принудительно отклонять невстроенный стандартный шрифт Type 1, а не просто предупреждать о нём, поскольку стандарт теперь ожидает, что эти шрифты будут встроены. Две табличные стратегии (Pdf17TableStrategy, Pdf14TableStrategy) существуют именно потому, что некоторым профилям нужна более старая форма. PDF/A-2/-3 предписывают традиционную таблицу перекрёстных ссылок, а PDF/A-1 дополнительно запрещает объектные потоки и потоки перекрёстных ссылок. Все три стратегии реализуют один интерфейс PdfSerializationStrategy, поэтому выше этой точки генератор работает одинаково. Меняется только форма trailer/xref.
Более стойкое шифрование подключено по тому же принципу. PdfXrefWriter (src/Writer/PdfXrefWriter.php) переносит включение AES-256-GCM (расширение ISO/TS 32003 к 2.0) в словарь шифрования, чтобы записи о версии обработчика и режиме шифра в выходном файле соответствовали фактически создаваемым байтам. Движок не заявляет один шифр и не записывает другой.
Общий принцип такой. 2.0 — это значение по умолчанию. Более старая структура доступна намеренно, никогда случайно. А там, где 2.0 ужесточает правило, NextPDF может удержать эту планку, а не молча её ослабить.
- Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
- Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
- Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
Практический пример
Заголовок раздела «Практический пример»Единственное видимое отличие между файлом 2.0 и файлом 1.7 часто сводится к двум строкам: заголовку и версии каталога, — хотя правила соответствия за ними существенно различаются.
%PDF-2.0 % was %PDF-1.7...1 0 obj<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later /Pages 2 0 R >>endobj...% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)99 0 obj<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>stream<binary xref entries>endstreamendobjstartxref12345%%EOFЧитатель видит %PDF-2.0 и /Version /2.0. Чего он не видит, но видит средство проверки соответствия, — того, что от этого файла теперь ожидается встраивание стандартных шрифтов и что он не должен использовать теги структуры, которые удалил 2.0. Байтов, которые различаются, немного. С правилами — не так.
Распространённое заблуждение
Заголовок раздела «Распространённое заблуждение»Ловушка — в мысли “мы выводим PDF 2.0, значит, мы соответствуем стандарту лучше, чем раньше”. Запись %PDF-2.0 — это заявление, а не гарантия. Файл может нести заголовок 2.0 и всё равно нарушать 2.0 — ссылаясь на невстроенный стандартный шрифт или используя возможность, которую 2.0 удалил, — так же, как это допускалось в 1.7. Маркер версии поднимает планку, по которой оценивается файл. Он не доводит файл до этой планки. Зеркальная ошибка — предполагать, что файл 1.7 работает как 2.0 после смены заголовка: обычно он отрисовывается идентично и не проходит проверку соответствия, потому что ужесточения реальны, хотя и невидимы.
Ограничения и границы
Заголовок раздела «Ограничения и границы»Ориентация на базовый уровень 2.0 означает, что NextPDF по умолчанию использует структуру файла 2.0 и может удерживать ужесточённые правила 2.0. Это не означает, что реализована каждая необязательная возможность 2.0, и не означает, что вывод заголовка 2.0 удостоверяет документ как соответствующий PDF/A, PDF/UA или любому другому профилю. Это отдельные, более строгие цели соответствия, которые накладываются поверх базовой спецификации, и у каждой есть собственная проверка.
Эта страница — практический ориентир по различиям версий, а не исчерпывающий журнал изменений ISO 32000-2 против 32000-1. Там, где конкретная возможность или устаревание 2.0 управляет поведением движка, это поведение привязано к своему пункту стандарта. Здесь описана общая картина, а не каждое отличие на уровне пунктов.
Мини-FAQ
Заголовок раздела «Мини-FAQ»Обратно совместим ли PDF 2.0 с читателями 1.7? В значительной мере — если структура не изменилась. Новые возможности 2.0 обычно спроектированы так, что более старый читатель может игнорировать то, чего он не понимает. Но возможность, доступная только в 2.0, не будет учтена читателем 1.7.
Что имеет приоритет — заголовок или каталог /Version? Каталог /Version имеет приоритет, когда в нём указана более поздняя версия, чем в заголовке. Именно это позволяет инкрементному обновлению повысить версию файла без перезаписи заголовка.
Почему NextPDF по умолчанию использует перекрёстный поток ссылок, а не таблицу? Перекрёстный поток ссылок — это естественный механизм PDF 2.0: компактный и способный индексировать сжатые объекты. 20-байтовая таблица по-прежнему записывается, когда этого требует профиль (в частности, некоторые уровни PDF/A).
Связанные документы
Заголовок раздела «Связанные документы»- Что такое PDF на самом деле — объектная модель и xref, которые PDF 2.0 сохраняет из 1.7.
- Ландшафт стандартов — какое место ISO 32000-2 занимает среди стандартов, которые отслеживает NextPDF, и как пункт стандарта становится поведением.
- Шрифты: самое сложное — ужесточение встраивания шрифтов — одно из изменений 2.0, которое вы действительно ощущаете.
Глоссарий
Заголовок раздела «Глоссарий»- PDF 2.0 — спецификация PDF, стандартизированная как ISO 32000-2; первая редакция, принадлежащая ISO, а не Adobe.
- ISO 32000-1 — стандартизированная ISO версия PDF 1.7 от Adobe; основа, на которой строится PDF 2.0.
- ISO/TS 32003 — техническая спецификация, добавляющая в PDF 2.0 шифрование AES-256-GCM (AESV4).
- Каталог
/Version— запись каталога документа, указывающая версию PDF; переопределяет заголовок, когда указывает более позднюю версию. - Перекрёстный поток ссылок — механизм перекрёстных ссылок PDF 1.5+ / 2.0 (
/Type /XRef); значение по умолчанию NextPDF, при этом классическая таблица по-прежнему доступна для более старых профилей. - Ужесточение — правило, которое было необязательным или допустимым в 1.7 и стало ожидаемым или обязательным в 2.0, меняя соответствие без изменения внешнего вида.