Questa versione localizzata affronta Building Tagged PDF Structure Trees in Delphi with PDFlibPas usando l'articolo inglese aggiornato come riferimento tecnico per team Delphi, PDF e software documentale
La pagina trasforma la base aggiornata in punti di controllo pratici per progettazione, implementazione e validazione
Contenuto sincronizzato dalla base inglese
L'articolo di base è stato ampliato con contesto operativo, decisioni tecniche ed esempi concreti, quindi questa pagina va letta come guida di lavoro e non come breve riepilogo
Punti importanti della versione aggiornata:
- Usare prima file di input piccoli e riproducibili
- Mantenere invariati nomi di prodotto, API, file e valori literal
- Salvare output del validatore e versioni insieme al file di prova generato
Scelte pratiche di implementazione
Partire dal tipo di file, dal risultato atteso e dallo stato di errore visibile all'utente. Collegare poi ogni chiamata API a un risultato verificabile, così validazione, log e supporto possono riprodurre il caso del cliente
- Usare prima file di input piccoli e riproducibili
- Mantenere invariati nomi di prodotto, API, file e valori literal
- Salvare output del validatore e versioni insieme al file di prova generato
Codice e punti API
Gli esempi di codice restano invariati per poterli confrontare direttamente con progetti Delphi, C++Builder e Lazarus/FPC
var
Lib: TPDFlib;
begin
Lib := TPDFlib.Create;
try
Lib.SetOrigin(1); // top-left origin
Lib.SetPDFUAMode('en-US'); // bumps the save version to PDF 1.7
Lib.SetInformation(1, 'Service Manual'); // /Title is mandatory for PDF/UA
Lib.AddRoleMap('ManualTitle', 'H1'); // custom type -> standard role
Lib.AddStandardFont(4);
Lib.SetTextSize(18);
Lib.BeginTagEx2('ManualTitle', '', '', 'en-US', '', 'h1-cover', '');
Lib.DrawText(72, 96, 'Service Manual');
Lib.EndTag;
Lib.BeginTag('Figure', 'Exploded view of the gearbox assembly', '');
Lib.AddImageFromFile('gearbox.png', 0);
Lib.EndTag;
Lib.BeginArtifact('Layout'); // page decoration: excluded from reading
// ... draw rules and background tint ...
Lib.EndArtifact;
Lib.SaveToFile('manual.pdf');
finally
Lib.Free;
end;
end;Lib.BeginTag('Table', '', '');
Lib.BeginTag('TR', '', '');
Lib.BeginTagEx2('TH', '', '', '', '', 'col-part', '');
Lib.SetStructElemScope('Column'); // valid only while this TH is open
Lib.DrawText(72, 120, 'Part');
Lib.EndTag;
Lib.BeginTagEx2('TH', '', '', '', '', 'col-torque', '');
Lib.SetStructElemScope('Column');
Lib.SetStructElemColSpan(2); // header spans the value and unit columns
Lib.DrawText(200, 120, 'Tightening torque');
Lib.EndTag;
Lib.EndTag;
Lib.BeginTag('TR', '', '');
Lib.BeginTag('TD', '', '');
Lib.SetStructElemHeaders('col-part'); // explicit binding for irregular tables
Lib.DrawText(72, 140, 'M8 flange bolt');
Lib.EndTag;
Lib.EndTag;
Lib.EndTag; // TableControllo prima della pubblicazione
Verificare il file di output con gli stessi strumenti che userà il cliente o l'archivio. Annotare versione del componente, dati di test, versione del validatore e risultato osservato