THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  Prise en charge AcroForm

Enregistre un paquet XFA (XML Forms Architecture) nommé pour émission à l’intérieur de l’entrée /XFA du AcroForm du document. PDF 1.7 §12.7.6 + §12.7.8 permet à un AcroForm de porter un tableau /XFA en parallèle de (ou à la place de) l’ensemble statique /Fields, ce qui autorise des flux de travail hybrides AcroForm + XFA ou des formulaires XFA purement dynamiques

 

Syntaxe Delphi :

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

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Description

Chaque appel à AddXFAPacket enregistre un paquet nommé Les noms habituels, selon la spécification XFA 3.3 et le tableau 234 de PDF 1.7 §12.7.8, sont les suivants :

 

template - mise en page du formulaire + scripts (le paquet le plus volumineux dans la plupart des documents XFA)

datasets - liaison de données (la charge XML sur laquelle le modèle s’applique)

config - configuration du lecteur

connectionSet - connexions de données externes

localeSet - règles de formatage spécifiques à la locale

stylesheet - style XSLT ou CSS

xfdf - superposition de données de formulaire XFDF

xmpmeta - métadonnées XMP

signature - données XFA liées à la signature

sourceSet - définitions de données côté source

 

À EndDoc, chaque paquet enregistré devient un objet flux indirect compressé par FlateDecode, et le tableau /XFA d’AcroForm alterne des chaînes PDF de nom de paquet avec des références de flux dans l’ordre d’enregistrement, ce qui rend la mise en page déterministe au niveau des octets ClearXFAPackets supprime tous les paquets enregistrés, ce qui est utile pour réutiliser une instance THotPDF sur plusieurs documents XFAPacketCount renvoie le nombre courant

 

Prise en charge au niveau conteneur uniquement

HotPDF ne parse pas le XML XFA, n’implémente pas le moteur de mise en page dynamique XFA, n’exécute pas FormCalc ni JavaScript à l’intérieur du modèle XFA, et ne valide pas la structure du modèle L’appelant rédige lui-même le XML XFA, généralement avec Adobe LiveCycle Designer ou en le construisant manuellement d’après la spécification XFA 3.3, et HotPDF émet les octets tels quels

 

Les lecteurs consommateurs dotés d’un moteur XFA (anciens Acrobat / Reader, FormsCentral, certains produits de borne) affichent le formulaire ; les lecteurs sans moteur XFA (Adobe Reader DC à partir de 2017, la plupart des lecteurs open source) affichent les champs AcroForm de repli si le document suit un flux hybride AcroForm + XFA

 

Gardes de conformité PDF/A et PDF/X

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 interdisent explicitement les formulaires XFA car le moteur de mise en page dynamique n’est pas archivable de façon déterministe Les flux de prépresse ISO 15930 rejettent entièrement les formulaires interactifs AddXFAPacket lève immédiatement sous n’importe quelle valeur non vide de PDFACompliance ou PDFXCompliance avec la référence de spécification correspondante Les noms de paquet dupliqués lèvent aussi une exception Les valeurs vides de PacketName ou de XMLBytes lèvent une exception RequirePDFVersion(pdf15) relève automatiquement la version du document

 

Émission du dictionnaire AcroForm

Le dictionnaire AcroForm est émis lorsque soit /Fields contient au moins une entrée soit au moins un paquet XFA a été enregistré Les appelants antérieurs à v2.119.51 qui n’enregistrent aucun paquet conservent une sortie /AcroForm identique au niveau des octets

 

Type de flux (formulaire XFA dynamique pur)

 

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;

 

Enveloppe XDP, XFA à flux unique, dynamique et signé

La forme tableau de /XFA doit commencer et se terminer par des paquets d'enveloppe xdp:xdp, comme le montre désormais l'exemple (ISO 32000-1 §12.7.8) API XFA associées : SetXFADocument écrit tout le document XFA/XDP comme un flux /XFA unique, exclusif avec AddXFAPacket ; XFANeedsRendering définit l'indicateur /NeedsRendering du Catalog (ISO 32000-1 §7.7.2) afin qu'un lecteur régénère un formulaire XFA dynamique à la première ouverture ; AddXFASignaturePacket intègre une signature XAdES / XML-DSig produite par l'appelant comme paquet signature. HotPDF ne génère ni n'analyse jamais la signature - l'appelant la produit avec une bibliothèque cryptographique XML sur les datasets XFA

 

Aplatissement XFA vers AcroForm

ApplyXFAAsAcroForm projette les octets XDP/XFA fournis par l’appelant sur la page courante sous forme de widgets AcroForm natifs et de graphiques simples. FlattenLoadedXFA fait la même conversion pour un PDF chargé qui contient déjà un paquet /XFA intégré. Passez Editable=False pour rendre les widgets générés en lecture seule et consultez XFAFlattenWarnings pour les éléments non mappés

 

Voir aussi: Prise en charge AcroForm, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField