Articolo tecnico

PDFlibPas: multi-engine PDF rendering in Delphi

Questa versione localizzata affronta Multi-Engine PDF Rendering in Delphi: Built-in, Cairo, and PDFium 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

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;

Controllo 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