Перейти к содержимому

Архивирование и PDF/A

Spec: ISO 19005-4:2020, PDF/A-4 Spec: ISO 19005-2, PDF/A-2 Evidence: Standard-backed

PDF/A — это формат, к которому обращаются, когда документ должен оставаться читаемым и точным спустя десятилетия, в программах, которых ещё не существует. Эта страница объясняет, что на самом деле охватывает такая гарантия, как NextPDF создаёт соответствующий файл и что обычно удивляет команды: создать PDF/A и доказать, что файл является PDF/A, — разные задачи. Вторая по-прежнему остаётся за вами.

Архивные обязательства неумолимы именно своей незаметностью. Сегодня файл выглядит нормально, поэтому его помещают в архив. Сбой — невстроенный шрифт, аппаратно-зависимый цвет, зашифрованный трейлер — обнаруживается годы спустя, когда исходного окружения уже нет и никто не может восстановить, как должен был выглядеть документ. К этому моменту цена — не повторная отрисовка, а запись, которой вы уже не можете доверять.

PDF/A существует именно для того, чтобы устранить этот класс сбоев. Но “мы использовали библиотеку PDF/A” — это не то же самое, что “этот файл соответствует”. Из-за смешения этих двух вещей в архивах накапливаются документы, которые лишь кажутся сохранёнными.

  • Назначение PDF/A — точное, самодостаточное, аппаратно-независимое воспроизведение во времени — он сохраняет статический визуальный облик документа независимо от инструментов, которыми документ был создан (ISO 19005-2, Введение).
  • Это требует конкретных ограничений: все шрифты встроены, аппаратно-независимый цвет (напрямую или через output intent; ISO 19005-4 §6.2.4.1) и отсутствие шифрования в трейлере.
  • NextPDF создаёт PDF/A через явный, включаемый по запросу режим, который отклоняет несовместимые операции вместо того, чтобы выдать файл, который незаметно не соответствует требованиям.
  • Соответствие определяет средство проверки, а не заявляет производитель. Даже успех применения стандарта зависит от окружающей архивной среды и процедур (ISO 19005-4, Введение). Проверка результата — это шаг, который по-прежнему за вами.

NextPDF рассматривает PDF/A как режим документа, а не как фильтр постобработки. Этот режим включается по запросу. Когда он включён, он активно защищает документ от операций, которые нарушили бы соответствие. Принцип проектирования — быстрый отказ: лучше явно отклонить запрос на зашифрованный PDF/A, чем вернуть файл, который выглядит архивным, но таковым не является.

В этом сценарии четыре этапа. Третий — именно тот, который команды часто пропускают.

  1. Compose for permanence Embed every font, use device-independent colour or an output intent, and avoid features the chosen PDF/A part forbids.
  2. Enable the PDF/A mode Opt in explicitly to the target conformance level. The mode now guards the document against incompatible operations.
  3. Validate independently Run a conformance checker. A passing report — not the producing library — is the evidence the archive needs.
  4. Preserve with procedure Store under records-management policy. The standard itself notes archival success depends on the environment, not the file alone.
Архивный сценарий от начала до конца: движок создаёт соответствующий кандидат и отклоняет операции, нарушающие соответствие; независимый валидатор выносит вердикт, который действительно важен для архива.

Включение по запросу — это настоящая защита, а не просто флаг. Когда режим PDF/A включён и выполняется несовместимая операция — включение AES-GCM или стандартного обработчика шифрования, — движок выбрасывает типизированную ошибку несовместимости. Защита работает в обоих порядках: включить PDF/A, затем запросить шифрование, либо запросить шифрование, затем включить PDF/A. В любом случае результат — однозначный отказ. ISO 19005 запрещает ключ Encrypt в трейлере соответствующего файла, и движок рассматривает это как обязательное требование, а не рекомендацию.

Режим также поддерживает согласованность собственного состояния. Включение PDF/A для конкретной части (например, побайтно точного уровня PDF/A-3 по сравнению с PDF/A-4) устанавливает дискриминант соответствия документа в нужное значение. Тогда проверки на стороне записи, зависящие от части, видят правильное значение, а не устаревшее значение по умолчанию. Именно такая внутренняя согласованность решает, пройдёт ли файл проверку валидатором.

Эта страница полностью подкреплена стандартом. Evidence: Standard-backed

Само назначение закреплено в стандарте. Spec: ISO 19005-2 указывает, что основное назначение PDF/A — это механизм представления электронных документов так, чтобы их статический визуальный облик сохранялся во времени, независимо от используемых инструментов и систем. Из этого следуют ограничения: Spec: ISO 19005-4:2020, §6.2.4.1 требует, чтобы цвет был задан аппаратно-независимо, напрямую или через output intent формата PDF/A. Требование к шрифтам подкреплено базовым форматом — Spec: ISO 32000-2:2020, §9 отмечает, что наиболее предсказуемая, надёжная отрисовка достигается, когда все шрифты встроены, — именно то свойство, без которого архив не может обойтись.

Эта граница тоже задана стандартом, а не только редакционным предостережением. Spec: ISO 19005-4:2020 указывает во Введении, что успешное применение в архивных целях зависит от архивной среды организации, политик управления документами и дополнительных условий сохранности. Соответствие оценивается по нормативным требованиям стандарта средством проверки, а не объявляется производителем.

