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

Substituir Imagem da Assinatura

Às vezes, você pode ter a necessidade de substituir apenas a imagem de um campo de assinatura já presente dentro do arquivo PDF. Para realizar esse requisito, primeiro, precisamos pesquisar os campos do formulário dentro do arquivo PDF, identificar os campos de assinatura, obter as dimensões (dimensões retangulares) do campo de assinatura e, em seguida, estampar uma imagem sobre as mesmas dimensões.

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 são 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 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 por comprometimento

Você pode usar a classe SignaturesCompromiseDetector para verificar assinaturas digitais por 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:

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