|
Registrerar ett namngivet XFA-paket (XML Forms Architecture) för emission inuti dokumentets AcroForm-/XFA-post. PDF 1.7 §12.7.6 + §12.7.8 låter en AcroForm bära en /XFA-array bredvid (eller i stället för) den statiska /Fields-arrayen, vilket möjliggör hybrida AcroForm + XFA-flöden eller rena dynamiska XFA-formulär.
Delphi syntax:
procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);
procedure ClearXFAPackets;
function XFAPacketCount: Integer;
Beskrivning
Varje anrop till AddXFAPacket registrerar ett namngivet paket. Typiska namn (enligt XFA 3.3-specifikationen och PDF 1.7 §12.7.8 Table 234):
template - formulärlayout + skript (det största paketet i de flesta XFA-dokument).
datasets - databindning (XML-payloaden som templaten renderar mot).
config - visarkonfiguration.
connectionSet - externa dataanslutningar.
localeSet - locale-specifika formateringsregler.
stylesheet - XSLT- eller CSS-styling.
xfdf - XFDF-formulärdataöverlägg.
xmpmeta - XMP-metadata.
signature - signaturrelaterade XFA-data.
sourceSet - datadefinitioner på källsidan.
Vid EndDoc blir varje registrerat paket ett indirekt FlateDecode-komprimerat stream-objekt, och AcroForm-/XFA-arrayen växlar mellan PDF-strängar med paketnamn och stream-referenser i registreringsordning, så layouten är byte-deterministisk. ClearXFAPackets tar bort alla registrerade paket (användbart när en THotPDF-instans återanvänds över flera dokument). XFAPacketCount returnerar aktuellt antal.
Endast stöd på containernivå
HotPDF parsar inte XFA-XML, implementerar inte XFA:s dynamiska layoutmotor, kör inte FormCalc eller JavaScript inuti XFA-templaten och validerar inte templatestrukturen. Anroparen skriver XFA-XML själv (vanligtvis via Adobe LiveCycle Designer eller manuellt mot XFA 3.3-specifikationen) och HotPDF emitterar byten oförändrade.
Konsumentläsare med XFA-motor (äldre Acrobat / Reader, FormsCentral, vissa kioskprodukter) renderar formuläret; läsare utan XFA-motor (Adobe Reader DC från 2017 och framåt, de flesta open-source-läsare) visar fallback-AcroForm-fält om dokumentet är ett hybridflöde AcroForm + XFA.
PDF/A- och PDF/X-efterlevnadsgrindar
ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 förbjuder uttryckligen XFA-formulär (den dynamiska layoutmotorn är inte deterministiskt arkiverbar). ISO 15930-prepressflöden avvisar interaktiva formulär helt. AddXFAPacket kastar direkt vid icke-tomt PDFACompliance eller PDFXCompliance med relevant specreferens. Duplicerade paketnamn kastar. Tomt PacketName eller tomma XMLBytes kastar. RequirePDFVersion(pdf15) höjer dokumentversionen automatiskt.
Emission av AcroForm-ordlista
AcroForm-ordlistan emitteras när antingen /Fields har minst en post eller minst ett XFA-paket har registrerats. Anropare före v2.119.51 som inte registrerar några paket behåller byte-identisk /AcroForm-utdata.
Typiskt arbetsflöde (rent dynamiskt XFA-formulär)
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 wrapper, single-stream, dynamic, and signed XFA
Array-formen av /XFA måste börja och sluta med xdp:xdp-omslutningspaket, som exemplet nu visar (ISO 32000-1 §12.7.8). Relaterade XFA-API:er: SetXFADocument skriver hela XFA/XDP-dokumentet som en enda /XFA-ström, ömsesidigt uteslutande med AddXFAPacket; XFANeedsRendering sätter Catalog-flaggan /NeedsRendering (ISO 32000-1 §7.7.2) så att en läsare återskapar ett dynamiskt XFA-formulär vid första öppning; AddXFASignaturePacket bäddar in en anroparskapad XAdES-/XML-DSig-signatur som signature-paketet. HotPDF varken genererar eller tolkar någonsin signaturen - anroparen skapar den med ett XML-kryptobibliotek över XFA-dataseten.
Utjämning från XFA till AcroForm
ApplyXFAAsAcroForm mappar XDP/XFA-byte från anroparen till den aktuella sidan som inbyggda AcroForm-widgetar och enkel sidgrafik. FlattenLoadedXFA gör samma konvertering för en inläst PDF med ett inbäddat /XFA-paket. Skicka Editable=False för att göra widgetarna skrivskyddade och granska XFAFlattenWarnings för omappade element.
Se även: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField
|