TPDFlibSignDoc

Security and Signatures

الوصف

توفر TPDFlibSignDoc وصولًا مباشرًا إلى حقول التوقيع في المستند دون تحميل PDF كاملًا في الذاكرة

تفتح الفئة ملفًا أو تدفقًا يملكه المستدعي أو سلسلة بايتات ANSI، وتعدّد حقول توقيع AcroForm، وتقرأ القيم الخام لتوقيع قائم ليتمكن المدقق من إعادة حساب خلاصة /ByteRange

وتؤدي كذلك جانب الكتابة من التحديثات التزايدية: Append يبدأ إصدارًا جديدًا، وAddSignatureField يسجّل حقلًا جديدًا، وتكتب عائلة SetSignatureValue في المساحة المحجوزة مع إبقاء الإصدارات السابقة سليمة

يقود العرض التوضيحي SigningWorkbench هذه الفئة من طرف إلى طرف، من تعداد الحقول إلى فحص ByteRange واستخراج الشهادة

الصيغة

Delphi

TPDFlibSignDoc = Class
  Public
    Destructor Destroy; Override;
    Function Open(Const FileName: WideString; Const Password: WideString; ReadWrite: Boolean): Boolean;
    Function OpenStream(SourceStream: TStream; Const Password: WideString): Boolean;
    Function OpenString(Const SourceData: AnsiString; Const Password: WideString): Boolean;
    Procedure Append;
    Function AppendToFile(Const FileName: WideString): Boolean;
    Function AppendToStream(TargetStream: TStream): Boolean;
    Procedure Close;
    Function AddSignatureField(Const FieldName: WideString; PageNumber: Integer): Integer;
    Function HasSignatureField(Const FieldName: WideString): Boolean;
    Procedure GetSignatureFieldNames(Names: TStrings);
    Function GetSignatureValueObjNum(Const FieldName: WideString): Integer;
    Function GetSignatureValueByName(Const FieldName: WideString; ValueKey: Integer): AnsiString;
    Function GetSignatureTextValueByName(Const FieldName: WideString; ValueKey: Integer): WideString;
    Function GetSignatureDocMDPLevelByName(Const FieldName: WideString): Integer;
    Function GetSignaturePermissionInfoByName(Const FieldName: WideString;
      Out Report: TPDFlibSignaturePermissionReport): Boolean;
    Function GetSignatureSeedValueEx(Const FieldName: WideString;
      Out SeedValue: TPDFSignatureSeedValue): Boolean;
    Function GetSignatureContentsHashHexByName(Const FieldName: WideString): AnsiString;
    Function SetSignatureValue(Const FieldName: WideString; Const NewValue: AnsiString;
      DocMDPLevel: Integer): Boolean;
    Function SetSignatureFieldLock(Const FieldName: WideString;
      Const Action: AnsiString; Const Fields: TArray): Boolean;
    Procedure SetSignatureImage(Const FieldName: WideString; Const ImageData: AnsiString; ImageOptions: Integer);
    Procedure SetSignatureAppearanceText(Const FieldName, Text: WideString; FontSize, FontRed, FontGreen, FontBlue: Double);
    Procedure SetSignatureBounds(Const FieldName: WideString; Left, Top, Width, Height: Double);
    Function GetDocumentBytes: TBytes;
    Function GetDocumentSize: Int64;
    Function ReadDocumentRange(Offset: Int64; Buffer: Pointer; Count: Integer): Integer;
    Function GetDSSValidationMaterial(Const FieldName: WideString;
      Out Certs, CRLs, OCSPs: TStructStrArray; Out UsedVRI: Boolean): Boolean;
    Procedure SetSignatureFlags(NewFlags: Integer);
    Procedure EnsurePAdESExtensions(ESICLevel: Integer);
    Property IsOpen: Boolean Read FIsOpen;
    Property SignatureFieldPosition: Int64 Read FSignatureFieldPosition;
    Property SignatureFieldLength: Integer Read FSignatureFieldLength;
  End;

