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

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

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

// 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. يمكن أن تحتوي هذه الخاصية على القيم التالية:

  • غير محدد – إذا تم التلاعب بأحد التوقيعات بشكل صريح أو فشلت عملية التحقق من التغطية.
  • موقع بالكامل – إذا كانت التوقيعات تغطي المستند بالكامل.
  • موقع جزئيًا – إذا كانت التوقيعات لا تغطي المستند بالكامل وهناك محتوى غير موقع.