Struttura PDF/UA Automatica dagli Alberi di Layout
THPDFDOMRenderer può trasformare l'albero di layout visivo in un albero di struttura logica corrispondente senza allocazione manuale degli MCID
THPDFDOMDocument.GenerateStructure ha come predefinito True, abilita l'output PDF taggato, crea una radice Document e un Sect per sezione e usa THPDFDOMDocument.Language quando il documento di destinazione non ha una lingua
Predefiniti e override semantici
| Contenuto di layout | Struttura generata |
|---|---|
THPDFDOMText | P, o H1 fino a H6 quando viene assegnato HeadingLevel |
THPDFDOMStack e THPDFDOMContainer | Div |
THPDFDOMList | L con discendenti LI, Lbl e LBody più ListNumbering |
THPDFDOMTable | Table, TR, TH e TD, con ambito di colonna sulle celle di intestazione |
THPDFDOMImage | Figure con testo alternativo |
| Intestazioni, piè di pagina, intestazioni di tabella ripetute, spaziatori e caselle decorative | Contenuto marcato Artifact |
Ogni componente espone anche SemanticRole, SemanticLanguage, AlternativeText, ActualText, ExpansionText e Artifact per un controllo esplicito
Esempio di documento accessibile
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);
Il renderer rifiuta una prima intestazione sopra H1, livelli di intestazione saltati, ruoli orfani di elenco o tabella e una figura PDF/UA senza testo alternativo prima di scrivere una struttura non valida
Identità tra pagine e ordine di lettura
Un componente logico mantiene un solo elemento di struttura quando si divide tra più pagine
Ogni continuazione visibile riceve un MCID locale alla pagina e un dizionario MCR che punta dall'elemento di struttura esistente alla pagina corretta
Il ParentTree della pagina mappa ogni MCID di nuovo allo stesso elemento di struttura, mentre i cloni di continuazione preservano l'identità logica senza copiare il testo sorgente o le righe della tabella
Le intestazioni di tabella ripetute sulle pagine di continuazione sono artefatti, così che la loro ripetizione visiva non riordini l'intestazione logica della tabella davanti alle righe del corpo precedenti
API di authoring dirette sicure per la continuazione
BeginTaggedContentForStructure alloca un MCID e apre il contenuto marcato per un elemento di struttura già esistente
AppendStructureMarkedContent aggiunge una pagina e un MCID espliciti come MCR e aggiorna il ParentTree della pagina
Usare questi metodi di basso livello quando un renderer di layout personalizzato possiede la logica di continuazione al di fuori di HPDFLayoutDOM
Statistiche e compatibilità
THPDFDOMRenderStatistics riporta i conteggi di elementi di struttura, contenuto marcato e artefatti insieme a pagine, posizionamenti, suddivisioni e profondità di continuazione
Impostare GenerateStructure su False prima del rendering quando è richiesto un output non taggato compatibile a livello di byte