Añada FPdfFormMerge para utilizar MergePdfFilesWithForms o TPdfFormMergeHelper.MergeFilesWithForms
El helper prepara la importación de páginas seleccionadas y el injerto de campos, elimina widgets importados huérfanos y reabre de forma independiente el resultado guardado antes de sustituir el documento del llamador; errores y cancelación preservan el destino
pagcpReject rechaza un nombre de campo totalmente cualificado duplicado, pagcpRename añade prefijo y sufijo deterministas sin colisiones, y pagcpNamespace inserta un campo padre real para aislar cada origen
pagcpMergeCompatible une campos terminales de texto o selección compatibles para que sus widgets compartan un valor; requiere flags, valores, defaults, opciones y semántica de fuentes autocontenida iguales y rechaza acciones de campo, rich text y tipos incompatibles
El filtrado por páginas elimina widgets y campos sin usar y conserva el orden de cálculo filtrado y deduplicado; los recursos predeterminados se aíslan y sus nombres de apariencia se reescriben, mientras que los flujos de apariencia clonados conservan sus recursos
Los field/widgets combinados se normalizan antes de unir campos compatibles; los nombres independientes siguen siendo editables por separado tras guardar y reabrir
InsertAt es un índice de inserción con base cero; -1 añade al final; los límites predeterminados son 10,000 páginas totales y 256 MiB por documento, con límites de injerto de 100,000 objetos y profundidad 128
Los límites estrictos de injerto son 1,000,000 objetos, profundidad 256 y 4,096 campos raíz; se rechazan páginas seleccionadas repetidas, orígenes o destinos XFA o firmados y destinos cifrados
Las contraseñas de origen pueden descifrar un origen para el merge preparado; el resultado queda sin cifrar, así que aplique después un flujo de cifrado explícito si hace falta
La sobrecarga anterior de GraftPdfAcroForm conserva la política de rechazo; la que acepta TPdfAcroFormGraftOptions expone las mismas políticas de colisión y recursos a nivel de flujo
Este helper de formularios no conserva outlines ni named destinations del origen; utilice el helper de navegación para su flujo documentado
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;