|
أساليب حقول النماذج المحمّلة في 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');
ملاحظة
|