الطرق

Open, OpenStream, OpenStringتفتح ملفًا أو تدفقًا أو سلسلة ANSI في الذاكرة، واختياريًا للقراءة والكتابة؛ تقبل Open كلمة مرور وعَلما للقراءة-الكتابة
Append, AppendToFile, AppendToStreamتبدأ إصدارًا تزايديًا جديدًا في المكان، أو تُلحق الإصدار بملف أو تدفق جديد
Closeتحرّر القارئ الذكي الأساسي ومقابض المستند
AddSignatureFieldتسجّل حقل توقيع جديدًا في الصفحة المعطاة وتُعيد رقم كائنه، أو 0 عند الفشل
HasSignatureFieldTrue عندما يوجد حقل توقيع بالاسم المؤهل الكامل
GetSignatureFieldNamesتملأ TStrings بكل أسماء حقول التوقيع في AcroForm
GetSignatureValueObjNumرقم كائن قاموس قيمة التوقيع، أو 0 إذا كان الحقل غير موقّع
GetSignatureValueByNameقيم ثنائية خام يختارها ValueKey: 0 = /Contents، 1 = /Cert، 2 = /Filter، 3 = /SubFilter، ومن 11 إلى 14 مدخلات /ByteRange من 0 إلى 3 كسلاسل عشرية
GetSignatureTextValueByNameقيم نصية يختارها ValueKey: 0 = /M، 1 = /Name، 2 = /Reason، 3 = /Location، 4 = /ContactInfo، 5 = /Type
GetSignatureDocMDPLevelByNameمستوى تحويل DocMDP (قيمة P) لتوقيع مصادق، 0 عند الغياب
GetSignaturePermissionInfoByNameتُحلّل قيود DocMDP وFieldMDP للتوقيع في سجل تقرير
GetSignatureSeedValueExتقرأ قاموس القيمة البذرية /SV الذي يقيّد ما يمكن للواقِع كتابته في الحقل
GetSignatureContentsHashHexByNameخلاصة سداسية عشرية للمحتوى الموقّع الذي يغطيه ByteRange
SetSignatureValueتكتب توقيعًا مكتملًا في مساحة /Contents المحجوزة وتسجّل مستوى DocMDP
SetSignatureFieldLockتكتب قاموس قفل حقل بإجراء وقائمة أسماء حقول
SetSignatureImage, SetSignatureAppearanceText, SetSignatureBoundsتتحكم في المظهر المرئي: صورة مرسومة، وتيار مظهر نصي بحت بُني في v3.221.0، وحدود حقل صريحة
GetDocumentBytes, GetDocumentSize, ReadDocumentRangeوصول خام إلى البايتات الأساسية لتجزئة الملف كله أو مقطع ByteRange خارجيًا
GetDSSValidationMaterialتُعيد شهادات DSS وقوائم CRL وردود OCSP لحقل معيّن وتُبلّغ عما إذا استُخدمت أدلة VRI
SetSignatureFlags, EnsurePAdESExtensionsتضبط /SigFlags وتضيف مخطط امتداد ETSI PAdES

المعاملات

IsOpenTrue بين فتح ناجح وClose
SignatureFieldPositionإزاحة محتوى حقل التوقيع المحدد في الملف
SignatureFieldLengthطول البايتات المحجوز لمحتويات التوقيع المحدد

ملاحظات

يتجسد الملف كله عبر GetDocumentBytes لأن مقطعي ByteRange يغطيان معًا الملف بأكمله تقريبًا

وللتوقيع دون لمس هذه الواجهة منخفضة المستوى، تعرض الواجهة الرابطة الخط المكافئ عبر دوال SignProcess الموثقة

انظر أيضًا

TPDFlibSignatureVerifier, TPDFlibPFXFile, TPDFlibSigner, NewSignProcessFromFile, GetSignProcessByteRange