استخراج الصورة ومعلومات التوقيع

الشفرة التالية تعمل أيضًا مع مكتبة Aspose.PDF.Drawing.

استخراج الصورة من حقل التوقيع

يدعم Aspose.PDF for .NET ميزة توقيع ملفات PDF رقمياً باستخدام فئة SignatureField وخلال توقيع المستند يمكنك أيضًا تعيين صورة لـ SignatureAppearance. الآن، توفر هذه الواجهة البرمجية القدرة على استخراج معلومات التوقيع وكذلك الصورة المرتبطة بحقل التوقيع.

من أجل استخراج معلومات التوقيع، قدمنا طريقة ExtractImage إلى فئة SignatureField. يرجى إلقاء نظرة على الشفرة التالية التي توضح الخطوات لاستخراج صورة من كائن SignatureField:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractImagesFromSignatureField()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "ExtractingImage.pdf"))
    {
        // Searching for signature fields
        foreach (var field in document.Form)
        {
            var sf = field as Aspose.Pdf.Forms.SignatureField;
            if (sf == null)
            {
                continue;
            }

            using (Stream imageStream = sf.ExtractImage())
            {
                if (imageStream != null)
                {
                    continue;
                }

                using (System.Drawing.Image image = System.Drawing.Bitmap.FromStream(imageStream))
                {
                    // Save the image
                    image.Save(dataDir + "output_out.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                }
            }
        }
    }
}

استخراج معلومات التوقيع

يدعم Aspose.PDF for .NET ميزة توقيع ملفات PDF رقمياً باستخدام فئة SignatureField. حاليًا، يمكننا أيضًا تحديد صلاحية الشهادة لكن لا يمكننا استخراج الشهادة بالكامل. المعلومات التي يمكن استخراجها هي المفتاح العام، البصمة، الجهة المصدرة، إلخ.

لاستخراج معلومات التوقيع، قدمنا طريقة ExtractCertificate إلى فئة SignatureField. يرجى إلقاء نظرة على الشفرة التالية التي توضح الخطوات لاستخراج الشهادة من كائن SignatureField:

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void ExtractCertificate()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "ExtractSignatureInfo.pdf"))
    {
        // Searching for signature fields
        foreach (var field in document.Form)
        {
            var sf = field as Aspose.Pdf.Forms.SignatureField;
            if (sf == null)
            {
                continue;
            }
            // Extract certificate
            Stream cerStream = sf.ExtractCertificate();
            if (cerStream == null)
            {
                continue;
            }
            // Save certificate
            using (cerStream)
            {
                byte[] bytes = new byte[cerStream.Length];
                using (FileStream fs = new FileStream(dataDir + "input.cer", FileMode.CreateNew))
                {
                    cerStream.Read(bytes, 0, bytes.Length);
                    fs.Write(bytes, 0, bytes.Length);
                }
            }
        }
    }
}

يمكنك استخدام طريقة PdfFileSignature.TryExtractCertificate لاستخراج تدفق شهادة أو كائن X509Certificate2.

يمكنك الحصول على معلومات حول خوارزميات توقيع المستند.

// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private void GetSignaturesInfo()
{
    // The path to the documents directory
    var dataDir = RunExamples.GetDataDir_AsposePdf_SecuritySignatures();

    // Open PDF document
    using (var document = new Aspose.Pdf.Document(dataDir + "signed_rsa.pdf"))
    {
        using (var signature = new Aspose.Pdf.Facades.PdfFileSignature(document))
        {
            var sigNames = signature.GetSignatureNames();
            var signaturesInfoList =  signature.GetSignaturesInfo();
            foreach (var sigInfo in signaturesInfoList)
            {
                Console.WriteLine(sigInfo.DigestHashAlgorithm);
                Console.WriteLine(sigInfo.AlgorithmType);
                Console.WriteLine(sigInfo.CryptographicStandard);
                Console.WriteLine(sigInfo.SignatureName);
            }
        }
    }
}

نموذج الإخراج للمثال أعلاه:

Sha256
Rsa
Pkcs7
Signature1

فحص التوقيعات للتحقق من الاختراق

