Artigo técnico

PDFium: PreflightReportCli batch validation in Delphi

Esta versão localizada trata de Batch PDF Preflight Reports in Delphi with the PDFium Component CLI 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

Report := BuildPdfPreflightReport(Pdf, [ppsPdfA, ppsPdfUa]);
procedure RunPreflightBatch(const InputDir, ReportDir: string;
  out FilesWithFindings, ToolFailures: Integer);
var
  SR: TSearchRec;
  Pdf: TPdf;
  Report: TPdfPreflightReport;
begin
  FilesWithFindings := 0;
  ToolFailures := 0;
  if FindFirst(InputDir + '*.pdf', faAnyFile, SR) = 0 then
  try
    repeat
      Pdf := TPdf.Create(nil);   // fresh instance per file: no state bleed
      try
        try
          Pdf.FileName := InputDir + SR.Name;
          Pdf.Active := True;
          if not Pdf.Active then  // load failures are silent, not raised
            raise EPdfError.Create('Cannot open ' + SR.Name);
          Report := BuildPdfPreflightReport(Pdf, [ppsPdfA, ppsPdfUa]);
          Report.SaveJsonToFile(ReportDir + ChangeFileExt(SR.Name, '.json'));
          Report.SaveHtmlToFile(ReportDir + ChangeFileExt(SR.Name, '.html'));
          if Report.TotalIssueCount > 0 then
            Inc(FilesWithFindings);
        except
          on E: Exception do
          begin
            Inc(ToolFailures);   // exit-code-2 territory, not a validation verdict
            WriteLn(ErrOutput, SR.Name + ': ' + E.Message);
          end;
        end;
      finally
        Pdf.Free;
      end;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
  end;
end;
begin
  RunPreflightBatch(ParamStr(1), ParamStr(2), Findings, Failures);
  if Failures > 0 then
    Halt(2)
  else if Findings > 0 then
    Halt(1);
  // falling through exits with 0: every file conformed
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