|
Înregistrează un pachet XFA (XML Forms Architecture) denumit pentru a fi emis în intrarea /XFA a AcroForm-ului documentului. PDF 1.7 §12.7.6 + §12.7.8 permite unui AcroForm să conțină un array /XFA alături de sau în locul array-ului static /Fields, permițând fluxuri de lucru hibride AcroForm + XFA sau formulare XFA dinamice pure
Delphi syntax:
procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);
procedure ClearXFAPackets;
function XFAPacketCount: Integer;
Descriere
Fiecare apel la AddXFAPacket înregistrează un singur pachet denumit. Nume tipice, conform specificației XFA 3.3 și PDF 1.7 §12.7.8 Table 234:
template - șablonul de aspect + scripturi (cel mai mare pachet din majoritatea documentelor XFA)
datasets - legarea datelor (payload-ul XML pe care șablonul îl redă)
config - configurarea viewerului
connectionSet - conexiuni externe de date
localeSet - reguli de formatare locale
stylesheet - stilizare XSLT sau CSS
xfdf - suprapunerea datelor de formular XFDF
xmpmeta - metadate XMP
signature - date XFA legate de semnătură
sourceSet - definiții de date din sursă
La EndDoc, fiecare pachet înregistrat devine un obiect stream indirect comprimat FlateDecode, iar array-ul AcroForm /XFA alternează stringurile PDF cu numele pachetelor și referințele la stream-uri în ordinea înregistrării, astfel încât layout-ul este determinist la nivel de octet. ClearXFAPackets elimină toate pachetele înregistrate (util pentru reutilizarea unei instanțe THotPDF între mai multe documente). XFAPacketCount returnează numărul curent
Container-level support only
HotPDF nu parsează XML-ul XFA, nu implementează motorul de layout dinamic XFA, nu execută FormCalc sau JavaScript în interiorul șablonului XFA și nu validează structura șablonului. Apelantul redactează singur XML-ul XFA, de obicei prin Adobe LiveCycle Designer sau scriindu-l manual conform specificației XFA 3.3, iar HotPDF emite octeții verbatim
Cititoarele cu motor XFA (Acrobat / Reader mai vechi, FormsCentral, unele produse kiosk) redau formularul; cititoarele fără motor XFA (Adobe Reader DC din 2017 încoace, majoritatea cititoarelor open-source) afișează câmpurile de rezervă AcroForm dacă documentul este un flux de lucru hibrid AcroForm + XFA
Porți de conformitate PDF/A și PDF/X
ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 interzic explicit formularele XFA, deoarece motorul de layout dinamic nu poate fi arhivat determinist. Fluxurile prepress ISO 15930 resping complet formularele interactive. AddXFAPacket aruncă imediat o excepție sub orice PDFACompliance sau PDFXCompliance nenul, împreună cu referința de specificație relevantă. Numele de pachet duplicate aruncă excepție. PacketName gol sau XMLBytes gol aruncă excepție. RequirePDFVersion(pdf15) ridică automat versiunea documentului
Emisia dicționarului AcroForm
Dicționarul AcroForm este emis când fie /Fields are cel puțin o intrare fie a fost înregistrat cel puțin un pachet XFA. Apelanții dinainte de v2.119.51 care nu înregistrează niciun pachet păstrează o ieșire /AcroForm identică la nivel de octet
Flux tipic de lucru (formular XFA dinamic 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;
XFA cu XDP wrapper, flux unic, dinamic și semnat
Forma de array /XFA trebuie să înceapă și să se încheie cu pachete wrapper xdp:xdp, așa cum arată acum exemplul (ISO 32000-1 §12.7.8). API-urile XFA asociate: SetXFADocument scrie întregul document XFA/XDP ca un singur flux /XFA, fiind mutual exclusiv cu AddXFAPacket; XFANeedsRendering setează indicatorul Catalog /NeedsRendering (ISO 32000-1 §7.7.2), astfel încât viewerul regenerează un formular XFA dinamic la prima deschidere; AddXFASignaturePacket încorporează o semnătură XAdES / XML-DSig generată de apelant ca pachetul signature. HotPDF nu generează și nu parsează niciodată semnătura - apelantul o produce cu o bibliotecă criptografică XML peste datele XFA
Flattening XFA în AcroForm
ApplyXFAAsAcroForm mapează octeții XDP/XFA furnizați de apelant pe pagina curentă ca widget-uri AcroForm native și grafică simplă de pagină. FlattenLoadedXFA face aceeași conversie pentru un PDF încărcat care conține deja un pachet /XFA încorporat. Transmiteți Editable=False pentru a face widget-urile generate numai pentru citire și inspectați XFAFlattenWarnings pentru elementele care nu au putut fi mapate
Vezi și: Suport AcroForm, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField
|