THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

Registruoja vardinį XFA (XML Forms Architecture) paketą dokumento AcroForm /XFA įraše. PDF 1.7 §12.7.6 + §12.7.8 leidžia AcroForm nurodyti /XFA masyvą kartu (arba vietoje) neišnaudojamo /Fields masyvo, leidžiant hibridinius AcroForm + XFA darbus arba grynus dinamiškus XFA formatus

 

Delphi syntax:

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

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Aprašas

Kiekvienas AddXFAPacket kvietimas registruoja vieną pavadintą paketą. Tipiniai pavadinimai (pagal XFA 3.3 specifikaciją ir PDF 1.7 §12.7.8 234 lentelę):

 

template - form layout + scripts (the largest packet in most XFA documents).

datasets - data binding (the XML payload the template renders against).

config - viewer configuration.

connectionSet - external data connections.

localeSet - locale-specific formatting rules.

stylesheet - XSLT or CSS styling.

xfdf - XFDF form data overlay.

xmpmeta - XMP metadata.

signature - signature-related XFA data.

sourceSet - source-side data definitions.

 

EndDoc metu kiekvienas registruotas paketas tampa vienu netiesioginiu FlateDecode suspaustu srautiniu objektu, o AcroForm /XFA masyvas registracijos tvarka kaitalioja paketų pavadinimo PDF eilutes su srautų nuorodomis, todėl išdėstymas tampa deterministiškai identiškas baitais. ClearXFAPackets pašalina visus registruotus paketus (naudinga, kai THotPDF naudoja keliuose dokumentuose). XFAPacketCount grąžina dabartinį kiekį

 

Container-level support only

HotPDF ne analizuoja XFA XML, ne įgyvendina XFA dinaminio išdėstymo variklį, ne vykdo FormCalc ar JavaScript iš XFA šablono, ir ne tikrina šablono struktūrą. Kūrėjas pats pateikia XFA XML (dažniausiai per Adobe LiveCycle Designer arba rankiniu būdu pagal XFA 3.3 specifikaciją) ir HotPDF įrašo baitus nepakitus

 

Vartotojo skaitytuvai su XFA varikliu (senesni Acrobat / Reader, FormsCentral, kai kurie kiosk produktai) pateikia formą; skaitytuvai be XFA variklio (Adobe Reader DC nuo 2017 m., dauguma atviro kodo skaitytuvų) rodo atsarginį AcroForm laukų vaizdą, jei dokumentas yra hibridinis AcroForm + XFA darbas

 

PDF/A and PDF/X compliance gates

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 aiškiai neleidžia XFA formas, nes dinaminio išdėstymo variklis nėra nuosekliai archyvuojamas. ISO 15930 prepress procesai visiškai atmeta interaktyvius formas. AddXFAPacket iš karto pateikia klaidą, jei PDFACompliance arba PDFXCompliance ne tušti su atitinkama specifikacijos nuoroda. Pakartotiniai paketų pavadinimai sukelia klaidą. Tuščias PacketName arba XMLBytes taip pat sukelia klaidą. RequirePDFVersion(pdf15) automatiškai pakelia dokumento versiją

 

AcroForm dictionary emission

AcroForm dict išvedamas tada, kai arba /Fields turi bent vieną įrašą, arba yra registruotas bent vienas XFA paketas. Iki v2.119.51 paketų neregistruojantys kūrėjai išsaugo baitais identišką /AcroForm išvestį

 

Typical workflow (pure XFA dynamic form)

 

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

/XFA masyvas turi prasidėti ir baigtis su xdp:xdp apgaubiančiais paketais, kaip dabar rodo pavyzdys (ISO 32000-1 §12.7.8). Susiję XFA API: SetXFADocument įrašo visą XFA/XDP dokumentą kaip vieną /XFA srautą, tai tarpusavyje nesuderinama su AddXFAPacket; XFANeedsRendering nustato Catalog /NeedsRendering žymą (ISO 32000-1 §7.7.2), kad pirmasis skaitymo atidarymas atkuria dinaminį XFA formą; AddXFASignaturePacket įterpia vartotojo sugeneruotą XAdES / XML-DSig parašą kaip signature paketą. HotPDF niekada nesukuria ir neapdoroja parašo, jo kūrimo būdas tenka išorinei XML kriptografinės bibliotekos pagalbai su XFA duomenimis

 

XFA-to-AcroForm flattening

ApplyXFAAsAcroForm susieja kviestinės pusės pateiktus XDP/XFA baitus su dabartiniu puslapiu kaip natūralius AcroForm widgetus ir paprastą puslapio grafiką. FlattenLoadedXFA atlieka tą pačią konversiją įkeltam PDF, kuris jau turi įterptą /XFA paketą. Paduokite Editable=False, kad sugeneruoti widgetai būtų tik skaitymui, ir tikrinkite XFAFlattenWarnings elementams, kurių nepavyko susieti

 

See also: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField