Логическая структура
Логическая структура
Тегированные PDF включают логическое дерево структуры, определяющее семантическую иерархию документа — абзацы, заголовки, таблицы, рисунки и списки. Aspose.PDF FOSS for .NET предоставляет API TaggedContent для построения и проверки этой структуры, что является необходимым для соответствия требованиям доступности PDF/UA.
Доступ к помеченному контенту
using var doc = new Document();
var tagged = doc.TaggedContent;
tagged.SetTitle("Accessible Document");
tagged.SetLanguage("en-US");Создание структурных элементов
ITaggedContent предоставляет фабричные методы для каждого стандартного типа структурного элемента. Элементы собираются в дерево вызовом AppendChild.
var root = tagged.RootElement;
var heading = tagged.CreateHeaderElement(1);
heading.SetText("Chapter 1");
root.AppendChild(heading);
var paragraph = tagged.CreateParagraphElement();
paragraph.SetText("This is the first paragraph.");
root.AppendChild(paragraph);Структурированные таблицы
TableElement создает доступные таблицы с разделами head, body и footer.
var table = tagged.CreateTableElement();
root.AppendChild(table);
var thead = table.CreateTHead();
var headerRow = thead.CreateTR();
headerRow.CreateTH().SetText("Name");
headerRow.CreateTH().SetText("Value");
var tbody = table.CreateTBody();
var dataRow = tbody.CreateTR();
dataRow.CreateTD().SetText("Width");
dataRow.CreateTD().SetText("612");Иллюстрации и рисунки
IllustrationElement оборачивает изображения в структуре дерева.
var figure = tagged.CreateFigureElement();
figure.SetImage("chart.png");
figure.SetAlternativeText("Sales chart for Q4");
root.AppendChild(figure);Типы элементов структуры
API поддерживает полный набор типов элементов структуры PDF:
- Block-level: Параграф, Заголовок (H1-H6), Список, Элемент списка, Таблица, Цитата, Код
- Inline: Спан, Ссылка, Аннотация, Рисунок, Формула
- Grouping: Деление, Статья, Раздел, Часть
Советы и лучшие практики
- Всегда устанавливайте
TitleиLanguageнаTaggedContentдля соответствия PDF/UA. - Стройте дерево структуры сверху вниз: создавайте элементы, затем добавляйте дочерние.
- Используйте
SetAlternativeTextна элементах figure для доступности скрин‑ридеров. - Помечайте таблицы с помощью
THead,TBody,TFootдля правильной семантики таблиц. - Проверяйте соответствие PDF/UA с помощью
PdfFormatConversionOptions(см. руководство по конвертации).
Общие проблемы
| Проблема | Причина | Решение |
|---|---|---|
| Ошибка проверки PDF/UA | В дереве структуры отсутствуют обязательные элементы | Убедитесь, что весь контент имеет соответствующие структурные элементы |
| Порядок заголовков неверен | H2 появляется перед H1 | Следуйте последовательной иерархии заголовков |
| У изображения нет альтернативного текста | SetAlternativeText не вызван | Всегда предоставляйте альтернативный текст для иллюстраций |
| Таблица не распознаётся программой чтения с экрана | Отсутствует структура THead/TBody | Используйте полный API структуры таблицы |
Часто задаваемые вопросы
Что такое тегированный PDF?
Тегированный PDF включает логическое дерево структуры, которое сопоставляет визуальное содержимое семантическим элементам (заголовки, абзацы, таблицы), обеспечивая работу средств доступности и перераспределение контента.
Тегированный PDF — то же самое, что PDF/UA?
PDF/UA — это стандарт, который требует разметки и дополнительных правил доступности.
Тегированные PDF являются предварительным условием соответствия PDF/UA.
Могу ли я добавить теги к существующему PDF?
API TaggedContent работает лучше всего с документами, созданными с нуля. Для существующих PDF‑файлов проверьте дерево структуры через Document.TaggedContent.
API Сводка справки
| Класс / Метод | Описание |
|---|---|
TaggedContent | Точка входа для операций логической структуры |
TaggedContent.SetTitle | Установить заголовок документа для доступности |
TaggedContent.SetLanguage | Установить язык документа |
ITaggedContent | Интерфейс с фабричными методами для всех типов элементов |
StructureElement | Базовый класс для всех элементов структуры |
StructureElement.AppendChild | Добавить дочерний элемент в дерево |
StructureElement.SetText | Установить текстовое содержимое элемента |
TableElement | Элемент структуры таблицы с поддержкой доступности |
TableElement.CreateTHead | Создать раздел заголовка таблицы |
TableElement.CreateTBody | Создать раздел тела таблицы |
TableTRElement | Элемент строки таблицы |
TableTRElement.CreateTD | Добавить ячейку данных |
TableTRElement.CreateTH | Добавить ячейку заголовка |
IllustrationElement | Элемент структуры рисунка/иллюстрации |
IllustrationElement.SetImage | Прикрепить изображение к иллюстрации |