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);
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;