|
Registrerer en navngitt XFA-pakke (XML Forms Architecture) for utsending i dokumentets AcroForm /XFA-oppføring. PDF 1.7 §12.7.6 + §12.7.8 lar en AcroForm bære en /XFA-tabell ved siden av, eller i stedet for, den statiske /Fields-tabellen, noe som muliggjør hybride AcroForm + XFA-arbeidsflyter eller rene dynamiske XFA-skjemaer
Delphi-syntaks:
procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);
procedure ClearXFAPackets;
function XFAPacketCount: Integer;
Beskrivelse
Hvert kall til AddXFAPacket registrerer én navngitt pakke. Typiske navn, i henhold til XFA 3.3-spesifikasjonen og PDF 1.7 §12.7.8 tabell 234:
template - skjemautforming + skript, den største pakken i de fleste XFA-dokumenter
datasets - databinding, altså XML-lastene malen rendrer mot
config - viserkonfigurasjon
connectionSet - eksterne datatilkoblinger
localeSet - lokalspesifikke formateringsregler
stylesheet - XSLT- eller CSS-styling
xfdf - overlegg for XFDF-skjemadata
xmpmeta - XMP-metadata
signature - signaturrelaterte XFA-data
sourceSet - datadefinisjoner på kildesiden
Ved EndDoc blir hver registrerte pakke til ett indirekte FlateDecode-komprimert strømobjekt, og AcroForm /XFA-tabellen veksler mellom PDF-strenger for pakkenavn og strømreferanser i registreringsrekkefølge, slik at oppsettet blir byte-deterministisk. ClearXFAPackets fjerner alle registrerte pakker, nyttig når en THotPDF-instans skal gjenbrukes på tvers av flere dokumenter. XFAPacketCount returnerer gjeldende antall
Kun støtte på beholdernivå
HotPDF parser ikke XFA-XML, implementerer ikke XFA-motoren for dynamisk oppsett, kjører ikke FormCalc eller JavaScript inne i XFA-malen og validerer ikke malstrukturen. Kalleren forfatter XFA-XML selv, vanligvis via Adobe LiveCycle Designer eller ved å bygge det manuelt mot XFA 3.3-spesifikasjonen, og HotPDF sender bytene uendret
Lesere med en XFA-motor, som eldre Acrobat / Reader, FormsCentral og enkelte kioskprodukter, rendrer skjemaet; lesere uten XFA-motor, som Adobe Reader DC fra 2017 og fremover og de fleste åpen kilde-lesere, viser de reservefeltene fra AcroForm hvis dokumentet er en hybrid AcroForm + XFA-arbeidsflyt
Samsvarskontroller for PDF/A og PDF/X
ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 forbyr uttrykkelig XFA-skjemaer, siden motoren for dynamisk oppsett ikke kan arkiveres deterministisk. ISO 15930-forhåndstrykk-arbeidsflyter avviser interaktive skjemaer fullstendig. AddXFAPacket utløser straks ved enhver ikke-tom PDFACompliance eller PDFXCompliance med relevant spesifikasjonsreferanse. Dupliserte pakkenavn utløser feil. Tom PacketName eller tom XMLBytes utløser feil. RequirePDFVersion(pdf15) hever dokumentversjonen automatisk
Utsending av AcroForm-ordboken
AcroForm-ordboken sendes ut når enten /Fields har minst én oppføring eller minst én XFA-pakke er registrert. Kallere før v2.119.51 som ikke registrerer noen pakker beholder byte-identisk /AcroForm-utdata
Typisk arbeidsflyt, rent dynamisk XFA-skjema
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-innpakning, énstrøms-, dynamisk og signert XFA
Arrayformen /XFA må åpne og lukke med innpakningspakkene xdp:xdp, slik eksemplet nå viser, i henhold til ISO 32000-1 §12.7.8. Relaterte XFA-API-er: SetXFADocument skriver hele XFA/XDP-dokumentet som én /XFA-strøm, gjensidig utelukkende med AddXFAPacket; XFANeedsRendering setter katalogflagget /NeedsRendering i ISO 32000-1 §7.7.2 slik at en visning regenererer et dynamisk XFA-skjema ved første åpning; AddXFASignaturePacket bygger inn en XAdES / XML-DSig-signatur laget av kalleren som signature-pakken. HotPDF genererer eller parser aldri signaturen - kalleren produserer den med et XML-kryptografibibliotek over XFA-datasettene
Utflating fra XFA til AcroForm
ApplyXFAAsAcroForm mapper XDP/XFA-byter som er levert av kalleren til gjeldende side som opprinnelige AcroForm-objekter og enkel sidetegning. FlattenLoadedXFA utfører samme konvertering for en innlastet PDF som allerede har en innebygd /XFA-pakke. Send Editable=False for å gjøre genererte objekter skrivebeskyttet, og undersøk XFAFlattenWarnings for elementer som ikke kunne mappes
Se også: AcroForm-støtte, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField
|