THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

Регистрира именуван XFA (XML Forms Architecture) packet за излъчване в AcroForm /XFA entry на документа. PDF 1.7 §12.7.6 + §12.7.8 позволява на AcroForm да носи /XFA array заедно с (или вместо) статичния /Fields array, което позволява hybrid AcroForm + XFA workflows или чисти динамични XFA форми

 

Delphi syntax:

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

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Описание

Всяко извикване на AddXFAPacket регистрира един именуван пакет. Типични имена (по спецификацията XFA 3.3 и PDF 1.7 §12.7.8, Table 234):

 

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 всеки регистриран пакет се превръща в един индиректен FlateDecode-компресиран stream object, а масивът AcroForm /XFA редува имената на пакетите (PDF strings) и stream референциите в реда на регистрация, така че оформянето остава детерминистично. ClearXFAPackets премахва всички регистрирани пакети, полезно при повторна употреба на един THotPDF обект през няколко документа. XFAPacketCount връща текущия брой

 

Container-level support only

HotPDF не парсира XFA XML, не имплементира XFA dynamic-layout engine, не изпълнява FormCalc или JavaScript вътре в XFA шаблона и не валидира структурата на шаблона. Извикващият сам създава XFA XML (обикновено чрез Adobe LiveCycle Designer или ръчно по спецификацията XFA 3.3), а HotPDF излъчва байтовете дословно

 

Consumer readers с XFA engine (по-стар Acrobat / Reader, FormsCentral, някои kiosk products) рендират формата; readers без XFA engine (Adobe Reader DC от 2017 нататък, повечето open-source readers) показват fallback AcroForm полетата, ако документът е hybrid AcroForm + XFA workflow

 

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 изрично забраняват XFA forms (dynamic-layout engine-ът не може да се архивира детерминирано). ISO 15930 prepress workflow-ите изцяло отхвърлят интерактивни форми. AddXFAPacket вдига изключение незабавно при всяка ненулева PDFACompliance или PDFXCompliance със съответната spec препратка. Дублирани имена на packet-и вдигат изключение. Празен PacketName или празен XMLBytes вдигат изключение. RequirePDFVersion(pdf15) автоматично повишава версията на документа

 

AcroForm dictionary emission

Диктът AcroForm се издава, когато either /Fields има поне един запис or е регистриран поне един XFA пакет. Ползвателите преди v2.119.51, които не регистрират пакети, запазват байт-идентичен изход на /AcroForm

 

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 form трябва да започва и да завършва с wrapper пакети xdp:xdp, както показва и примерът (ISO 32000-1 §12.7.8). Свързани XFA API: SetXFADocument записва целия XFA/XDP документ като един единствен поток /XFA, взаимно изключващ се с AddXFAPacket; XFANeedsRendering задава флага /NeedsRendering в Catalog (ISO 32000-1 §7.7.2), така че четецът да регенерира динамична XFA форма при първо отваряне; AddXFASignaturePacket вгражда генерирана от ползвателя XAdES / XML-DSig подписна стойност като пакет signature. HotPDF никога не генерира и не парсва подписа - ползвателят го произвежда с XML криптографска библиотека върху XFA datasets

 

XFA-to-AcroForm flattening

ApplyXFAAsAcroForm преобразува подаваните от извикващия XDP/XFA bytes към текущата страница като native AcroForm widgets и прости page graphics. FlattenLoadedXFA прави същото преобразуване за заредено PDF, което вече съдържа вграден /XFA пакет. Задайте Editable=False, за да маркирате генерираните widgets като само за четене, и проверете XFAFlattenWarnings за елементи, които не могат да бъдат картографирани

 

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