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

Соответствие PDF/UA-2: теговая структура, которую NextPDF формирует для ISO 14289-2

Разграничение ответственности. NextPDF формирует теговую структуру, которая помогает создавать доступные документы; он не заявляет соответствие PDF/UA-2 — его определяет средство проверки.

PDF/UA-2 — это ISO 14289-2:2024, профиль доступности поверх тегированного Portable Document Format (PDF) 2.0. NextPDF Core формирует дерево структуры, размеченное содержимое, язык в каталоге и структуре, а также маркер pdfuaid через Document::enableTaggedPdf(). Библиотека формирует доступную структуру; соответствие определяет средство проверки PDF/UA, например verapdf --flavour ua2. ISO 14289-2 §8.1 трактует соответствие как требования к формату файла, которым должен удовлетворять документ: их оценивает средство проверки, а не декларирует производитель.

Окно терминала
composer require nextpdf/core:^3

Тегирование PDF/UA-2 — это функция Core (security.tagged_pdf). Чтобы сформировать саму теговую структуру, пакет Premium не нужен.

Document::enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null) устанавливает ConformanceMode::PdfUa2 и подключает TaggedContentEmitter. Режим — единственный источник истины о том, тегируется ли документ по спецификации; затем модуль записи выполняет структурные требования ISO 14289-2:

  • Реальное содержимое тегируется — §8.2.2: каждая единица реального содержимого, не являющаяся артефактом, включается в логическую структуру, а артефакты помечаются как артефакты. Это основано на теговой структуре PDF из §14.7 ISO 32000-2 (StructTreeRoot, элементы структуры, MCID).
  • Объявляется естественный язык — §8.4.4: для документа и переключений языка задаётся Lang. При ConformancePolicy::strictUa2() некорректный тег BCP-47 отклоняется на границе API по принципу fail-fast, а не молча игнорируется при записи.
  • Иллюстрации имеют альтернативы — §8.5.1: каждый элемент структуры Figure имеет альтернативное описание.
  • Таблицы связывают заголовки и данные — §8.2.5.26: связь между ячейками header/data в таблице выражается структурно.

NextPDF формирует эти структуры. Он не оценивает соответствие по §8.1; это делает средство проверки, и именно там стандарт закрепляет эту роль.

МетодДействие
enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null): staticУстанавливает ConformanceMode::PdfUa2, подключает TaggedContentEmitter, проверяет $lang по политике. Выбрасывает InvalidConfigException, если политика требует проверки Lang, а $lang некорректен.
beginTag()/endTag()Ручное построение структуры для содержимого вне HTML; контейнерные типы становятся группирующими элементами, конечные типы получают MCID.
ConformanceMode::requiresPdfUa2PageTabs(): boolИмеет истинное значение для PdfUa2 — управляет принудительным применением /Tabs /S на страницах.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
use NextPDF\Conformance\ConformancePolicy;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/accessible.pdf';
$doc = Document::createStandalone();
$doc->enableTaggedPdf('en', ConformancePolicy::strictUa2()); // fail-fast Lang
$doc->setTitle('Accessible report 2026');
$doc->writeHtml('<h1>Quarterly report</h1><p>Body text.</p>'
. '<img src="chart.png" alt="Revenue rose 12% quarter on quarter">');
$doc->save($out);
echo "Wrote {$out} — validate: verapdf --flavour ua2 {$out}\n";

Production-проверка выполняет verapdf --flavour ua2 out.pdf и завершает сборку с ошибкой, когда средство проверки сообщает о нарушениях. Интеграционный тест tests/Integration/Accessibility/VeraPdfUa2GoldenTest.php проверяет, что эталонная фикстура HTML→тегированный PDF проходит veraPDF UA-2 (пропускается, когда veraPDF отсутствует). Вердикт средства проверки — контрольная точка; выходные данные эмиттера — вход для неё.

  • Сначала включите. Вызов enableTaggedPdf() после writeHtml() не тегирует уже записанное содержимое задним числом.
  • Строгий язык. Передайте ConformancePolicy::strictUa2(), чтобы отклонить некорректный тег BCP-47 на границе API, а не дойти до ошибки только при последующей проверке veraPDF.
  • Идемпотентное повторное включение. Повторный вызов обновляет язык, не перестраивая заполненное дерево структуры.
  • Пустой тегированный документ. Пустой тегированный документ не заявляет PDF/UA-2 (EmptyTaggedPdfDoesNotAdvertisePdfUa2Test): маркер не формируется для документа без реального содержимого, поэтому файл не заявляет больше, чем может подтвердить.

Формирование дерева структуры пропорционально количеству элементов. Бюджет для типичного отчёта: ≤ 1500 мс времени выполнения и ≤ 64 МБ пикового потребления памяти.

Тегирование доступности — это механизм структуры, а не безопасности. По своей сути оно раскрывает логическую структуру документа для вспомогательных технологий. У дерева тегов нет модели конфиденциальности.

Обязательство PDF/UA-2Раздел ISO 14289-2Формирование в NextPDF
Реальное содержимое тегировано в логической структуре§8.2.2TaggedContentEmitter + StructureTree
Объявлен язык документа/структуры§8.4.4каталог /Lang, проверяется через Bcp47Validator
Альтернативное описание иллюстрации§8.5.1alt/Alt на элементе Figure
Связь header/data таблицы§8.2.5.26Структура TR/TH/TD из HTML-таблиц

PDF/UA-2 надстраивается над теговой моделью PDF из ISO 32000-2. Элементы структуры, которые формирует NextPDF, разрешаются относительно логической структуры из §14.7 ISO 32000-2 (StructTreeRoot, элементы структуры, MCID) и пространства имён стандартной структуры, определённого для PDF 2.0. Карта ролей связывает HTML-элементы (h1, p, table) со стандартными типами структуры, чтобы средство проверки UA-2 могло их распознать.

Теговая структура — это техническая основа для критериев успеха Web Content Accessibility Guidelines (WCAG) 2.2: 1.1.1 (альтернативы для нетекстового содержимого, через §8.5.1 Figure /Alt), 1.3.1 (информация и взаимосвязи, через дерево структуры) и 1.3.2 (осмысленная последовательность, через порядок чтения). Формирование структуры необходимо, но недостаточно для соответствия WCAG; это определяет аудит доступности, а не библиотека.

Формирование PDF/UA-2 не выполняет криптографических операций. Режим Federal Information Processing Standards (FIPS) не влияет на процесс формирования теговой структуры.

ЗаявлениеСпецификацияРазделreference_id (идентификатор ссылки)
Версия PDF/UA идентифицируется пространством имён схемы pdfuaid (таблица 1).ISO 14289-2§5
Соответствие PDF/UA-2 налагает требования к формату файла, которым должен удовлетворять документ (соответствие оценивает средство проверки; производитель его не декларирует).ISO 14289-2§8.1
Реальное содержимое должно быть тегировано в логической структуре.ISO 14289-2§8.2.2
Естественный язык документа должен быть объявлен.ISO 14289-2§8.4.4
Элементы Figure требуют альтернативного описания.ISO 14289-2§8.5.1
Структура таблицы должна связывать ячейки заголовков и данных.ISO 14289-2§8.2.5.26
Доступная структура построена на теговой логической структуре PDF из ISO 32000-2.ISO 32000-2§14.7.2

Цитаты служат указателями на clause-id и reference_id в корпусе проверки. Текст стандартов не воспроизводится.