Agregue FPdfFormMerge para habilitar MergePdfFilesWithForms o TPdfFormMergeHelper.MergeFilesWithForms
El helper prepara la importación de las páginas seleccionadas y el injerto de campos, elimina los widgets importados huérfanos y reabre de forma independiente el resultado guardado antes de reemplazar el documento del llamador; los errores y la cancelación conservan el destino
pagcpReject rechaza nombres completos de campo duplicados, pagcpRename agrega un prefijo y un 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; exige los mismos flags, valores, valores predeterminados, opciones y una semántica de fuentes autosuficiente, y rechaza acciones de campo, texto enriquecido y tipos de campo incompatibles
El filtrado por páginas seleccionadas elimina widgets y campos sin uso, y conserva el orden de cálculo filtrado y sin duplicados; los recursos predeterminados se aíslan y se reescriben los nombres de apariencia predeterminada, mientras que los flujos de apariencia clonados mantienen sus propios recursos
Los campos y widgets combinados se normalizan antes de unir campos compatibles; los nombres independientes siguen siendo editables por separado después de guardar y reabrir
InsertAt es un índice de inserción con base cero; -1 agrega páginas 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 absolutos 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, orígenes o destinos firmados y destinos cifrados
Las contraseñas de origen pueden descifrar un documento para la combinación preparada; el resultado queda sin cifrar, por lo que, si hace falta, se debe aplicar después un flujo de cifrado explícito
La sobrecarga antigua de GraftPdfAcroForm conserva su 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 los marcadores ni los destinos con nombre del origen; para ese flujo de navegación, use el helper de navegación
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;