Поведение движка подкреплено кодом: Evidence: Code-backed Document::enablePdfA() — это явное включение по запросу: оно выбрасывает типизированную ошибку несовместимости, когда шифрование и PDF/A сочетаются в любом порядке, и поддерживает дискриминант соответствия документа синхронно с выбранной частью.

Код ниже показывает поведение защиты на границе режимов. Сам режим PDF/A — это возможность уровня Premium. Проверка соответствия — это отдельный, независимый шаг.

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
use NextPDF\Security\Exception\IncompatiblePdfAModeException;
/**
* Produce an archival candidate, then prove it independently.
*
* The engine refuses conformance-breaking combinations; it does NOT
* certify the result. A validator does that.
*
* @param PdfDocumentInterface $doc A document with all fonts embedded
* @param object $pdfaLevel The target PDF/A version (Premium enum)
*
* @return string The archival candidate's bytes — not yet a verified PDF/A
*/
function buildArchivalCandidate(
PdfDocumentInterface $doc,
object $pdfaLevel,
): string {
try {
// Opt in explicitly. From here the mode guards the document.
$doc->enablePdfA($pdfaLevel);
} catch (IncompatiblePdfAModeException $e) {
// e.g. encryption was already requested — refused, not silently
// downgraded into a non-conforming "archival" file.
throw new \RuntimeException(
'PDF/A and encryption are mutually exclusive for a conforming '
. 'file; resolve before archiving.',
previous: $e,
);
}
$bytes = $doc->getPdfData();
// The step teams skip: this is a CANDIDATE. Run an independent
// conformance validator before treating it as a preserved record.
return $bytes;
}

Комментарий к возвращаемому значению — это и есть главный урок. Имя функции намеренно говорит кандидат. Движок создал файл, который должен соответствовать. Только средство проверки превращает “должен” в свидетельство.

Из-за одного заблуждения архивы заполняются документами, которые на самом деле не сохранены: “библиотека говорит PDF/A, следовательно файл является PDF/A.” Выносить этот вердикт — не задача библиотеки. Производитель может выдать файл, предназначенный для соответствия, и всё же не выполнить нормативное требование. Соответствие определяется по стандарту средством проверки. Именно на это определение полагается аудитор или будущий читатель. Считать намерение библиотеки-производителя доказательством — главная ошибка.

Вторая, более тонкая ловушка — предполагать, что один лишь PDF/A сохраняет документ. Сам стандарт связывает успех архивирования с окружающей средой и процедурами. Соответствующий файл в недисциплинированном хранилище всё равно под угрозой. Формат необходим, но недостаточен.

  • NextPDF создаёт соответствующий кандидат; он не сертифицирует соответствие. Запустите независимый валидатор. Свидетельством является пройденный отчёт, а не библиотека-производитель.
  • Режимы соответствия PDF/A — это возможность уровня Premium. Core выдаёт обычный PDF 2.0 и показывает практический путь обновления. Он не предоставляет гарантий PDF/A. См. границу ниже.
  • PDF/A и шифрование взаимно исключают друг друга для соответствующего файла. Движок отклоняет это сочетание в любом порядке, а не деградирует незаметно.
  • Движок не может встроить шрифты, которые ему не предоставлены, или исправить аппаратно-зависимый цвет, который вы передаёте. Компоновка для долговечности — встроенные шрифты, аппаратно-независимый цвет — это ответственность входных данных.
  • Долговечность архива зависит от процесса, а не только от файла. ISO 19005 делает организационные сроки хранения и процедуры управления документами частью успешной сохранности.
  • Эта страница подкреплена стандартом и описывает поведение в Premium. Она не утверждает сертификации и не предоставляет её.
Соответствие PDF/A для архивного хранения — edition availability
Edition Availability
Core

Core выдаёт только обычный PDF 2.0. enablePdfA() выбрасывает практическую ошибку обновления, указывающую на коммерческий пакет. Не существует гарантии PDF/A в одном только Core.

Pro

Режимы соответствия PDF/A (включая побайтно точные уровни PDF/A-3 и PDF/A-4) доступны вместе с защитой от несовместимости с шифрованием.

Enterprise

Добавляет структурную политику соответствия PDF/A и отчёт (это всё ещё проверка структуры, а не сертификация — окончательное определение остаётся за валидатором и вашей командой по соответствию).

  • PDF/A — семейство ISO 19005: ограниченный профиль PDF для долговременного хранения, предназначенный для воспроизведения статического облика документа во времени независимо от инструментов создания.
  • Уровень соответствия / часть — конкретный вариант PDF/A (например, PDF/A-2, PDF/A-3, PDF/A-4 и их подуровни); каждый ограничивает, какие возможности PDF можно использовать.
  • Output intent — встроенный профиль цветовой характеристики, позволяющий интерпретировать аппаратно-зависимый цвет аппаратно-независимо.
  • Аппаратно-независимый цвет — цвет, заданный так, чтобы он воспроизводился единообразно независимо от устройства отрисовки; требование PDF/A.
  • Средство проверки соответствия / валидатор — независимое программное обеспечение, оценивающее файл по нормативным требованиям стандарта; источник вердикта о соответствии.
  • Архивный кандидат — файл, созданный с намерением соответствовать, до того как независимый валидатор подтвердил, что он действительно соответствует.