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

Устранение неполадок: ошибки проверки PDF/A и PDF/UA

Эти разделы описывают ошибки, которые движок выдаёт при сохранении документа с профилем Portable Document Format/Archive (PDF/A) или Portable Document Format/Universal Accessibility (PDF/UA). Номера пунктов ниже взяты из исходного кода движка и сообщений об исключениях; здесь приведён их пересказ. Движок сообщает об обнаруженных нарушениях профиля, но не подтверждает соответствие документа. Для авторитетного вердикта о соответствии используйте внешний валидатор с собственным набором правил.

Раздел: шифрование отклоняется в режиме PDF/A

Заголовок раздела «Раздел: шифрование отклоняется в режиме PDF/A»
  • Симптом. NextPDF\Security\Exception\IncompatiblePdfAModeException с сообщением о том, что операция шифрования запрещена в режиме PDF/A.
  • Вероятная причина. В конвейере включён режим PDF/A и запрошено шифрование. Движок ссылается на International Organization for Standardization (ISO) 19005-{1,2,3,4} §6.1.3: ключ Encrypt не должен присутствовать в трейлере файла PDF/A. Движок безусловно отклоняет это сочетание, независимо от порядка вызовов.
  • Подтверждение / диагностика. getContext() возвращает pdfa_mode и encryption_operation. Тест сценария ошибки tests/SecurityScenarios/PdfAEncryptionRefusalTest.php проверяет, что отказ срабатывает независимо от того, включаете ли вы PDF/A до или после вызова шифрования.
  • Решение.
    1. Определите, что требуется документу: соответствие для архивирования или шифрование.
    2. Для архивного документа удалите вызов шифрования.
    3. Для зашифрованного документа удалите вызов, включающий PDF/A.
    4. Запустите конвейер заново.
  • См. также. Шифрование и разрешения.

Раздел: фильтр изображения запрещён в PDF/A-1

Заголовок раздела «Раздел: фильтр изображения запрещён в PDF/A-1»
  • Симптом. Pdf14FeatureRejectedException при загрузке изображения, с сообщением, в котором указан /JPXDecode или /JBIG2Decode и пункт ISO 19005-1:2005 §6.1.13.
  • Вероятная причина. В сборку PDF/A-1 попало изображение с фильтром, появившимся после PDF 1.4. PDF/A-1 ориентирован на набор возможностей PDF 1.4, поэтому PdfA1FeatureGuard отклоняет Joint Photographic Experts Group (JPEG) 2000 (/JPXDecode) и JBIG2 (/JBIG2Decode).
  • Подтверждение / диагностика. src/Writer/PdfA1FeatureGuard.php содержит список запрещённых фильтров и выдаёт указанный пункт. Эта проверка отклоняет указанные фильтры только в профиле PDF/A-1; PDF/A-2, PDF/A-3 и профиль PDF 2.0 их допускают.
  • Решение.
    1. Перекодируйте исходное изображение без JPEG 2000 или JBIG2. Например, пересохраните его как базовый JPEG или изображение со сжатием Flate.
    2. Либо выберите целевой профиль PDF/A-2 или PDF/A-3, которые допускают эти фильтры.
    3. Запустите сборку заново.
  • См. также. Справочник по соответствию.
  • Симптом. Сборка PDF/A завершается ошибкой при проверке шрифтов, или внешний валидатор сообщает о невнедрённом шрифте.
  • Вероятная причина. Глиф выведен шрифтом, программа которого не внедрена. По контракту менеджера PDF/A каждый шрифт должен быть внедрён, и ни один из 14 стандартных шрифтов не допускается без внедрения.
  • Подтверждение / диагностика. src/Contracts/PdfAManagerInterface.php объявляет validateFont(string $fontName, bool $isEmbedded, array $cmapForward) и документирует правило: каждый шрифт должен быть внедрён, и ни один из 14 стандартных шрифтов не допускается без внедрения. Конкретная реализация этой проверки поставляется в nextpdf/pro.
  • Решение.
    1. Определите шрифт, указанный как невнедрённый.
    2. Настройте для этого шрифта внедряемый файл программы шрифта вместо того, чтобы полагаться на встроенное начертание из 14 стандартных шрифтов.
    3. Подробнее о взаимодействии с подстановкой Base 14 см. раздел о шрифтах и тегировании.
    4. Запустите сборку заново и выполните повторную проверку.
  • См. также. Шрифты и тегирование.

