Извлечение информации об изображении и подписи

Следующий фрагмент кода также работает с библиотекой Aspose.PDF.Drawing.

Извлечение изображения из поля подписи

Aspose.PDF for .NET поддерживает функцию цифровой подписи PDF-файлов с помощью класса SignatureField, и при подписании документа вы также можете установить изображение для SignatureAppearance. Теперь этот API также предоставляет возможность извлечения информации о подписи и связанного с ней изображения.

Чтобы извлечь информацию о подписи, мы добавили метод 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 – если подписи не охватывают весь документ и есть неподписанный контент.