AcroForm Support

نظرة عامة

منذ HotPDF v2.5.0 تستطيع المكتبة إصدار نماذج تفاعلية (AcroForm) وفق PDF 1.7 ISO 32000-1 section 12.7. ينشأ كل حقل نموذج كتعليق Widget مدمج مع قاموس الحقل، ويسجل تلقائيًا في المستند بحيث تضاف خانة /AcroForm العامة إلى Catalog عند إنهاء المستند في EndDoc

أنواع الحقول المدعومة

  • Text fields (/FT /Tx) via THPDFPage.AddTextField. Supports single-line, multi-line, password, comb, file-select, rich-text, scroll and spell-check options through THPDFFormFieldFlags.
  • Check boxes (/FT /Btn, no Pushbutton/Radio bits) via THPDFPage.AddCheckBox with a configurable export value name and initial checked state.
  • أزرار radio (/FT /Btn /Ff Radio) عبر THPDFPage.AddRadioButton. تدمج الاستدعاءات المتعددة ذات اسم المجموعة نفسه تحت حقل أب مشترك مع مصفوفة /Kids كما تتطلب 12.7.4.2 تمامًا
  • Combo boxes (/FT /Ch /Ff Combo) via THPDFPage.AddComboBox. Pass an open array of options.
  • List boxes (/FT /Ch) via THPDFPage.AddListBox. ffMultiSelect enables multi-select.
  • أزرار push (/FT /Btn /Ff Pushbutton) عبر THPDFPage.AddPushButton مع caption اختياري (/MK /CA). منذ HotPDF v2.31.0 يرفق THPDFPage.AddPushButtonWithAction قاموس action للـ widget بحيث يؤدي النقر إلى /SubmitForm أو /ResetForm أو /JavaScript أو /URI
  • حقول موضع التوقيع (/FT /Sig) عبر THPDFPage.AddSignatureField منذ HotPDF v2.12.0. يكتسب قاموس AcroForm تلقائيًا /SigFlags 3 عند وجود حقل توقيع واحد على الأقل. يترك الحقل بلا توقيع حتى تستطيع أدوات خارجية مثل Adobe Acrobat وFoxit ومكتبات CMS / PKCS#7 إرفاق التوقيع التشفيري بعد حفظ الملف
  • مسار توقيع في المكان عبر THPDFPage.AddSignedSignatureField + THotPDF.PreparePDFForSigning + THotPDF.InsertSignatureHex منذ HotPDF v2.23.0. يحجز الاستدعاء الأول قاموس توقيع /V مع مواضع /ByteRange و/Contents. بعد حفظ المستند يستدعي التطبيق المضيف PreparePDFForSigning لتصحيح /ByteRange ومعرفة نطاقات الملف المطلوب hash لها. وبعد إنشاء توقيع CMS / PKCS#7 detached خارجيًا باستخدام Windows CryptoAPI أو OpenSSL أو مكتبات توقيع متخصصة، يستدعي InsertSignatureHex لوضع hex التوقيع في الموضع المحجوز من دون تغيير أي بايت آخر في الملف

Loaded form-field inspection and updates

منذ HotPDF v2.121.9 تستطيع التطبيقات تحميل PDF AcroForm موجود عبر THotPDF.LoadFromFile، وتعداد حقوله، وقراءة أسمائها وأنواعها وقيمها، وتغيير قيم الحقول، وتبديل علم read-only، وحفظ مخطط الكائنات المحمل عبر THotPDF.SaveLoadedDocument. هذا المسار مخصص للتعديلات المحفوظة على مستند محمل مسبقًا؛ لا تستدع BeginDoc / EndDoc لمجرد حفظ تغييرات قيم الحقول المحملة

