Extraer Información de Imágenes y Firmas

El siguiente fragmento de código también funciona con la biblioteca Aspose.PDF.Drawing.

Extracción de Imagen del Campo de Firma

Aspose.PDF for .NET admite la función de firmar digitalmente los archivos PDF utilizando la clase SignatureField y al firmar el documento, también puede establecer una imagen para SignatureAppearance. Ahora, esta API también proporciona la capacidad de extraer información de la firma así como la imagen asociada con el campo de firma.

Para extraer información de la firma, hemos introducido el método ExtractImage en la clase SignatureField. Por favor, eche un vistazo al siguiente fragmento de código que demuestra los pasos para extraer una imagen del 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);
                }
            }
        }
    }
}

Reemplazar Imagen de Firma

A veces puede tener la necesidad de reemplazar solo la imagen de un campo de firma ya presente dentro del archivo PDF. Para cumplir con este requisito, primero necesitamos buscar campos de formulario dentro del archivo PDF, identificar los campos de firma, obtener las dimensiones (dimensiones rectangulares) del campo de firma y luego estampar una imagen sobre las mismas dimensiones.

Extraer Información de la Firma

Aspose.PDF for .NET admite la función de firmar digitalmente los archivos PDF utilizando la clase SignatureField. Actualmente, también podemos determinar la validez del certificado, pero no podemos extraer el certificado completo. La información que se puede extraer es una clave pública, huella digital, emisor, etc.

Para extraer información de la firma, hemos introducido el método ExtractCertificate en la clase SignatureField. Por favor, eche un vistazo al siguiente fragmento de código que demuestra los pasos para extraer el certificado del 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);
                }
            }
        }
    }
}

Puede obtener información sobre los algoritmos de firma del 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);
            }
        }
    }
}

Salida de muestra para el ejemplo anterior:

Sha256
Rsa
Pkcs7
Signature1

Comprobación de firmas por compromiso

Puede usar la clase SignaturesCompromiseDetector para verificar firmas digitales por compromiso. Llame al método Check() para verificar las firmas del documento. Si no se detecta compromiso en ninguna firma, el método devolverá verdadero. Si el método devuelve falso, puede verificar si las firmas comprometidas utilizan la propiedad HasCompromisedSignatures y recuperar la lista de firmas comprometidas a través de la propiedad CompromisedSignatures.

Para verificar si las firmas existentes cubren todo el documento, use la propiedad SignaturesCoverage. Esta propiedad puede tener los siguientes valores:

  • Undefined – si una de las firmas está explícitamente comprometida o la verificación de cobertura falló.
  • EntirelySigned – si las firmas cubren todo el documento.
  • PartiallySigned – si las firmas no cubren todo el documento y hay contenido no firmado.