THotPDF.AddStructureElement + PDF/UA accessibility attributes

THotPDF tagged-PDF surface (v2.119.36 / v2.119.40 / v2.119.41)

 

AddXFAPacket  AcroForm Support

THotPDF.AddStructureElement i pomocniki Tagged PDF

Ta strona dokumentuje aktualne helpery drzewa struktury tagged-PDF i PDF/UA w THotPDF. Identyfikatory kodu odpowiadają deklaracjom publicznym

Aktualna powierzchnia Delphi

function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer; MCID: Integer;
  const AltText: AnsiString; const ActualText: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(const Role: AnsiString; Parent: THPDFDictionaryObject;
  PageIndex: Integer; MCID: Integer;
  const AltText: AnsiString; const ActualText: AnsiString;
  const IDStr: AnsiString): THPDFDictionaryObject; overload;
function AddStructureElement(T: THPDFStandardStructureType; Parent: THPDFDictionaryObject;
  PageIndex: Integer = -1; MCID: Integer = -1): THPDFDictionaryObject; overload;

procedure SetStructureElementLanguage(Elem: THPDFDictionaryObject; const Lang: AnsiString);
procedure SetStructureElementExpansionText(Elem: THPDFDictionaryObject; const ExpansionText: AnsiString);
procedure SetStructureElementTitle(Elem: THPDFDictionaryObject; const Title: AnsiString);
procedure AddStructRoleMap(const SourceRole: AnsiString; const TargetRole: AnsiString);

function BeginTaggedContent(const Role: AnsiString; Parent: THPDFDictionaryObject;
  const Lang: AnsiString = ''; const Alt: AnsiString = '';
  const ActualText: AnsiString = ''; const ExpansionText: AnsiString = ''): THPDFDictionaryObject;
procedure EndTaggedContent;

