عرض نسخ XFA الديناميكي

الوحدة: HPDFXFAPresentation

TXFAInstancePresentation تمتلك TXFAWidgetRuntime مستقلًا وتضيف ملف عرض نسخ محدود السقف لمستندات XDP packet بسجل datasets واحد

استخدم SetPresence('row[1]', 'hidden') لإزالة نسخة من التدفق، وinvisible لحفظ مساحتها مع إخفاء widgetsها، وvisible لاستعادتها؛ والفهارس مواضع ذات أساس صفري بين نسخ البيانات، بما يشمل النسخ المخفية

محلل التخطيط يقيس كل نسخة منفردة ويضغط الإزاحات العمودية الناجية ويحجز الامتداد المتكرر كاملًا قبل وضع المحتوى اللاحق؛ والصفوف ذوات الارتفاع الثابت والمشتق من المحتوى وصفوف الجداول تدخل في إعادة التدفق

الهوية الثابتة والاستمرارية

معرّفات widgets تجمع هويات قالب وdatasets معتمة وتبقى ثابتة عند إخفاء أو إزالة صفوف سابقة وبعد الحفظ وإعادة التحميل وأثناء بقاء حقول بتركيز أو تعديلات معلقة

المساعد يخزن سمات هوية مؤهلة بـ namespace وتجاوزات نسخ في امتداد namespace أجنبي داخل packet النموذج مستخدمًا urn:hotpdf:xfa:instance-presentation:1; والصفوف المضافة حديثًا تتلقى هويات وافتراضيات قالب طازجة، والصفوف المُزالة لا يمكنها نقل تعديلات معلقة إلى صفوف بديلة

SaveToBytes تعيد XDP كاملًا، بما يشمل datasets المحدَّثة والهويات وحالات العرض؛ استخدم THotPDF.SetXFADocument لاستمرارها في PDF واضبط XFANeedsRendering := True عند كتابة نموذج ديناميكي

بعد إعادة تحميل PDF، اقتنِ XDP الكامل بـ THotPDF.CreateLoadedXFAWidgetRuntime.SaveToBytes ثم ابني TXFAInstancePresentation من تلك البايتات لاستعادة هذا الملف

امتداد namespace يُفسَّر بهذا المساعد؛ وHPDFXFAFlatten الأصلية ومصنع runtime المحمَّل الافتراضي وعارضو XFA الخارجيون لا يطبقون تلقائيًا تجاوزاته لكل نسخة، فالحفظ المستمر للملف لا يدّعي تصييرًا مطابقًا في قراء آخرين

الربط الصريح وعمليات النسخ

subforms المتكررة يمكنها الارتباط بمجموعة dataset باسم مختلف بـ <bind match="dataRef" ref="$record.lines.entry[*]"/>; وجذرا $record و$data المطلقان والمسارات النسبية يدعمان مجموعات والدين غير مفهرسة ومجموعة متكررة نهائية

الحقول داخل كل نسخة تستخدم محلل القيم المرتبطة الأصلي، بما يشمل ارتباطات حقول نسبية صريحة مثل ref="label"

AddInstance وRemoveInstance تحدّثان مجموعة البيانات المنتقاة وتفرضان الحد الأدنى والأقصى لـ occur وتطبقان حدود الإنشاء وتعيدان التدفق قبل النشر؛ والصف الجديد يتلقى قيم الحقول من القالب بدلًا من نسخ القيم المُدخلة من الصف السابق

المحددات تستخدم اسم قالب فريدًا مع فهرس نسخة اختياري مثل row[1]; وأسماء القوالب المكررة والمجموعات المفقودة والفهارس غير الصالحة والتحويلات تحت والد متكرر ملتبس ترفض المعاملة

SetAccess تدعم open وreadOnly وprotected وnonInteractive; وقيود النسخة يورثها الأحفاد وتمنع التحرير عبر runtime المملوك

الأحداث الشرطية

DispatchConditionalEvent تضبط حدث حقل مطابقًا بنوع محتوى JavaScript وتحل الملف المحدود السقف مباشرةً؛ وExecute تشغّل سكربت صريحًا مقابل widget ID قائم

if(this.rawValue=="hide"){
  row[1].presence="hidden";
}else{
  row[1].presence="visible";
}
row.instanceManager.addInstance();
row.instanceManager.removeInstance(0);

الشرطات تقبل مساواة أو عدمها بين this.rawValue وحرفية مقتبسة غير مهربة؛ وكتل if المتداخلة بالأقواس المعقوفة وelse الاختيارية محدودة السقف بـ MaxDepth

الإسنادات تدعم presence وaccess; وكل الفروع تُفحص صياغيًا بما يشمل الفروع غير المُتَّخذة، والعمليات غير المدعومة ترفض الدفعة كاملةً

this.rawValue تقرأ قيمة widget المُرسَلة؛ أرسل التعديلات المعلقة عبر Runtime.CommitEdit قبل إرسال حدث ينبغي أن يرصدها