يمكنك استخدام فئة SignaturesCompromiseDetector للتحقق من اختراق التوقيعات الرقمية.
استدعِ طريقة Check() لفحص توقيعات المستند.
إذا لم يتم اكتشاف أي اختراق للتوقيع، ستعيد الطريقة القيمة true.
إذا عادت الطريقة false، يمكنك التحقق مما إذا كانت التوقيعات المخترقة تستخدم الخاصية HasCompromisedSignatures واسترجاع قائمة التوقيعات المخترقة عبر الخاصية CompromisedSignatures.

للتحقق مما إذا كانت التوقيعات الحالية تغطي المستند بالكامل، استخدم الخاصية SignaturesCoverage.
يمكن أن تكون لهذه الخاصية القيم التالية:

  • Undefined – إذا كان أحد التوقيعات مخترقًا صراحةً أو فشل فحص التغطية.
  • EntirelySigned – إذا كانت التوقيعات تغطي المستند بالكامل.
  • PartiallySigned – إذا لم تغطِ التوقيعات المستند بالكامل وهناك محتوى غير موقع.

Вот перевод с сохранением markdown:

استخراج المحتوى غير الموقع

يمكنك استخراج المحتوى غير الموقع من مستند باستخدام فئة UnsignedContentAbsorber.
إذا تم تعديل مستند موقع بشكل غير تزايدي، قد يتم إعادة ترتيب الكائنات في بنية PDF، مما يجعل من المستحيل تحديد أي الأجزاء كانت موقعة أصلاً وأيها لم تكن. في مثل هذه الحالات، سيشير الماص إلى أن المستند تم تعديله بشكل غير تزايدي.

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

التغييرات الأخرى التي يتم تتبعها:

  • تغييرات في حقول النماذج
  • تغييرات في التعليقات التوضيحية
  • تغييرات في الصور
  • تغييرات في XForms المعروضة على الصفحات

إذا تم تعديل التعليقات التوضيحية أو الحقول أو XForms بطريقة تؤثر على مظهرها، سيُبلغ الماص أيضًا عن تلك التغييرات.
يتم تمثيل نتيجة المعالجة بواسطة فئة UnsignedContentAbsorber.Result.

1. UnsignedContentAbsorber.Result

يمثل نتيجة محاولة الحصول على محتوى غير موقع من مستند PDF.

الخاصية النوع الوصف
Success bool true إذا اكتملت العملية بنجاح وتم تحديد المحتوى غير الموقع (أو إذا لم يحتوي المستند على توقيعات).
UnsignedContent UnsignedContentAbsorber.UnsignedContent كائن يحتوي على مجموعات من الصفحات، حقول النماذج، XForms، والتعليقات التوضيحية التي لم تغطها التوقيعات.
Message string رسالة نصية تصف النتيجة.
Coverage SignaturesCoverage مستوى تغطية التوقيع: Undefined، EntirelySigned، PartiallySigned.

2. UnsignedContentAbsorber.UnsignedContent

حاوية تحتفظ بجميع عناصر مستند PDF غير المغطاة بالتوقيع الرقمي. تُستخدم هذه الفئة داخل Result وتوفر وصولًا مريحًا إلى الكائنات المكتشفة.

الخاصية النوع الوصف
Pages List<Page> قائمة بالصفحات التي لم يغطيها التوقيع (أو التي تم تعديلها بعد التوقيع). إذا اعتُبرت الصفحة معدَّلة، لن يتم فحص XForms الخاصة بها ولن تظهر في قائمة XForms.
Forms List<WidgetAnnotation> قائمة حقول النماذج (حقول النص، مربعات الاختيار، إلخ) التي أضيفت أو تم تعديلها دون توقيع.
XForms Dictionary<int, XForm> قاموس حيث المفتاح هو رقم الصفحة والقيمة هي كائن XForm تم تعديلها بعد التوقيع.
Annotations Dictionary<int, Annotation> قاموس التعليقات التوضيحية، حيث المفتاح هو رقم الصفحة والقيمة هي التعليق التوضيحي الذي تم تعديله دون توقيع.