Extrair Informações de Imagem e Assinatura

O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing.

Extraindo Imagem do Campo de Assinatura

Aspose.PDF for .NET suporta a funcionalidade de assinar digitalmente os arquivos PDF usando a classe SignatureField e, ao assinar o documento, você também pode definir uma imagem para SignatureAppearance. Agora, esta API também fornece a capacidade de extrair informações de assinatura, bem como a imagem associada ao campo de assinatura.

Para extrair informações de assinatura, introduzimos o método ExtractImage na classe SignatureField. Por favor, dê uma olhada no seguinte trecho de código que demonstra os passos para extrair uma imagem do objeto 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);
                }
            }
        }
    }
}

Extrair Informações de Assinatura

Aspose.PDF for .NET suporta a funcionalidade de assinar digitalmente os arquivos PDF usando a classe SignatureField. Atualmente, também podemos determinar a validade do certificado, mas não podemos extrair o certificado completo. As informações que podem ser extraídas incluem chave pública, impressão digital, emissor, etc.

Para extrair informações de assinatura, introduzimos o método ExtractCertificate na classe SignatureField. Por favor, dê uma olhada no seguinte trecho de código que demonstra os passos para extrair o certificado do objeto 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);
                }
            }
        }
    }
}

Você pode usar o método PdfFileSignature.TryExtractCertificate para extrair um fluxo de certificado ou um objeto X509Certificate2.

Você pode obter informações sobre os algoritmos de assinatura do documento.

// 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);
            }
        }
    }
}

Saída de exemplo para o exemplo acima:

Sha256
Rsa
Pkcs7
Signature1

Verificando assinaturas para comprometimento

Você pode usar a classe SignaturesCompromiseDetector para verificar assinaturas digitais quanto a comprometimento. Chame o método Check() para verificar as assinaturas do documento. Se nenhum comprometimento de assinatura for detectado, o método retornará verdadeiro. Se o método retornar falso, você pode verificar se as assinaturas comprometidas usam a propriedade HasCompromisedSignatures e recuperar a lista de assinaturas comprometidas através da propriedade CompromisedSignatures.

Para verificar se as assinaturas existentes cobrem todo o documento, use a propriedade SignaturesCoverage. Esta propriedade pode ter os seguintes valores:

  • Indefinido – se uma das assinaturas estiver explicitamente comprometida ou se a verificação de cobertura falhar.
  • TotalmenteAssinado – se as assinaturas cobrem todo o documento.
  • ParcialmenteAssinado – se as assinaturas não cobrem todo o documento e houver conteúdo não assinado.