Runtime.DispatchEvent الأصلية تحفظ سلوكها المحدود للعمليات الحرفية وترفض صياغة الشرطية ونسخ النسخ المفهرسة؛ وهذا المساعد لا يزوّد مفسّر JavaScript أو FormCalc عامًا ولا واجهات متصفح ولا وصول شبكة ولا إرسال دورة حياة XFA تلقائيًا

المعاملات والميزانيات

التحويلات تنفّذ عبر TXFAWidgetRuntime.UpdateDocument مع حسابات أصلية وreflow ثابت محدود السقف؛ والفشل يستعيد XDP المسلسل والتركيز والتعديلات المعلقة وحالة التحقق وعدّادات الحساب وrefflow وعدد التحذيرات

callbacks التركيز والتخطيط وإبطال widgets تنشر فقط بعد النجاح؛ وحل التراجع يكبح عمل المساعد المستنفد وفحوص الإلغاء مع حفظ التخطيط الأصلي وحدود widgets كي لا يمنع الإلغاء الاستعادة

هيّئ TXFAPresentationOptions بـ Default; والافتراضيات 200000 عملية و4096 حالة عرض و10000 نسخة منشأة لكل مجموعة و32 MiB غلاف إدخال ومستند و65536 بايت سكربت و32 مستوى تداخل شرطي و5000 مللي ثانية

MaxInputBytes تحدد سقفًا أيضًا لغلاف XML متحفظ مهربًا قبل كل جولة تخطيط ونشر، بما يشمل سمات الهوية وإعلانات namespace والنص وتغييرات datasets؛ وXML صالح يمكن أن يبلغ ذلك الحد المتحفظ قبل أن يبلغ عدد بايتاته المسلسلة القيمة نفسها

Cancelled callback أسلوب كائن اختياري تُفحص أثناء العمل المحدود السقف؛ وخيارات Runtime المضمّنة تواصل تحديد سقوف widgets والقيم والحسابات والتخطيط وreflow وعمل السكربت الأصلي

تصبغ host والوصولية

Accessibility تعيد سجلات widgets مرئية بمعرّف ثابت ودور وcaption أو اسم حقل ووصف tooltip وقيمة مُرسَلة وصفحة وحدود وتركيز وصلاحية وحالتَي قراءة فقط وإلزام وتسميات اختيار؛ وقيم كلمة السر محذوفة

PaintPage تسلّم snapshot ل widgets المرئية وسجلات الوصولية المقابلة إلى TXFAHostWidgetPainter; وhosts مخصصة يمكنها تنفيذ عناصر تحكم أو سطح تصيير خاص بها

TXFACanvasWidgetPainter تزوّد تصبغًا فعليًا بـ VCL وLCL canvas لحدود widgets والنص وإخفاء كلمة السر وعلامات checkbox وradio ومؤشرات الاختيار والأزرار والتركيز، بمقياس موجب وإزاحات اختيارية؛ وهي تقص كل widget وتستعيد أنماط الـ canvas

محوّل الـ canvas يصبغ widgets ولا يصبغ شجرة رسومات XFA الساكنة كاملةً؛ والـ host يزوّد خلفية صفحته ورسوماته الساكنة وتوجيه أحداثه وعرض انتقائه وجسر وصوليته إلى منصته

بيئة التشغيل والمساعد كائنات أحادية الخيط؛ وعلى الـ callbacks اتباع ملكية خيوط الـ host وتجنب التحويلات التكرارية أثناء معاملة نشطة

استدعاء C++Builder يجب أن يزوّد كل وسائط مُنشئ مصبّغ الـ canvas مثل new TXFACanvasWidgetPainter(canvas, 1, 0, 0); والرؤوس المولَّدة لا تحفظ تلك الوسائط الافتراضية العائمة

التحقق

القبول يغطي 106 حالات Delphi لكل معمارية وترجمة FPC طازجة على كلتا معماريتي Windows وترجمة رؤوس عامة C++Builder على Win32 وWin64x وتحققًا مستقلًا لمخرج PDF/XDP الفعلي

Tests/Fixtures/XFAInstancePresentation/explicit-invoice.xdp تحتوي أسماء بيانات مستقلة وثلاثة أسطر فوترة متكررة وحدثًا شرطيًا وmetadata للوصولية وتذييلًا لاحقًا

Run-XFAInstancePresentationTests.ps1 تشغّل فحوص المساعد ومصادفات التراجع القائمة لـ XFA للأحداث وruntime والبرمجة وSOM وDOM والحل دون GUI أو قراء PDF خارجيين

verify_saved_invoice.py المستقلة تقرأ PDF المولَّد بـ pypdf وتفحص صفوف بيانات XDP الحقيقية والهويات الدائمة الفريدة وحالة النسخة المخفية والافتراضيات المهيأة وهويَات إعادة التحميل

powershell -File Tests/Delphi/Run-XFAInstancePresentationTests.ps1 -Platform Win32 -CheckCppHeaders
powershell -File Tests/Delphi/Run-XFAInstancePresentationTests.ps1 -Platform Win64 -CheckCppHeaders
python Tests/Fixtures/XFAInstancePresentation/verify_saved_invoice.py

انظر بيئة تشغيل widgets XFA التفاعلية لبيئة التشغيل الأساسية المتوافقة وعقد التحرير الأصلي