THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  Soporte AcroForm

Registra un paquete XFA (XML Forms Architecture) con nombre para emitirlo dentro de la entrada AcroForm /XFA del documento. PDF 1.7 §12.7.6 + §12.7.8 permite que un AcroForm lleve un array /XFA junto al array estático /Fields (o en su lugar), habilitando flujos híbridos AcroForm + XFA o formularios XFA dinámicos puros

 

Sintaxis Delphi:

procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Descripción

Cada llamada a AddXFAPacket registra un paquete con nombre. Nombres típicos (según la especificación XFA 3.3 y PDF 1.7 §12.7.8 Table 234):

 

template: diseño del formulario + scripts (el paquete más grande en la mayoría de documentos XFA)

datasets - data binding (the XML payload the template renders against).

config - viewer configuration.

connectionSet - external data connections.

localeSet - locale-specific formatting rules.

stylesheet - XSLT or CSS styling.

xfdf - XFDF form data overlay.

xmpmeta - XMP metadata.

signature - signature-related XFA data.

sourceSet - source-side data definitions.

 

En EndDoc, cada paquete registrado se convierte en un objeto stream indirecto comprimido con FlateDecode, y el array AcroForm /XFA alterna cadenas PDF de nombre de paquete con referencias de stream en orden de registro, por lo que el diseño es determinista byte a byte. ClearXFAPackets elimina todos los paquetes registrados (útil para reutilizar una instancia THotPDF en varios documentos). XFAPacketCount devuelve el recuento actual

 

Container-level support only

HotPDF no analiza el XML XFA, no implementa el motor de diseño dinámico XFA, no ejecuta FormCalc ni JavaScript dentro de la plantilla XFA y no valida la estructura de la plantilla. El llamador crea por sí mismo el XML XFA (normalmente mediante Adobe LiveCycle Designer o escrito manualmente según la especificación XFA 3.3) y HotPDF emite los bytes literalmente

 

Los lectores consumidores con motor XFA (Acrobat / Reader antiguos, FormsCentral, algunos productos de quiosco) renderizan el formulario; los lectores sin motor XFA (Adobe Reader DC desde 2017, la mayoría de lectores de código abierto) muestran los campos AcroForm de reserva si el documento usa un flujo híbrido AcroForm + XFA

 

PDF/A and PDF/X compliance gates

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 prohíben explícitamente los formularios XFA (el motor de diseño dinámico no es archivable de forma determinista). Los flujos de preprensa ISO 15930 rechazan por completo los formularios interactivos. AddXFAPacket genera error de inmediato con cualquier PDFACompliance o PDFXCompliance no vacío junto con la referencia de especificación pertinente. Los nombres de paquete duplicados generan error. PacketName vacío o XMLBytes vacío generan error. RequirePDFVersion(pdf15) eleva automáticamente la versión del documento

 

AcroForm dictionary emission

El diccionario AcroForm se emite cuando o bien /Fields tiene al menos una entrada o bien se ha registrado al menos un paquete XFA. Los llamadores anteriores a v2.119.51 que no registran paquetes conservan una salida /AcroForm idéntica byte a byte

 

Flujo de trabajo típico (pure XFA dynamic form)

 

PDF.BeginDoc;

TemplateBytes := TFile.ReadAllBytes('form-template.xml');

DataBytes     := TFile.ReadAllBytes('form-data.xml');

PDF.AddXFAPacket('xdp:xdp', BytesOf('<xdp:xdp xmlns:xdp="http://ns.adobe.com/xdp/">'));

PDF.AddXFAPacket('template', TemplateBytes);

PDF.AddXFAPacket('datasets', DataBytes);

PDF.AddXFASignaturePacket(SigBytes); { caller-generated XAdES }

PDF.AddXFAPacket('/xdp:xdp', BytesOf('</xdp:xdp>'));

PDF.EndDoc;

 

XDP wrapper, single-stream, dynamic, and signed XFA

La forma de arreglo de /XFA debe abrir y cerrar con paquetes de envoltura xdp:xdp, como ahora muestra el ejemplo (ISO 32000-1 §12.7.8). API de XFA relacionadas: SetXFADocument escribe todo el documento XFA/XDP como un único flujo /XFA, excluyente con AddXFAPacket; XFANeedsRendering establece el indicador /NeedsRendering del Catalog (ISO 32000-1 §7.7.2) para que un visor regenere un formulario XFA dinámico al abrirlo por primera vez; AddXFASignaturePacket incrusta una firma XAdES / XML-DSig generada por el llamador como el paquete signature. HotPDF nunca genera ni analiza la firma - el llamador la produce con una biblioteca criptográfica XML sobre los datasets de XFA.

 

Aplanamiento de XFA a AcroForm

ApplyXFAAsAcroForm asigna los bytes XDP/XFA proporcionados por el llamador a la página actual como widgets AcroForm nativos y gráficos sencillos. FlattenLoadedXFA hace la misma conversión para un PDF cargado que ya contiene un paquete /XFA incrustado. Pase Editable=False para marcar los widgets generados como de solo lectura y revise XFAFlattenWarnings para los elementos no asignados.

 

Véase también: Soporte AcroForm, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField