PDFium Delphi Component Docs

Merge transacional de AcroForm

Adicione FPdfFormMerge para ativar MergePdfFilesWithForms ou TPdfFormMergeHelper.MergeFilesWithForms

O helper prepara as importações de páginas selecionadas e o enxerto de campos, remove widgets importados órfãos e reabre de forma independente o resultado guardado antes de substituir o documento do chamador; erros e cancelamento preservam o destino

pagcpReject recusa um nome de campo totalmente qualificado duplicado, pagcpRename acrescenta um prefixo e sufixo determinístico sem colisões, e pagcpNamespace insere um campo progenitor real para isolar cada origem

pagcpMergeCompatible une campos terminais compatíveis de texto ou de escolha para que os seus widgets partilhem um único valor; exige flags, valores, predefinições, opções e semântica de fonte autocontida iguais, e recusa ações de campo, rich text e tipos de campo incompatíveis

A filtragem de páginas selecionadas remove widgets e campos não usados e preserva a ordem de cálculo filtrada e desduplicada; os recursos predefinidos são isolados e os nomes de default appearance reescritos, enquanto os streams de aparência clonados mantêm os seus próprios recursos

Os campos/widgets combinados são normalizados antes de unir campos compatíveis; nomes independentes continuam editáveis de forma independente após guardar e reabrir

InsertAt é um índice de inserção de base zero; -1 acrescenta páginas; os limites predefinidos são 10,000 páginas no total e 256 MiB por documento, com limites de enxerto de 100,000 objetos e profundidade 128

Os limites rígidos de enxerto são 1,000,000 objetos, profundidade 256 e 4,096 campos raiz; páginas selecionadas repetidas, origens ou destinos XFA, origens ou destinos assinados e destinos encriptados são recusados

Palavras-passe de origem podem desencriptar uma origem para o merge preparado; o resultado não é encriptado, por isso aplique depois um fluxo de trabalho explícito de encriptação quando necessário

O overload legado GraftPdfAcroForm mantém a sua política de recusa; o overload que aceita TPdfAcroFormGraftOptions expõe as mesmas políticas de colisão e de recursos ao nível de stream

Este helper de formulários não preserva outlines nem named destinations da origem; use o helper de navegação para o fluxo de navegação que ele declara

Options := TPdfFormMergeOptions.Default;
Options.GraftOptions.CollisionPolicy := pagcpNamespace;
if not MergePdfFilesWithForms(Pdf, Sources, Options, Report) then
  raise EPdfError.Create(Report.ErrorMessage);

Declarações públicas

type
  TPdfFormMergeOptions= record
    GraftOptions: TPdfAcroFormGraftOptions;
    InsertAt: Integer;
    MaxPages: Integer;
    MaxDocumentBytes: Int64;
    CancellationToken: IPdfCancellationToken;
    class function Default: TPdfFormMergeOptions; static;
  end;
  TPdfFormMergeReport= record
    Succeeded, Cancelled: Boolean;
    ImportedSourceCount, ImportedPageCount: Integer;
    GraftedFieldCount, RenamedFieldCount, MergedFieldCount: Integer;
    FilteredFieldCount, FilteredWidgetCount, ResourceRenameCount: Integer;
    ErrorMessage: string;
  end;

function MergePdfFilesWithForms(Destination: TPdf;
  const Sources: TPdfBatchMergeSources; const Options: TPdfFormMergeOptions;
  out Report: TPdfFormMergeReport): Boolean;

type
  TPdfFormMergeHelper= class helper for TPdf
    function MergeFilesWithForms(const Sources: TPdfBatchMergeSources;
      const Options: TPdfFormMergeOptions;
      out Report: TPdfFormMergeReport): Boolean;
  end;