Автоматична структура PDF/UA з дерев макета
THPDFDOMRenderer може перетворити візуальне дерево макета на відповідне логічне структурне дерево без ручного розподілення MCID
THPDFDOMDocument.GenerateStructure за замовчуванням має значення True, увімкнює вивід тегованого PDF, створює один корінь Document та один Sect на розділ і використовує THPDFDOMDocument.Language, коли в цільового елемента немає мови документа
Семантичні значення за замовчуванням і заміни
| Вміст макета | Згенерована структура |
|---|---|
THPDFDOMText | P, або H1–H6, коли призначено HeadingLevel |
THPDFDOMStack і THPDFDOMContainer | Div |
THPDFDOMList | L з нащадками LI, Lbl і LBody плюс ListNumbering |
THPDFDOMTable | Table, TR, TH і TD, зі сферою каталогу на комірках заголовків |
THPDFDOMImage | Figure з альтернативним текстом |
| Верхні та нижні колонтитули, повторювані заголовки таблиць, розділювачі та декоративні рамки | Позначений вміст Artifact |
Кожен компонент також надає SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText і Artifact для явного керування
Приклад доступного документа
Document.Language := 'en-US';
Section := Document.AddSection;
Section.Header := THPDFDOMText.Create('Quarterly report');
Section.Body.AddHeading('Results', 1, 'Title');
List := THPDFDOMList.Create('Decimal', 'Steps');
List.AddItem('1.', 'Review the totals');
Section.Body.Add(List);
Table := THPDFDOMTable.Create('Summary');
Table.AddColumn;
Table.AddColumn;
Header := Table.AddRow(18, True);
Header[0].Text := 'Name';
Header[1].Text := 'Value';
Row := Table.AddRow(18);
Row[0].Text := 'Alpha';
Row[1].Text := '42';
Section.Body.Add(Table);
Section.Body.Add(THPDFDOMImage.Create(Bitmap, 120, 80,
'Revenue chart by quarter', 'Chart'));
PDF.PDFUACompliance := True;
PDF.PDFUAPart := 2;
Statistics := Renderer.Render(Document, PDF);
Рендерер відхиляє перший заголовок вище H1, пропущені рівні заголовків, ізольовані ролі або таблиць і рисунок PDF/UA без альтернативного тексту до запису недійсної структури
Міжсторінкова ідентичність і порядок читання
Логічний компонент зберігає один структурний елемент, коли він розділяється між сторінками
Кожне видиме продовження отримує локальний для сторінки MCID і словник MCR, який вказує від існуючого структурного елемента на правильну сторінку
ParentTree сторінки зіставляє кожен MCID із тим самим структурним елементом, тоді як клони продовження зберігають логічну ідентичність без копіювання тексту джерела чи рядків таблиці
Повторювані заголовки таблиць на сторінках продовження є артефактами, тому їхнє візуальне повторення не змінює порядок логічного заголовка таблиці перед ранішими тілами рядків
Прямі API написання, безпечні для продовжень
BeginTaggedContentForStructure розподіляє MCID і відкриває позначений вміст для структурного елемента, який уже існує
AppendStructureMarkedContent додає явну сторінку та MCID як MCR і оновлює ParentTree сторінки
Використовуйте ці низькорівневі методи, коли спеціальний рендерер макета володіє логікою продовжень поза HPDFLayoutDOM
Статистика та сумісність
THPDFDOMRenderStatistics повідомляє кількість структурних елементів, позначеного вмісту та артефактів разом зі сторінками, розміщеннями, розділеннями та глибиною продовжень
Встановіть GenerateStructure у False до рендерингу, коли потрібен байт-сумісний нетеджований вивід