THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

THotPDF XFA forms container (v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

Belgenin AcroForm /XFA girdisi içinde yayılmak üzere adlandırılmış bir XFA (XML Forms Architecture) paketi kaydeder. PDF 1.7 §12.7.6 + §12.7.8, AcroForm öğesinin statik /Fields arrayinin yanında (veya onun yerine) /XFA arrayi taşımasına izin verir; bu da hibrit AcroForm + XFA workflowlarını veya saf dynamic XFA formlarını mümkün kılar.

 

Delphi syntax:

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

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

Açıklama

AddXFAPacket için her çağrı bir adlandırılmış paket kaydeder. Tipik adlar (XFA 3.3 specification ve PDF 1.7 §12.7.8 Table 234 uyarınca):

 

template - form layout + scriptler (çoğu XFA belgesindeki en büyük paket).

datasets - data binding (template öğesinin render ettiği XML payload).

config - viewer configuration.

connectionSet - external data connectionlar.

localeSet - locale-specific formatting kuralları.

stylesheet - XSLT veya CSS styling.

xfdf - XFDF form data overlay.

xmpmeta - XMP metadata.

signature - signature-related XFA data.

sourceSet - source-side data definitionlar.

 

EndDoc sırasında her kayıtlı paket bir indirect FlateDecode-compressed stream object olur ve AcroForm /XFA arrayi packet-name PDF stringleri ile stream referencelarını registration sırasıyla dönüşümlü yazar; bu nedenle layout byte-deterministic olur. ClearXFAPackets tüm kayıtlı paketleri kaldırır (bir THotPDF instanceını birden çok belge arasında yeniden kullanmak için yararlı). XFAPacketCount current count değerini döndürür.

 

Yalnızca container-level destek

HotPDF XFA XML parse etmez, XFA dynamic-layout engine implement etmez, XFA template içinde FormCalc veya JavaScript execute etmez ve template structure validate etmez. Caller XFA XMLi kendisi yazar (genellikle Adobe LiveCycle Designer ile veya XFA 3.3 specificationa göre elle) ve HotPDF byteleri aynen yayar.

 

XFA engine içeren consumer readerlar (eski Acrobat / Reader, FormsCentral, bazı kiosk ürünleri) formu render eder; XFA engine içermeyen readerlar (2017 sonrası Adobe Reader DC, çoğu open-source reader) belge hibrit AcroForm + XFA workflow ise fallback AcroForm fieldlarını gösterir.

 

PDF/A ve PDF/X compliance kapıları

ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 XFA formlarını açıkça yasaklar (dynamic-layout engine deterministik olarak arşivlenebilir değildir). ISO 15930 prepress workflowları interactive formları tamamen reddeder. AddXFAPacket, non-empty PDFACompliance veya PDFXCompliance altında ilgili spec reference ile hemen exception oluşturur. Duplicate packet nameler exception oluşturur. Boş PacketName veya boş XMLBytes exception oluşturur. RequirePDFVersion(pdf15) belge sürümünü otomatik yükseltir.

 

AcroForm dictionary emission

AcroForm dict, ya /Fields en az bir entry içerdiğinde ya da en az bir XFA paketi kaydedildiğinde yayılır. Hiç paket kaydetmeyen v2.119.51 öncesi callerlar byte-identical /AcroForm outputunu korur.

 

Tipik workflow (saf 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'nın dizi biçimi, örneğin şimdi gösterdiği gibi xdp:xdp sarmalayıcı paketleriyle başlamalı ve bitmelidir (ISO 32000-1 §12.7.8). İlgili XFA API'leri: SetXFADocument tüm XFA/XDP belgesini tek bir /XFA akışı olarak yazar, AddXFAPacket ile karşılıklı dışlar; XFANeedsRendering, bir görüntüleyicinin belgeyi ilk açışta dinamik XFA formunu yeniden oluşturması için Catalog'daki /NeedsRendering bayrağını ayarlar (ISO 32000-1 §7.7.2); AddXFASignaturePacket çağıranın ürettiği bir XAdES / XML-DSig imzasını signature paketi olarak gömer. HotPDF imzayı asla üretmez veya ayrıştırmaz - çağıran, onu XFA datasets üzerinde bir XML kripto kitaplığıyla üretir.

 

XFA’dan AcroForm’a düzleştirme

ApplyXFAAsAcroForm, çağıranın sağladığı XDP/XFA baytlarını geçerli sayfada yerel AcroForm araçları ve basit grafikler olarak eşler. FlattenLoadedXFA, gömülü /XFA paketi taşıyan yüklü PDF için aynı dönüşümü yapar. Üretilen araçları salt okunur yapmak için Editable=False geçirin ve eşlenmeyen öğeler için XFAFlattenWarnings listesini inceleyin.

 

Ayrıca bkz.: AcroForm Support, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField