THotPDF.AddStructureElement + PDF/UA accessibility attributes

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

 

AddXFAPacket  AcroForm Support

THotPDF.AddStructureElement ir Tagged PDF pagalbinės funkcijos

Šiame puslapyje aprašomos dabartinės THotPDF pagalbinės funkcijos, skirtos Tagged PDF ir PDF/UA struktūros medžiams. Kodo identifikatoriai atitinka viešas deklaracijas

Dabartinė Delphi sąsaja

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;

Struktūros elementų kūrimas

AddStructureElement sukuria /StructElem žodyną ir prideda jį kaip Parent antrinį elementą; perduokite nil, kad prijungtumėte po struktūros medžio šaknimi. PageIndex susieja elementą su puslapiu per /Pg, o neigiama reikšmė šį ryšį praleidžia. MCID, kai yra nulis arba didesnis, susieja puslapio marked-content seką su elementu ir užregistruoja ją dokumento /ParentTree. Šešių argumentų overload prideda /Alt alternatyviam aprašui ir /ActualText pakaitiniam tekstui kopijuojant. Septynių argumentų overload taip pat įrašo dokumente unikalų /ID

Standartiniai struktūros tipai (Table 333)

Overload su THPDFStandardStructureType yra type-safe įėjimo taškas: įrašoma rolė /S visada yra vienas iš standartinių struktūros tipų pagal ISO 32000-1 §14.8.4 Table 333, todėl sumažėja rašybos klaidų ar raidžių registro neatitikimų rizika laisvo teksto role pavadinime

Atkreipkite dėmesį į mažąsias raides sstLbl / sstLBody: tikrieji PDF rolių pavadinimai yra Lbl ir LBody. Pasirinktiniai rolių pavadinimai vis dar gali būti perduodami per AnsiString overload ir susiejami atgal su standartine role naudojant AddStructRoleMap

Pavyzdys

PDF.PDFUACompliance := pdfuaPDFUA1;
PDF.BeginDoc;
Doc := PDF.AddStructureElement(sstDocument, nil);
H1 := PDF.AddStructureElement(sstH1, Doc);
PDF.SetStructureElementLanguage(Doc, 'en-US');
PDF.SetStructureElementTitle(H1, 'Annual Report');
// Alt / ActualText ride on the AnsiString overload; reuse the
// spec-prescribed role name via StandardStructureTypeToName
Fig := PDF.AddStructureElement(StandardStructureTypeToName(sstFigure), Doc, 0, -1,
  'Sales by quarter: Q1 4.2M, Q2 5.1M, Q3 5.8M, Q4 6.4M', '');

Struktūros atributai ir rolių susiejimas

SetStructureElementLanguage įrašo BCP-47 /Lang override, SetStructureElementExpansionText įrašo išplėtimo tekstą /E, SetStructureElementTitle įrašo skaitomą pavadinimą /T, o AddStructRoleMap susieja pasirinktines struktūros roles atgal su standartinėmis PDF rolėmis. StandardStructureTypeToName grąžina PDF rolės pavadinimą pagal THPDFStandardStructureType reikšmę, o IsStandardStructureType patikrina, ar rolės pavadinimas yra standartinis

Aukšto lygio pagalbinės funkcijos tagged turiniui

EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure ir RegisterAnnotForStructure apima įprastą PDF/UA antraščių, sąrašų, lentelių, figūrų ir anotacijų sujungimą, nereikalaujant rankiniu būdu valdyti MCID

Tipinė darbo eiga

Įjunkite tagged išvestį arba PDFUACompliance, sukurkite šakninį struktūros elementą, naudokite pagalbinių funkcijų rinkinį semantiniam turiniui ir uždarykite kiekvieną pradėtą tagged-content arba figure seką prieš EndDoc