function EmitTaggedHeading(Level: Integer; Parent: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedList(Parent: THPDFDictionaryObject; const NumberingStyle: AnsiString = 'None'): THPDFDictionaryObject;
function EmitTaggedListItem(ListElem: THPDFDictionaryObject; LblX, LblY: Single; const LabelText: WideString; BodyX, BodyY: Single; const BodyText: WideString): THPDFDictionaryObject;
function BeginTaggedTable(Parent: THPDFDictionaryObject): THPDFDictionaryObject;
function AddTaggedTableRow(TableElem: THPDFDictionaryObject): THPDFDictionaryObject;
function EmitTaggedTableHeader(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString; const Scope: AnsiString): THPDFDictionaryObject;
function EmitTaggedTableCell(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedFigure(Parent: THPDFDictionaryObject; const AltText: AnsiString; const BBox: array of Single): THPDFDictionaryObject;
procedure EndTaggedFigure;
procedure RegisterAnnotForStructure(AnnotDict: THPDFDictionaryObject; StructElem: THPDFDictionaryObject);

function StandardStructureTypeToName(T: THPDFStandardStructureType): AnsiString;
function IsStandardStructureType(const Name: AnsiString): Boolean;

Tworzenie elementów struktury

AddStructureElement tworzy słownik /StructElem i dokleja go jako dziecko Parent (przekaż nil, by podpiąć pod korzeń drzewa struktury). PageIndex wiąże element ze stroną przez /Pg; wartość ujemna pomija wiązanie. MCID, gdy wynosi zero lub więcej, kojarzy sekwencję marked-content na stronie z elementem i rejestruje ją w dokumentowym /ParentTree. Overload sześcioargumentowy dodaje /Alt (alternatywny opis czytany na głos dla treści nietekstowej, jak figury i wzory) i /ActualText (tekst zastępczy zwracany przy kopiowaniu/wklejaniu dla trudnych do ekstrakcji glifów). Overload siedmioargumentowy dodatkowo zapisuje unikalny w dokumencie /ID, więc inne elementy struktury mogą celować w element po ID (ISO 32000-1 §14.7.2)

Standardowe typy struktury (Table 333)

Ta strona dokumentuje bieżące pomocniki THotPDF dla tagged-PDF oraz drzewa struktury PDF/UA. Identyfikatory kodu odpowiadają publicznym deklaracjom in Lib/HPDFDoc.pas

Zwróć uwagę na małe litery w sstLbl / sstLBody: dosłowne nazwy ról PDF to Lbl i LBody. Własne nazwy ról nadal można przekazać przez przeciążenie AnsiString i zmapować z powrotem na rolę standardową przez AddStructRoleMap

Bieżąca powierzchnia Delphi

procedure SetStructureElementLanguage(Elem: THPDFDictionaryObject; const Lang: AnsiString);
procedure SetStructureElementExpansionText(Elem: THPDFDictionaryObject; const ExpansionText: AnsiString);
procedure SetStructureElementTitle(Elem: THPDFDictionaryObject; const Title: AnsiString);
procedure AddStructRoleMap(const SourceRole: AnsiString; const TargetRole: AnsiString);

function BeginTaggedContent(const Role: AnsiString; Parent: THPDFDictionaryObject;
  const Lang: AnsiString = ''; const Alt: AnsiString = '';
  const ActualText: AnsiString = ''; const ExpansionText: AnsiString = ''): THPDFDictionaryObject;
procedure EndTaggedContent;

function EmitTaggedHeading(Level: Integer; Parent: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedList(Parent: THPDFDictionaryObject; const NumberingStyle: AnsiString = 'None'): THPDFDictionaryObject;
function EmitTaggedListItem(ListElem: THPDFDictionaryObject; LblX, LblY: Single; const LabelText: WideString; BodyX, BodyY: Single; const BodyText: WideString): THPDFDictionaryObject;
function BeginTaggedTable(Parent: THPDFDictionaryObject): THPDFDictionaryObject;
function AddTaggedTableRow(TableElem: THPDFDictionaryObject): THPDFDictionaryObject;
function EmitTaggedTableHeader(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString; const Scope: AnsiString): THPDFDictionaryObject;
function EmitTaggedTableCell(TRElem: THPDFDictionaryObject; X, Y: Single; const Text: WideString): THPDFDictionaryObject;
function BeginTaggedFigure(Parent: THPDFDictionaryObject; const AltText: AnsiString; const BBox: array of Single): THPDFDictionaryObject;
procedure EndTaggedFigure;
procedure RegisterAnnotForStructure(AnnotDict: THPDFDictionaryObject; StructElem: THPDFDictionaryObject);

function StandardStructureTypeToName(T: THPDFStandardStructureType): AnsiString;
function IsStandardStructureType(const Name: AnsiString): Boolean;

Atrybuty struktury i mapowanie ról

SetStructureElementLanguage zapisuje nadpisanie BCP-47 /Lang, SetStructureElementExpansionText zapisuje tekst rozwinięcia /E, SetStructureElementTitle zapisuje czytelny dla człowieka tytuł /T, a AddStructRoleMap mapuje niestandardowe role struktury z powrotem na standardowe role PDF. StandardStructureTypeToName zwraca nazwę roli PDF dla wartości THPDFStandardStructureType, a IsStandardStructureType sprawdza, czy nazwa roli należy do ról standardowych

Wysokopoziomowe pomocniki Tagged

EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure i RegisterAnnotForStructure obsługują typowe połączenia PDF/UA dla nagłówków, list, tabel, rysunków i adnotacji bez zmuszania wywołujących do ręcznego zarządzania MCID

Typowy przepływ pracy

Włącz tagged output lub PDFUACompliance, utwórz główny element struktury, użyj rodziny pomocników do emisji treści semantycznej i zamknij każdą rozpoczętą sekwencję tagged-content lub figure przed EndDoc

Autoryzacja bezpieczna dla kontynuacji

BeginTaggedContentForStructure i AppendStructureMarkedContent przypinają stronowo-lokalne referencje marked content do jednego istniejącego elementu struktury logicznej w obrębie kontynuacji stron

Automatyczna struktura PDF/UA z drzew layoutu nakłada ten sam model na deklaratywne nagłówki, listy, tabele, figury i artifacty