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