Metoda THotPDF.AddStructureElement (tagované PDF PDF/UA)

THotPDF povrch tagovaného PDF (v2.119.36 / v2.119.40 / v2.119.41)

 

AddXFAPacket  Podpora AcroForm

THotPDF.AddStructureElement a pomocné funkce pro Tagged PDF

Tato stránka popisuje aktuální pomocné funkce THotPDF pro Tagged PDF a strom struktury PDF/UA. Identifikátory kódu odpovídají veřejným deklaracím

Aktuální rozhraní 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;

Vytváření prvků struktury

AddStructureElement vytvoří slovník /StructElem a připojí ho jako potomka Parent; hodnota nil jej připojí pod kořen stromu struktury. PageIndex propojí prvek se stránkou přes /Pg, záporná hodnota vazbu vynechá. MCID od nuly výše sváže označený obsah na stránce s prvkem a zapíše vazbu do dokumentového /ParentTree. Přetížení se šesti argumenty přidá /Alt pro alternativní popis netextového obsahu a /ActualText pro náhradní text při kopírování. Přetížení se sedmi argumenty navíc zapíše dokumentově jedinečné /ID

Standardní typy struktury (Table 333)

Přetížení s výčtem THPDFStandardStructureType je typově bezpečný vstupní bod: zapsaná role /S vždy patří mezi standardní typy struktury ISO 32000-1 §14.8.4 Table 333 a omezuje riziko překlepů nebo rozdílné velikosti písmen v otevřeném řetězci

Všimněte si malých písmen v sstLbl / sstLBody: skutečné názvy rolí PDF jsou Lbl a LBody. Vlastní názvy rolí lze stále předat přes přetížení AnsiString a namapovat je na standardní roli pomocí AddStructRoleMap

Příklad

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', '');

Atributy struktury a mapování rolí

SetStructureElementLanguage zapisuje přepis /Lang ve formátu BCP-47, SetStructureElementExpansionText zapisuje rozšiřující text /E, SetStructureElementTitle zapisuje čitelný titulek /T a AddStructRoleMap mapuje vlastní role struktury zpět na standardní role PDF. StandardStructureTypeToName vrací název role PDF pro hodnotu THPDFStandardStructureType a IsStandardStructureType ověřuje, zda je název role standardní

Vysokoúrovňové pomocné funkce pro tagged obsah

EmitTaggedHeading, BeginTaggedList, EmitTaggedListItem, BeginTaggedTable, AddTaggedTableRow, EmitTaggedTableHeader, EmitTaggedTableCell, BeginTaggedFigure, EndTaggedFigure a RegisterAnnotForStructure pokrývají běžné napojení nadpisů, seznamů, tabulek, obrázků a anotací pro PDF/UA bez ruční správy MCID

Typický pracovní postup

Zapněte tagged výstup nebo PDFUACompliance, vytvořte kořenový prvek struktury, emitujte sémantický obsah pomocí pomocných funkcí a před EndDoc uzavřete každou zahájenou sekvenci tagged obsahu nebo obrázku