Соответствие 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; это делает средство проверки, и именно там стандарт закрепляет эту роль.
Поверхность API
Заголовок раздела «Поверхность API»| Метод | Действие |
|---|---|
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
Заголовок раздела «Пример кода — production»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
Заголовок раздела «Сопоставление с PDF/UA-2»| Обязательство PDF/UA-2 | Раздел ISO 14289-2 | Формирование в NextPDF |
|---|---|---|
| Реальное содержимое тегировано в логической структуре | §8.2.2 | TaggedContentEmitter + StructureTree |
| Объявлен язык документа/структуры | §8.4.4 | каталог /Lang, проверяется через Bcp47Validator |
| Альтернативное описание иллюстрации | §8.5.1 | alt → /Alt на элементе Figure |
| Связь header/data таблицы | §8.2.5.26 | Структура TR/TH/TD из HTML-таблиц |
Перекрёстная ссылка тег → §14.9 ISO 32000-2
Заголовок раздела «Перекрёстная ссылка тег → §14.9 ISO 32000-2»PDF/UA-2 надстраивается над теговой моделью PDF из ISO 32000-2. Элементы структуры, которые формирует NextPDF, разрешаются относительно логической структуры из §14.7 ISO 32000-2 (StructTreeRoot, элементы структуры, MCID) и пространства имён стандартной структуры, определённого для PDF 2.0. Карта ролей связывает HTML-элементы (h1, p, table) со стандартными типами структуры, чтобы средство проверки UA-2 могло их распознать.
Сопоставление с WCAG 2.2
Заголовок раздела «Сопоставление с WCAG 2.2»Теговая структура — это техническая основа для критериев успеха Web Content Accessibility Guidelines (WCAG) 2.2: 1.1.1 (альтернативы для нетекстового содержимого, через §8.5.1 Figure /Alt), 1.3.1 (информация и взаимосвязи, через дерево структуры) и 1.3.2 (осмысленная последовательность, через порядок чтения). Формирование структуры необходимо, но недостаточно для соответствия WCAG; это определяет аудит доступности, а не библиотека.
Поведение в режиме FIPS
Заголовок раздела «Поведение в режиме FIPS»Формирование 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 в корпусе проверки. Текст стандартов не воспроизводится.