Structură PDF/UA automată din arbori de layout
THPDFDOMRenderer poate transforma arborele vizual de layout într-un arbore logic de structură corespunzător, fără alocare manuală de MCID
THPDFDOMDocument.GenerateStructure are implicit True, activează ieșirea PDF etichetat, creează o rădăcină Document și un Sect per secțiune și folosește THPDFDOMDocument.Language când ținta nu are o limbă de document
Valori implicite și suprascrieri semantice
| Conținut de layout | Structură generată |
|---|---|
THPDFDOMText | P, sau H1 până la H6 când HeadingLevel este atribuit |
THPDFDOMStack and THPDFDOMContainer | Div |
THPDFDOMList | L cu descendenți LI, Lbl și LBody, plus ListNumbering |
THPDFDOMTable | Table, TR, TH și TD, cu scop de coloană pe celulele de antet |
THPDFDOMImage | Figure cu text alternativ |
| Antete, subsoluri, antete de tabel repetate, separatoare și casete decorative | Conținut marcat Artifact |
Fiecare componentă expune, de asemenea, SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText și Artifact pentru control explicit
Exemplu de document accesibil
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);
Renderer-ul respinge un prim titlu peste H1, niveluri de titlu sărite, roluri de listă sau tabel orfane și o figură PDF/UA fără text alternativ înainte de a scrie o structură invalidă
Identitate între pagini și ordine de citire
O componentă logică păstrează un singur element de structură când se împarte între pagini
Fiecare continuare vizibilă primește un MCID local paginii și un dicționar MCR care indică de la elementul existent de structură către pagina corectă
ParentTree-ul paginii mapează fiecare MCID înapoi la același element de structură, în timp ce clonele de continuare păstrează identitatea logică fără a copia textul sursă sau rândurile de tabel
Antetele repetate de tabel pe paginile de continuare sunt artefacte, astfel încât repetarea lor vizuală nu reordonează antetul logic al tabelului înaintea rândurilor anterioare de corp
API-uri de redactare directe, sigure la continuare
BeginTaggedContentForStructure alocă un MCID și deschide conținut marcat pentru un element de structură care există deja
AppendStructureMarkedContent adaugă o pagină și un MCID explicite ca MCR și actualizează ParentTree-ul paginii
Folosiți aceste metode de nivel inferior când un renderer personalizat de layout deține logica de continuare în afara HPDFLayoutDOM
Statistici și compatibilitate
THPDFDOMRenderStatistics raportează numărătorile de elemente de structură, conținut marcat și artefacte, alături de pagini, plasări, împărțiri și adâncimea continuării
Setați GenerateStructure la False înainte de randare când este necesară o ieșire neetichetată compatibilă la nivel de octeți