طريقة THotPDF.AddLoadedSignedSignatureField
يضيف حقل توقيع جاهزًا للتوقيع إلى مستند محمَّل. يحمل الحقل قاموس توقيع مع مساحة محجوزة لـ /ByteRange و/Contents، بحيث يستطيع SignPDFWithPFX وPreparePDFForSigning وInsertSignatureHex توقيعه بمجرد حفظ المستند. وبالتزامن مع BeginIncrementalUpdate تصبح هذه هي الطريقة التي يحصل بها ملف PDF موقَّع مسبقًا على توقيع ثانٍ
التصريح
function AddLoadedSignedSignatureField(PageIndex: Integer; X1, Y1, X2, Y2: Single;
const AFieldName: AnsiString; ContentsBytes: Integer = 8192;
const SubFilter: AnsiString = 'adbe.pkcs7.detached';
const Reason: AnsiString = ''; const Location: AnsiString = '';
const ContactName: AnsiString = ''): Integer;
الوحدة
HPDFDoc
المعاملات
| الاسم | الغرض |
|---|---|
PageIndex | فهرس مبني على الصفر للصفحة المحمَّلة التي تعرض ودجة التوقيع |
X1, Y1, X2, Y2 | مستطيل الودجة في فضاء المستخدم لـ PDF (بالنقاط، والمصدر عند أسفل اليسار)؛ يجب أن يكون العرض والارتفاع موجبين |
AFieldName | اسم حقل التوقيع الجديد؛ يجب ألا يكون فارغًا وألا يكون موجودًا مسبقًا في المستند |
ContentsBytes | البايتات المحجوزة لتوقيع CMS (تُكتب بضعف عدد الخانات الست عشرية)؛ يجب أن تتسع للتوقيع الكامل بما في ذلك الشهادات وأي رمز طابع زمني |
SubFilter | صيغة التوقيع، مثل adbe.pkcs7.detached أو ETSI.CAdES.detached |
Reason, Location, ContactName | مدخلات /Reason و/Location و/ContactInfo الاختيارية في قاموس التوقيع |
قيمة الإرجاع
تُعيد فهرس حقل النموذج الجديد، أو -1 عندما يكون PageIndex خارج النطاق
ملاحظات الاستخدام
- لا توجد صفحة حالية بعد
BeginIncrementalUpdateأوLoadFromFile، لذا استخدم هذه الطريقة بدلًا منTHPDFPage.AddSignedSignatureFieldالمخصصة للمستندات المنشأة بـBeginDoc - في النمط التزايدي يُلحَق الحقل وقاموس توقيعه وAcroForm المحدَّث ومدخلات الصفحة
/Annotsكمراجعة جديدة. لا تتغير البايتات التي تغطيها التوقيعات السابقة، فتبقى تلك التوقيعات صالحة، ويغطي التوقيع الجديد الملف كاملًا - يحصل AcroForm على
/SigFlags 3(توجد توقيعات، وإلحاق فقط). وعلى خلاف باقي طرق الحقولAddLoaded*، لا يضيف/NeedAppearancesالتي من شأنها أن تطلب من العارضين إعادة كتابة مستند موقَّع - وقِّع الملف المحفوظ بـ
SignPDFWithPFX. مع الموقِّع الخارجي أو HSM، اقرأ الملف فيAnsiString، واستدعِPreparePDFForSigningللحصول على نطاقَي البايتات المراد تلخيصهما، ثم ابنِ CMS فوقهما واكتب تمثيله الست عشري عبرInsertSignatureHex - استخدم AddLoadedSignatureField لحقل فارغ يوقّعه عارض أو أداة أخرى لاحقًا
مثال
PDF := THotPDF.Create(nil);
try
PDF.BeginIncrementalUpdate('Signed.pdf');
PDF.AddLoadedSignedSignatureField(0, 300, 120, 500, 160, 'Approver', 8192,
'adbe.pkcs7.detached', 'Approved');
PDF.SaveIncrementalUpdate('Prepared.pdf');
finally
PDF.Free;
end;
// Signs the reserved field; the first signature stays valid
THotPDF.SignPDFWithPFX('Prepared.pdf', 'SignedTwice.pdf', 'Signer.pfx', 'password');