مساعدات الحقول هي GetFormFieldCount وGetFormFieldName وGetFormFieldType وGetFormFieldValue وSetFormFieldValue وSetFormFieldReadOnly. يقبل البحث عن الحقل إما فهرس حقل صفريًا أو الاسم الكامل المؤهل للحقل. قيم THPDFLoadedFormFieldType المعادة هي lfftText أو lfftButton أو lfftChoice أو lfftSignature أو lfftUnknown

Loaded-field Pascal example

HPDF.LoadFromFile('InputForm.pdf');
for I := 0 to HPDF.GetFormFieldCount - 1 do
  Writeln(HPDF.GetFormFieldName(I), ' = ', HPDF.GetFormFieldValue(I));

HPDF.SetFormFieldValue('CustomerName', 'Bob');
HPDF.SetFormFieldValue('Plan', 'Premium');
HPDF.SetFormFieldReadOnly('CustomerName', True);
HPDF.SaveLoadedDocument('UpdatedForm.pdf');

إجراءات إضافية للحقول

تضيف AttachFieldKeyStrokeAction وAttachFieldFormatAction وAttachFieldValidateAction وAttachFieldCalculateAction JavaScript إلى قاموس /AA الخاص بالحقل لمشغلات PDF /K و/F و/V و/C. استخدمها بعد إنشاء الحقل أو تحميله عندما يجب أن تبقى التصفية أو التنسيق أو التحقق أو الحساب مع الحقل.

Appearance generation

افتراضيًا يعيّن قاموس /AcroForm الصادر /NeedAppearances إلى true ويفوض عرض appearance-stream إلى العارض المستهلك. اضبط THotPDF.AutoFormAppearances على true قبل إضافة الحقول، وسيبني HotPDF مسبقًا /AP /N Form XObjects لكل حقل نص، وزر ضغط، وخيار combo / list، وحالات Yes / Off لكل checkbox / radio kid. عندها يحمل قاموس AcroForm ‏/NeedAppearances false وخانة /DR default resources تشير إلى الخطوط الأساسية القياسية 14، مثل Helv Helvetica وZaDb ZapfDingbats، حتى ترسم العارضات التي تتجاهل /NeedAppearances محتوى الحقل بشكل صحيح. متاح منذ HotPDF v2.28.0

Field flag reference (THPDFFormFieldFlags)

  • ffReadOnly, ffRequired, ffNoExport — common Table 227 flags applicable to every field type.
  • ffMultiline, ffPassword, ffFileSelect, ffDoNotSpellCheck, ffDoNotScroll, ffComb, ffRichText — Tx-specific (Table 228).
  • ffEdit, ffSort, ffMultiSelect, ffDoNotSpellCheck, ffCommitOnSelChange — Ch-specific (Table 230).

Pascal example

HPDF.BeginDoc;
HPDF.AddPage;
HPDF.CurrentPage.AddTextField('Name', '', Rect(50, 100, 250, 120));
HPDF.CurrentPage.AddCheckBox('Agree', 'Yes', Rect(50, 130, 70, 145), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Red',   Rect(50, 160, 70, 175), True);
HPDF.CurrentPage.AddRadioButton('Color', 'Green', Rect(80, 160, 100, 175));
HPDF.CurrentPage.AddRadioButton('Color', 'Blue',  Rect(110, 160, 130, 175));
HPDF.CurrentPage.AddComboBox('Country', 'CN',
                             ['CN', 'US', 'JP'], Rect(50, 190, 250, 210));
HPDF.EndDoc;

Limitations

  • يرتب مولد AutoFormAppearances حاليًا القيم القابلة للترميز ASCII / WinAnsi فقط؛ أما الحقول التي يحتوي /V فيها نصًا متعدد البايتات (UTF-8)، فيعرض /AP المخزن مستطيلًا فارغًا حتى يعيد العارض المضيف توليد المظهر
  • لا يتم توليد حالتي Down (/D) وrollover (/R) الفرعيتين؛ ينتج فقط الوضع العادي (/N)
  • Field name uniqueness is the caller's responsibility; HotPDF does not enforce it.

انظر أيضا