|
Registers a named XFA (XML Forms Architecture) packet for emission inside the document's AcroForm /XFA . PDF 1.7 §12.7.6 + §12.7.8 consente a un AcroForm di portare un /XFA array alongside (or instead of) the static /Fields , abilitando flussi ibridi AcroForm + XFA o moduli XFA puramente dinamici.
Sintassi Delphi:
procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);
procedure ClearXFAPackets;
function XFAPacketCount: Integer;
Descrizione
Ogni chiamata a AddXFAPacket registers one named packet. Typical names (per the XFA 3.3 specification and PDF 1.7 §12.7.8 Table 234):
template - form layout + scripts (the largest packet in most XFA documents).
datasets - data binding (the XML payload the template renders against).
config - configurazione del viewer.
connectionSet - connessioni dati esterne.
localeSet - regole di formattazione specifiche per locale.
stylesheet - stile XSLT o CSS.
xfdf - overlay di dati formulario XFDF.
xmpmeta - metadati XMP.
signature - dati XFA relativi alle firme.
sourceSet - definizioni dati lato sorgente.
At EndDoc ogni pacchetto registrato diventa un oggetto stream indiretto compresso FlateDecode, e l'AcroForm /XFA alterna stringhe PDF di nomi di pacchetto a riferimenti a stream in ordine di registrazione, così il layout è deterministico al byte. ClearXFAPackets removes all registered packets (useful for reusing a THotPDF tra più documenti). XFAPacketCount restituisce il conteggio corrente.
Solo supporto a livello di contenitore
HotPDF non analizza l'XML XFA, fa non implementino il motore di layout dinamico XFA, fa non eseguano FormCalc o JavaScript nel template XFA, e fa non validate template structure. The caller authors the XFA XML themselves (typically via Adobe LiveCycle Designer or hand-rolling against the XFA 3.3 specification) and HotPDF emits the bytes verbatim.
Consumer readers with an XFA engine (older Acrobat / Reader, FormsCentral, some kiosk products) render the form; readers without an XFA engine (Adobe Reader DC from 2017 onward, most open-source readers) display the fallback AcroForm fields if the document is a hybrid AcroForm + XFA workflow.
cancelli di conformità PDF/A e PDF/X
ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 vietano esplicitamente tutti i moduli XFA (il motore di layout dinamico non è archiviabile in modo deterministico). I flussi prepress ISO 15930 rifiutano del tutto i moduli interattivi. AddXFAPacket solleva immediatamente con qualsiasi non vuoto PDFACompliance oppure PDFXCompliance with the relevant spec reference. Duplicate packet names raise. Empty PacketName o vuoto XMLBytes sollevare. RequirePDFVersion(pdf15) alza automaticamente la versione del documento.
Emissione del dizionario AcroForm
Il dizionario AcroForm viene emesso quando either /Fields ha almeno una voce oppure almeno un pacchetto XFA è stato registrato. I chiamanti precedenti alla v2.119.51 che non registrano pacchetti mantengono identico al byte /AcroForm output.
Typical workflow (pure XFA dynamic form)
PDF.BeginDoc;
TemplateBytes := TFile.ReadAllBytes('form-template.xml');
DataBytes := TFile.ReadAllBytes('form-data.xml');
PDF.AddXFAPacket('xdp:xdp', BytesOf(''));
PDF.AddXFAPacket('template', TemplateBytes);
PDF.AddXFAPacket('datasets', DataBytes);
PDF.AddXFASignaturePacket(SigBytes); { caller-generated XAdES }
PDF.AddXFAPacket('/xdp:xdp', BytesOf(''));
PDF.EndDoc;
wrapper XDP, single-stream, XFA dinamica e firmata
L'array /XFA deve aprirsi e chiudersi con xdp:xdp wrapper packets, as the example now shows (ISO 32000-1 §12.7.8). Related XFA APIs: SetXFADocument scrive l'intero documento XFA/XDP come un singolo /XFA stream, mutualmente esclusivo con AddXFAPacket; XFANeedsRendering imposta nel Catalog la /NeedsRendering flag (ISO 32000-1 §7.7.2) so a viewer regenerates a dynamic XFA form on first open; AddXFASignaturePacket incorpora una firma XAdES / XML-DSig generata dal chiamante come signature . HotPDF non genera né analizza mai la firma - il chiamante la produce con una libreria crittografica XML sui dataset XFA.
appiattimento XFA-to-AcroForm
ApplyXFAAsAcroForm mappa i byte XDP/XFA forniti dal chiamante sulla pagina corrente come widget AcroForm nativi e semplici grafiche di pagina. FlattenLoadedXFA esegue la stessa conversione per un PDF caricato che porta già un /XFA . Passa Editable=False to make generated widgets read-only, and inspect XFAFlattenWarnings for elements that could not be mapped.
Vedi anche: Supporto AcroForm, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField
|