|
Mendaftarkan paket XFA (XML Forms Architecture) bernama untuk dikeluarkan di dalam entri /XFA pada AcroForm dokumen. PDF 1.7 §12.7.6 + §12.7.8 membolehkan AcroForm membawa array /XFA bersama dengan, atau sebagai pengganti, array statis /Fields, sehingga alur kerja AcroForm + XFA hibrida atau formulir XFA dinamis murni bisa dibuat
Delphi syntax:
procedure AddXFAPacket(const PacketName: AnsiString; const XMLBytes: TBytes);
procedure ClearXFAPackets;
function XFAPacketCount: Integer;
Deskripsi
Setiap pemanggilan AddXFAPacket mendaftarkan satu paket bernama. Nama yang umum dipakai, menurut spesifikasi XFA 3.3 dan PDF 1.7 §12.7.8 Table 234:
template - tata letak formulir + skrip (paket terbesar di kebanyakan dokumen XFA)
datasets - pengikatan data, yaitu payload XML yang dirender oleh template
config - konfigurasi viewer
connectionSet - koneksi data eksternal
localeSet - aturan pemformatan khusus locale
stylesheet - gaya XSLT atau CSS
xfdf - overlay data formulir XFDF
xmpmeta - metadata XMP
signature - data XFA yang terkait tanda tangan
sourceSet - definisi data sisi sumber
Saat EndDoc, setiap paket yang sudah didaftarkan menjadi satu objek stream tidak langsung terkompresi FlateDecode, dan array /XFA pada AcroForm bergantian antara string PDF nama paket dan referensi stream sesuai urutan pendaftaran, sehingga tata letaknya deterministik byte. ClearXFAPackets menghapus semua paket yang terdaftar, berguna untuk memakai ulang instance THotPDF di beberapa dokumen. XFAPacketCount mengembalikan jumlah saat ini
Hanya dukungan di level kontainer
HotPDF tidak mengurai XML XFA, tidak mengimplementasikan mesin tata letak dinamis XFA, tidak menjalankan FormCalc atau JavaScript di dalam template XFA, dan tidak memvalidasi struktur template. XML XFA harus ditulis sendiri oleh pemanggil, biasanya lewat Adobe LiveCycle Designer atau ditulis manual mengikuti spesifikasi XFA 3.3, lalu HotPDF mengeluarkan bytes apa adanya
Pembaca yang memiliki mesin XFA (Acrobat / Reader lawas, FormsCentral, beberapa produk kiosk) akan merender formulir; pembaca tanpa mesin XFA (Adobe Reader DC mulai 2017, sebagian besar pembaca sumber terbuka) menampilkan field AcroForm cadangan jika dokumen memakai alur kerja AcroForm + XFA hibrida
Gerbang kepatuhan PDF/A dan PDF/X
ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 secara eksplisit melarang formulir XFA, karena mesin tata letak dinamisnya tidak dapat diarsipkan secara deterministik. Alur kerja prepress ISO 15930 menolak formulir interaktif sepenuhnya. AddXFAPacket langsung menimbulkan pengecualian jika PDFACompliance atau PDFXCompliance tidak kosong, lengkap dengan referensi spesifikasi yang relevan. Nama paket duplikat juga ditolak. PacketName kosong atau XMLBytes kosong juga ditolak. RequirePDFVersion(pdf15) menaikkan versi dokumen secara otomatis
Emisi dictionary AcroForm
Dictionary AcroForm dikeluarkan ketika salah satu dari /Fields memiliki setidaknya satu entri atau setidaknya satu paket XFA sudah didaftarkan. Pemanggil sebelum v2.119.51 yang tidak mendaftarkan paket apa pun tetap mendapat keluaran /AcroForm yang identik byte
Alur kerja umum (formulir dinamis XFA murni)
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;
Wrapper XDP, XFA satu aliran, dinamis, dan bertanda tangan
Form array /XFA harus dibuka dan ditutup dengan paket wrapper xdp:xdp, seperti yang ditunjukkan contoh ini (ISO 32000-1 §12.7.8). API XFA terkait: SetXFADocument menulis seluruh dokumen XFA/XDP sebagai satu stream /XFA dan saling eksklusif dengan AddXFAPacket; XFANeedsRendering menetapkan flag /NeedsRendering pada Catalog (ISO 32000-1 §7.7.2) agar viewer membangkitkan ulang formulir XFA dinamis saat pertama dibuka; AddXFASignaturePacket menyematkan tanda tangan XAdES / XML-DSig yang dibuat pemanggil sebagai paket signature. HotPDF tidak pernah membuat atau mengurai tanda tangan itu - pemanggil yang membuatnya dengan library kriptografi XML atas datasets XFA
Flattening XFA ke AcroForm
ApplyXFAAsAcroForm memetakan bytes XDP/XFA yang disediakan pemanggil ke halaman aktif sebagai widget AcroForm asli dan grafis halaman sederhana. FlattenLoadedXFA melakukan konversi yang sama untuk PDF yang sudah dimuat dan sudah membawa paket /XFA tertanam. Kirim Editable=False untuk membuat widget yang dihasilkan menjadi hanya baca, dan periksa XFAFlattenWarnings untuk elemen yang tidak bisa dipetakan
Lihat juga: Dukungan AcroForm, THotPDF.RegisterAcroFormFont, THPDFPage.AddTextField
|