THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA-formscontainer (v2.119.51)

 

RegisterAcroFormFont  AcroForm-ondersteuning

Registreert een benoemd XFA-pakket (XML Forms Architecture) voor opname in het /XFA-item van de AcroForm van het document. PDF 1.7 §12.7.6 + §12.7.8 laat een AcroForm een /XFA-array naast, of in plaats van, de statische /Fields-array dragen, wat hybride AcroForm + XFA-workflows of pure dynamische XFA-formulieren mogelijk maakt

 

Delphi-syntaxis:

procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Beschrijving

Elke aanroep van AddXFAPacket registreert één benoemd pakket. Typische namen (volgens de XFA 3.3-specificatie en PDF 1.7 §12.7.8 tabel 234):

 

template - formulierindeling + scripts (het grootste pakket in de meeste XFA-documenten)

datasets - databinding (de XML-payload waartegen de template rendert)

config - viewerconfiguratie

connectionSet - externe dataverbindingen

localeSet - locale-specifieke opmaakregels

stylesheet - XSLT- of CSS-opmaak

xfdf - XFDF-overlaag voor formuliervelden

xmpmeta - XMP-metadata

signature - XFA-gegevens met betrekking tot handtekeningen

sourceSet - gegevensdefinities aan de bronzijde

 

Bij EndDoc wordt elk geregistreerd pakket één indirect, met FlateDecode gecomprimeerd streamobject en de AcroForm /XFA-array wisselt pakketnaam-PDF-strings af met streamverwijzingen in registratier volgorde, zodat de lay-out byte-deterministisch is. ClearXFAPackets verwijdert alle geregistreerde pakketten, wat handig is wanneer één THotPDF-instantie over meerdere documenten wordt hergebruikt. XFAPacketCount geeft de huidige telling terug

 

Alleen ondersteuning op containerniveau

HotPDF parseert de XFA-XML niet, implementeert de XFA-dynamische lay-outengine niet, voert geen FormCalc of JavaScript uit in de XFA-template en valideert de templatestructuur niet. De aanroeper schrijft de XFA-XML zelf, meestal via Adobe LiveCycle Designer of handmatig volgens de XFA 3.3-specificatie, en HotPDF geeft de bytes letterlijk door

 

Leesprogramma's met een XFA-engine (oudere Acrobat / Reader, FormsCentral, sommige kioskproducten) renderen het formulier; lezers zonder XFA-engine (Adobe Reader DC vanaf 2017, de meeste opensource-readers) tonen de fallback-AcroFormvelden als het document een hybride AcroForm + XFA-workflow is

 

Conformiteitscontroles voor PDF/A en PDF/X

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 verbieden XFA-formulieren expliciet, omdat de dynamische lay-outengine niet deterministisch te archiveren is. ISO 15930-prepressworkflows weigeren interactieve formulieren volledig. AddXFAPacket geeft direct een uitzondering bij elke niet-lege PDFACompliance of PDFXCompliance met de relevante specificatiereferentie. Dubbele pakketnamen geven een uitzondering. Een lege PacketName of lege XMLBytes geeft een uitzondering. RequirePDFVersion(pdf15) verhoogt de documentversie automatisch

 

Uitgifte van de AcroForm-dictionary

De AcroForm-dict wordt uitgegeven wanneer ofwel /Fields ten minste één item bevat of ten minste één XFA-pakket is geregistreerd. Aanroepers van vóór v2.119.51 die geen pakketten registreren, behouden byte-identieke /AcroForm-uitvoer

 

Typische workflow (puur dynamisch XFA-formulier)

 

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, dynamische en ondertekende XFA

De array-vorm van /XFA moet beginnen en eindigen met xdp:xdp-wrapperpakketten, zoals het voorbeeld laat zien (ISO 32000-1 §12.7.8). Verwante XFA-API's: SetXFADocument schrijft het hele XFA/XDP-document als één /XFA-stream, wederzijds exclusief met AddXFAPacket; XFANeedsRendering zet de Catalog-vlag /NeedsRendering aan (ISO 32000-1 §7.7.2) zodat een viewer een dynamisch XFA-formulier bij de eerste opening opnieuw genereert; AddXFASignaturePacket voegt een door de aanroeper gemaakte XAdES-/XML-DSig-handtekening toe als het signature-pakket. HotPDF genereert of parseert de handtekening nooit - de aanroeper maakt die met een XML-cryptobibliotheek over de XFA-datasets

 

XFA naar AcroForm afvlakken

ApplyXFAAsAcroForm zet door de aanroeper geleverde XDP/XFA-bytes op de huidige pagina om naar native AcroForm-widgets en eenvoudige paginagrafiek. FlattenLoadedXFA doet dezelfde conversie voor een geladen PDF met een ingebed /XFA-pakket. Geef Editable=False door om widgets alleen-lezen te maken en controleer XFAFlattenWarnings op niet-gemapte elementen

 

Zie ook: AcroForm-ondersteuning, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField