أساليب حقول النماذج المحمّلة في THotPDF

ملاحظة

function GetLoadedAcroForm: THPDFDictionaryObject;
function HasFormFields: Boolean;
function FormFieldExists(const FieldName: AnsiString): Boolean;
function GetFormFieldCount: Integer;
function GetFormFieldName(FieldIndex: Integer): AnsiString;
function GetFormFieldValue(FieldIndex: Integer): AnsiString; overload;
function GetFormFieldValue(const FieldName: AnsiString): AnsiString; overload;
function GetFormFieldType(FieldIndex: Integer): THPDFLoadedFormFieldType; overload;
function GetFormFieldType(const FieldName: AnsiString): THPDFLoadedFormFieldType; overload;
function GetFormFieldDescription(FieldIndex: Integer): AnsiString; overload;
function GetFormFieldDescription(const FieldName: AnsiString): AnsiString; overload;
function GetFormFieldOptionCount(FieldIndex: Integer): Integer; overload;
function GetFormFieldOptionCount(const FieldName: AnsiString): Integer; overload;
function GetFormFieldOptionValue(FieldIndex, OptionIndex: Integer): AnsiString; overload;
function GetFormFieldOptionValue(const FieldName: AnsiString; OptionIndex: Integer): AnsiString; overload;
function GetLoadedFormFieldWidgetPageIndex(FieldIndex,
  WidgetIndex: Integer): Integer;
function GetLoadedFormFieldIndexForAnnotation(PageIndex,
  AnnotationIndex: Integer; out WidgetIndex: Integer): Integer;
procedure InvalidateLoadedFormRelationshipCache;
function GetLoadedFormRelationshipCacheStatistics(
  out Statistics: THPDFFormRelationshipCacheStatistics): Boolean;
function IsFormFieldReadOnly(FieldIndex: Integer): Boolean; overload;
function IsFormFieldReadOnly(const FieldName: AnsiString): Boolean; overload;
procedure SetFormFieldValue(FieldIndex: Integer; const Value: AnsiString); overload;
procedure SetFormFieldValue(const FieldName, Value: AnsiString); overload;
procedure SetFormFieldReadOnly(FieldIndex: Integer; ReadOnly: Boolean); overload;
procedure SetFormFieldReadOnly(const FieldName: AnsiString; ReadOnly: Boolean); overload;
procedure RenameFormField(FieldIndex: Integer; const NewName: AnsiString); overload;
procedure RenameFormField(const FieldName, NewName: AnsiString); overload;
procedure RemoveFormField(FieldIndex: Integer); overload;
procedure RemoveFormField(const FieldName: AnsiString); overload;
function RecalculateLoadedFormFields: Integer;
function FlattenLoadedFormFields(const FieldNames: array of AnsiString;
  EnforceSignaturePermissions: Boolean = True): Integer;
function FlattenFormFields: Integer;
procedure SaveLoadedDocument(const TargetFile: TFileName);

ملاحظة

تفحص هذه الطرق وتحدّث حقول AcroForm الموجودة مسبقًا في ملف PDF محمّل بواسطة LoadFromFile أو BeginIncrementalUpdate. وهي تدعم الحقول النصية (/FT /Tx)، وحقول الأزرار (/FT /Btn)، وحقول الاختيار (/FT /Ch)، وحقول التوقيع (/FT /Sig)، وأنواع الحقول غير المعروفة

تُعيد GetLoadedAcroForm قاموس /AcroForm المحمّل بعد حلّه، للمستدعين الذين يحتاجون إلى فحص مباشر للقاموس قبل استخدام طرق الحقول عالية المستوى

تُبلغ HasFormFields عمّا إذا كان ملف PDF المحمّل أو المستند الجاري إنشاؤه حاليًا يحتوي على حقول AcroForm. وتتحقق FormFieldExists من شجرة حقول محمّلة أو قائمة حقول التأليف حسب اسم الحقل دون إطلاق استثناء عند غياب الحقل

تقرأ GetFormFieldDescription اسم الحقل البديل /TU للحقل المحمّل، الذي تستخدمه عارضات PDF عادةً كتلميح للحقل. وتُعيد سلسلة نصية فارغة عندما لا يكون للحقل وصف

تقرأ GetFormFieldOptionCount و GetFormFieldOptionValue مصفوفة /Opt الخاصة بحقول الاختيار المحمّلة. تُعاد الإدخالات النصية البسيطة مباشرة؛ بينما تُعيد مصفوفات الخيارات ثنائية العناصر قيمة التصدير الأولى

تقرأ IsFormFieldReadOnly البت رقم 1 من علامة /Ff الخاصة بالحقل المحمّل. وتحدّث RenameFormField الاسم المحلي /T للحقل المحمّل، وترفض الأسماء المؤهَّلة بالكامل المكرَّرة ضمن شجرة النموذج المحمّلة نفسها

تُخطِّط ذاكرة التخزين المؤقت لعلاقات النموذج المحمّل الحقول، والأسماء المؤهَّلة، والأدوات، والتعليقات التوضيحية، والصفحات في كلا الاتجاهين بعد بناء خطي كسول واحد. وتحافظ عليها طرق التعديل عالية المستوى أو تُبطلها تلقائيًا. استدعِ InvalidateLoadedFormRelationshipCache بعد تعديلات تغيّر العلاقات تتم عبر واجهات الكائنات الخام

تزور RecalculateLoadedFormFields مصفوفة /AcroForm /CO المحمّلة بترتيب المستند، وتقيّم عمليات AFSimple_Calculate المحدودة SUM، وAVG، وPRD، وMIN، و MAX. وتحصل القيم المحدَّثة على مظاهر مُعاد توليدها

تحذف RemoveFormField حقل نموذج محمّلًا من شجرة حقول AcroForm، وتُزيل تعليقات الأدوات التوضيحية المطابقة من صفحاته. وترسم FlattenLoadedFormFields الحقول المسمّاة فقط كمحتوى ثابت في صفحاتها المالكة، وتُزيل تعليقات أدواتها التوضيحية، وتحافظ على الحقول والصفحات غير المتأثرة. تختار مصفوفة أسماء فارغة كل الحقول. وترفض بوابة الصلاحيات الافتراضية أي تغيير هيكلي تحظره توقيعات DocMDP أو FieldMDP

تحتفظ FlattenFormFields بعقد الراحة الخاص بكل الحقول، وتُفوِّض المستندات المحمّلة إلى نفس المسار المحلي للصفحة المدرك للتوقيعات. وتُعيد عدد الحقول التي تم تسطيحها، أو صفرًا عند عدم وجود حقول نموذج مطابقة

استخدم SaveLoadedDocument لكتابة نسخة محفوظة بالكامل من الرسم البياني للكائنات المحمّلة بعد تعديلات مباشرة على الحقول أما بالنسبة لتدفقات العمل ذات الإلحاق فقط مثل ملفات PDF الموقَّعة، فحمِّل باستخدام BeginIncrementalUpdate، وعدِّل الحقول، ثم استدعِ SaveIncrementalUpdate

ملاحظة

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

for I := 0 to PDF.GetFormFieldOptionCount('Plan') - 1 do
  Writeln('Plan option ', I, ': ', PDF.GetFormFieldOptionValue('Plan', I));

Writeln('Customer description: ', PDF.GetFormFieldDescription('CustomerName'));
PDF.SetFormFieldValue('CustomerName', 'Bob');
PDF.SetFormFieldReadOnly('CustomerName', True);
PDF.RenameFormField('CustomerName', 'ClientName');
PDF.RemoveFormField('Approved');
PDF.RecalculateLoadedFormFields;
PDF.SaveLoadedDocument('UpdatedForm.pdf');
PDF.LoadFromFile('UpdatedForm.pdf');
if PDF.HasFormFields then
  Writeln('Plan exists: ', PDF.FormFieldExists('Plan'));
FlattenedCount := PDF.FlattenFormFields;
PDF.SaveLoadedDocument('FlattenedForm.pdf');
PDF.BeginIncrementalUpdate('SignedForm.pdf');
FlattenedCount := PDF.FlattenLoadedFormFields(['CalculatedTotal']);
PDF.SaveIncrementalUpdate('SignedForm-flattened.pdf');

ملاحظة