Раздел: присутствует JavaScript и проверка PDF/A завершается ошибкой

Заголовок раздела «Раздел: присутствует JavaScript и проверка PDF/A завершается ошибкой»
  • Симптом. Сборка PDF/A завершается ошибкой при проверке JavaScript, или внешний валидатор сообщает о действии JavaScript.
  • Вероятная причина. Документ или поле формы содержит действие JavaScript. Контракт менеджера PDF/A ссылается на ISO 19005-4:2020 §6.7.1, который запрещает действия JavaScript.
  • Подтверждение / диагностика. PdfAManagerInterface::validateNoJavaScript() и validateNoJavaScriptActions() в docblock-комментариях ссылаются на §6.7.1.
  • Решение.
    1. Удалите действие JavaScript из документа или поля формы.
    2. Если действие необходимо для работы документа, документ не может быть PDF/A. Для этого случая создайте вариант, не являющийся PDF/A.
    3. Запустите сборку заново и выполните повторную проверку.
  • См. также. Справочник по соответствию.

Раздел: тегированный вывод не объявляет PDF/UA-2

Заголовок раздела «Раздел: тегированный вывод не объявляет PDF/UA-2»
  • Симптом. Документ, собранный с включённым тегированием, не распознаётся как PDF/UA-2, или в нём отсутствует заявление о соответствии PDF/UA-2.
  • Вероятная причина. Дерево структуры пусто. Движок не объявляет PDF/UA-2 для документа без тегированной структуры, потому что пустое дерево структуры не соответствует профилю.
  • Подтверждение / диагностика. Тест сценария ошибки tests/Integration/Accessibility/EmptyTaggedPdfDoesNotAdvertisePdfUa2Test.php проверяет, что пустой тегированный документ не объявляет PDF/UA-2. Это документированное поведение движка, а не дефект.
  • Решение.
    1. Убедитесь, что содержимое проходит через путь тегирования, чтобы дерево структуры заполнялось, а не оставалось пустым.
    2. Проверьте, что последовательности маркированного содержимого сопоставлены с элементами структуры.
    3. Запустите сборку заново и повторно проверьте статус PDF/UA-2.
  • См. также. Шрифты и тегирование.

Раздел: проверка PDF/UA-2 завершается ошибкой из-за отсутствующего или недопустимого языка

Заголовок раздела «Раздел: проверка PDF/UA-2 завершается ошибкой из-за отсутствующего или недопустимого языка»
  • Симптом. Проверка PDF/UA-2 завершается ошибкой, потому что запись языка отсутствует или не является допустимым тегом.
  • Вероятная причина. У документа или элемента структуры отсутствует допустимый язык. PDF/UA-2 требует объявлять естественный язык; отсутствующее или некорректное значение Lang не проходит строгую проверку.
  • Подтверждение / диагностика. Тест сценария ошибки tests/Unit/Conformance/PdfUa2Section844LangStrictTest.php проверяет строгое требование к языку. Языковые теги проверяются через src/Accessibility/Bcp47Validator.php; недопустимый тег вызывает src/Accessibility/InvalidBcp47TagException.php.
  • Решение.
    1. Задайте язык на уровне документа в виде допустимого тега Best Current Practice (BCP) 47, например en-US или zh-Hant-TW.
    2. Если фрагмент написан на другом языке, задайте язык для соответствующего элемента структуры.
    3. Запустите сборку заново и выполните повторную проверку.
  • См. также. Шрифты и тегирование.
  • Описанные здесь отказы PDF/A и PDF/UA выдаются внутри движка. Они независимы от вердикта внешнего валидатора и не заменяют его. Для авторитетного результата запустите валидатор, например veraPDF.
  • Конкретный модуль записи обязательных объектов PDF/A (поток метаданных Extensible Metadata Platform (XMP), цель вывода с профилем International Color Consortium (ICC)) определяется во время выполнения из nextpdf/pro. Если установлен только пакет core, эти объекты не выводятся; сборка только на основе core не является полноценным генератором PDF/A.
  • Отказ при шифровании является безусловным и не зависит от порядка вызовов; включение PDF/A после вызова шифрования всё равно вызывает отказ.

Глоссарий: цель вывода · дерево структуры