Technisch artikel

PDFlibPas: multi-engine PDF rendering in Delphi

Deze gelokaliseerde versie behandelt Multi-Engine PDF Rendering in Delphi: Built-in, Cairo, and PDFium 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

function ProbeEngines(PDF: TPDFlib): string;
begin
  Result := 'built-in';                        // engine 1 is always present
  if (PDF.SetCairoFileName('cairo.dll') = 1) and (PDF.SelectRenderer(2) = 2) then
    Result := Result + ', cairo';
  if (PDF.SetPDFiumFileName('pdfium.dll') = 1) and (PDF.SelectRenderer(3) = 3) then
    Result := Result + ', pdfium';
  PDF.SelectRenderer(1);                       // restore the default before real work
end;
PDF.SetRenderScale(2.0);                    // every later render is doubled
PDF.RenderPageToFile(150, 1, 5, 'p1.png');  // effectively 300 DPI
PDF.SetRenderScale(1.0);                    // reset, or your thumbnails arrive huge
procedure RenderPageWithFallback(PDF: TPDFlib; Page: Integer; const OutFile: string);
begin
  PDF.SelectRenderer(1);                            // built-in first
  PDF.RenderPageToFile(200, Page, 5, OutFile);      // 5 = PNG
  if PDF.LastRenderError = '' then Exit;
  LogEngineFailure('built-in', Page, PDF.LastRenderError);
  if PDF.SelectRenderer(3) = 3 then                 // PDFium as the heavy fallback
  begin
    PDF.RenderPageToFile(200, Page, 5, OutFile);
    if PDF.LastRenderError = '' then Exit;
    LogEngineFailure('pdfium', Page, PDF.LastRenderError);
  end;
  raise Exception.CreateFmt('Page %d failed on all available engines', [Page]);
end;

Controle vóór publicatie

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