Technisch artikel

PDFlibPas: tagged PDF accessibility structure in Delphi

Deze gelokaliseerde versie behandelt Building Tagged PDF Structure Trees in Delphi with PDFlibPas en gebruikt het bijgewerkte Engelse basisartikel als technische referentie voor teams rond Delphi, PDF en documentsoftware

De pagina zet de bijgewerkte basis om in concrete controlepunten voor ontwerp, implementatie en validatie

Wat uit de Engelse basis is gesynchroniseerd

Het basisartikel is uitgebreid met praktische context, technische keuzes en concrete voorbeelden, zodat deze pagina als werkgids dient en niet als korte samenvatting

Belangrijke punten in de bijgewerkte versie:

  • Gebruik eerst kleine reproduceerbare invoerbestanden
  • Laat productnamen, API-namen, bestandsnamen en literal waarden ongewijzigd
  • Bewaar validatoruitvoer en versiegegevens samen met het gegenereerde testbestand

Praktische implementatiekeuzes

Begin met het bestandstype, het verwachte resultaat en de foutstatus die de gebruiker moet zien. Koppel daarna elke API-aanroep aan een controleerbaar resultaat, zodat validatie, logging en support het klantenscenario kunnen reproduceren

  • Gebruik eerst kleine reproduceerbare invoerbestanden
  • Laat productnamen, API-namen, bestandsnamen en literal waarden ongewijzigd
  • Bewaar validatoruitvoer en versiegegevens samen met het gegenereerde testbestand

Code en API-punten

Codevoorbeelden blijven ongewijzigd zodat ontwikkelaars ze direct kunnen vergelijken met Delphi-, C++Builder- en Lazarus/FPC-projecten

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; // Table

Controle vóór publicatie

Controleer het uitvoerbestand met dezelfde tools die de klant of het archief gebruikt. Noteer componentversie, testgegevens, validatorversie en waargenomen resultaat