THotPDF.AddXFAPacket / ClearXFAPackets / XFAPacketCount

حاوية نماذج XFA لـ THotPDF (الإصدار v2.119.51)

 

RegisterAcroFormFont  AcroForm Support

يسجل حزمة XFA (بنية نماذج XML) مسماة للإصدار داخل إدخال AcroForm /XFA في المستند؛ يتيح PDF 1.7 §12.7.6 + §12.7.8 لـ AcroForm حمل مصفوفة /XFA جنبًا إلى جنب مع (أو بدلاً من) مصفوفة /Fields الثابتة، مما يتيح سير عمل AcroForm + XFA هجين أو نماذج XFA ديناميكية بحتة

 

صيغة Delphi:

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

procedure ClearXFAPackets;

function XFAPacketCount: Integer;

 

الوصف

تسجل كل مكالمة لـ AddXFAPacket حزمة واحدة مسماة؛ الأسماء النموذجية (وفقًا لمواصفات XFA 3.3 و PDF 1.7 §12.7.8 الجدول 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، وتبدل مصفوفة AcroForm /XFA بين سلاسل PDF لاسم الحزمة ومراجع التدفق بترتيب التسجيل، لذا يكون التخطيط محدد البايت؛ وتزيل طريقة ClearXFAPackets جميع الحزم المسجلة (مفيد لإعادة استخدام مثيل THotPDF عبر مستندات متعددة)؛ وترجع XFAPacketCount العدد الحالي

 

دعم على مستوى الحاوية فقط

لا يقوم HotPDF بتحليل XML لـ XFA، ولا ينفذ محرك التخطيط الديناميكي لـ XFA، ولا يُجري FormCalc أو JavaScript داخل قالب XFA، ولا يتحقق من بنية القالب؛ يقوم المستدعي بتأليف XML لـ XFA بنفسه (عادةً عبر Adobe LiveCycle Designer أو يدويًا استنادًا إلى مواصفات XFA 3.3) ويقوم HotPDF بإصدار البايتات حرفيًا

 

تقوم أجهزة القراءة ذات محرك XFA (مثل Acrobat / Reader القديم، و FormsCentral، وبعض منتجات الأكشاك) بتقديم النموذج؛ بينما تعرض أجهزة القراءة التي لا تحتوي على محرك XFA (مثل Adobe Reader DC من عام 2017 فصاعدًا، ومعظم أجهزة القراءة مفتوحة المصدر) حقول AcroForm الاحتياق في حالة المستند عبارة عن سير عمل هجين من AcroForm + XFA

 

بوابات امتثال PDF/A و PDF/X

تمنع مواصفات ISO 19005-1 §6.4.2 / ISO 19005-2 §6.4.2 / ISO 19005-3 §6.4.2 صراحة نماذج XFA (محرك التخطيط الديناميكي غير قابل للأرشفة بشكل محدد)؛ وترفض سير عمل ما قبل النشر ISO 15930 النماذج التفاعلية بالكامل؛ وتثير AddXFAPacket استثناءً على الفور تحت أي إعداد غير فارغ لـ PDFACompliance أو PDFXCompliance مع مرجع المواصفات ذي الصلة؛ وتثير الأسماء المكررة للحزم استثناءات؛ كما تثير الأسماء الفارغة لـ PacketName أو بايتات XMLBytes الفارغة استثناءات؛ وتقوم RequirePDFVersion(pdf15) بترقية إصدار المستند تلقائيًا

 

إصدار قاموس AcroForm

يتم إصدار قاموس AcroForm عندما يحتوي إما /Fields على إدخال واحد على الأقل أو تم تسجيل حزمة XFA واحدة على الأقل؛ ويحتفظ المستدعون قبل الإصدار v2.119.51 الذين لا يسجلون أي حزم بمخرجات /AcroForm متطابقة البايت

 

سير العمل النموذجي (نموذج ديناميكي XFA خالص)

 

PDF.BeginDoc;

TemplateBytes := TFile.ReadAllBytes('form-template.xml');

DataBytes := TFile.ReadAllBytes('form-data.xml');

PDF.AddXFAPacket('xdp:xdp', BytesOf(''));

PDF.AddXFAPacket('template', TemplateBytes);

PDF.AddXFAPacket('datasets', DataBytes);

PDF.AddXFASignaturePacket(SigBytes); { caller-generated XAdES }

PDF.AddXFAPacket('/xdp:xdp', BytesOf(''));

PDF.EndDoc;

 

غلاف XDP، وتدفق فردي، و XFA ديناميكي وموقع

يجب أن يفتح نموذج مصفوفة /XFA ويغلق بحزم غلاف xdp:xdp، كما يوضح المثال الآن (ISO 32000-1 §12.7.8)؛ واجهات برمجة تطبيقات XFA ذات الصلة: تكتب SetXFADocument مستند XFA/XDP بأكمله كتدفق /XFA واحد، وهو متعارض تبادليًا مع AddXFAPacket؛ وتقوم XFANeedsRendering بتعيين علم الفهرس /NeedsRendering (ISO 32000-1 §7.7.2) حتى يقوم عارض بتجديد نموذج XFA ديناميكي عند الفتح الأول؛ وتدمج AddXFASignaturePacket توقيع XAdES / XML-DSig من إنشاء المستدعي كحزمة signature؛ ولا يقوم HotPDF أبدًا بإنشاء التوقيع أو تحليله - بل ينتجه المستدعي باستخدام مكتبة تشفير XML على مجموعات بيانات XFA

 

تسطيح XFA إلى AcroForm

يربط ApplyXFAAsAcroForm بايتات XDP/XFA التي يوفرها المستدعي بالصفحة الحالية كـ AcroForm widgets أصلية ورسوم صفحة بسيطة. ينفذ FlattenLoadedXFA التحويل نفسه لملف PDF محمل يحمل حزمة /XFA مضمّنة. مرر Editable=False لجعل widgets المولدة read-only، وافحص XFAFlattenWarnings للعناصر التي تعذر ربطها

 

انظر أيضًا: دعم AcroForm، THotPDF.RegisterAcroFormFont، THPDFPage.AddTextField