THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

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