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

تعمل مقتطفات الشيفرة التالية أيضًا مع مكتبة 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);
                }
            }
        }
    }
}

استبدال صورة التوقيع

في بعض الأحيان قد يكون لديك متطلبات لاستبدال صورة حقل التوقيع الموجود بالفعل داخل ملف PDF. لتحقيق هذا المتطلب، أولاً، نحتاج إلى البحث عن حقول النموذج داخل ملف PDF، وتحديد حقول التوقيع، والحصول على الأبعاد (الأبعاد المستطيلة) لحقل التوقيع ثم ختم صورة فوق نفس الأبعاد.

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

تدعم 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);
                }
            }
        }
    }
}

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

// 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 – إذا لم تغطِ التوقيعات المستند بأكمله وكان هناك محتوى غير موقع.