Artigo técnico

PDFlibPas: multi-engine PDF rendering in Delphi

Esta versão localizada trata de Multi-Engine PDF Rendering in Delphi: Built-in, Cairo, and PDFium with PDFlibPas usando o artigo em inglês atualizado como referência técnica para equipes Delphi, PDF e software documental

A página transforma a base atualizada em pontos de controle práticos para projeto, implementação e validação

Conteúdo sincronizado a partir da base em inglês

O artigo base foi ampliado com contexto prático, decisões técnicas e exemplos concretos, então esta página deve ser lida como guia de trabalho, não como resumo curto

Pontos importantes da versão atualizada:

  • Use primeiro arquivos de entrada pequenos e reproduzíveis
  • Mantenha intactos nomes de produto, API, arquivos e valores literais
  • Salve a saída do validador e as versões junto com o arquivo de teste gerado

Decisões práticas de implementação

Comece pelo tipo de arquivo, pelo resultado esperado e pelo estado de erro que o usuário precisa ver. Depois conecte cada chamada API a um resultado verificável para que validação, logs e suporte possam reproduzir o caso do cliente

  • Use primeiro arquivos de entrada pequenos e reproduzíveis
  • Mantenha intactos nomes de produto, API, arquivos e valores literais
  • Salve a saída do validador e as versões junto com o arquivo de teste gerado

Código e pontos API

Os exemplos de código são preservados sem alteração para comparação direta com projetos 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;

Verificação antes da publicação

Revise o arquivo de saída com as mesmas ferramentas que o cliente ou o arquivo documental usará. Registre versão do componente, dados de teste, versão do validador e resultado observado