Extraire des informations sur les images et les signatures

Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.

Extraction d’image à partir du champ de signature

Aspose.PDF for .NET prend en charge la fonctionnalité de signature numérique des fichiers PDF en utilisant la classe SignatureField et lors de la signature du document, vous pouvez également définir une image pour SignatureAppearance. Maintenant, cette API fournit également la capacité d’extraire des informations de signature ainsi que l’image associée au champ de signature.

Pour extraire des informations de signature, nous avons introduit la méthode ExtractImage à la classe SignatureField. Veuillez consulter le code suivant qui démontre les étapes pour extraire une image de l’objet 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);
                }
            }
        }
    }
}

Remplacer l’image de signature

Parfois, vous pouvez avoir besoin de remplacer uniquement l’image d’un champ de signature déjà présent dans le fichier PDF. Pour accomplir cette exigence, nous devons d’abord rechercher les champs de formulaire dans le fichier PDF, identifier les champs de signature, obtenir les dimensions (dimensions rectangulaires) du champ de signature, puis tamponner une image sur les mêmes dimensions.

Extraire des informations de signature

Aspose.PDF for .NET prend en charge la fonctionnalité de signature numérique des fichiers PDF en utilisant la classe SignatureField. Actuellement, nous pouvons également déterminer la validité du certificat, mais nous ne pouvons pas extraire l’ensemble du certificat. Les informations qui peuvent être extraites sont une clé publique, une empreinte digitale, un émetteur, etc.

Pour extraire des informations de signature, nous avons introduit la méthode ExtractCertificate à la classe SignatureField. Veuillez consulter le code suivant qui démontre les étapes pour extraire le certificat de l’objet 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);
                }
            }
        }
    }
}

Vous pouvez obtenir des informations sur les algorithmes de signature de document.

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

Exemple de sortie pour l’exemple ci-dessus :

Sha256
Rsa
Pkcs7
Signature1

Vérification des signatures pour compromission

Vous pouvez utiliser la classe SignaturesCompromiseDetector pour vérifier les signatures numériques pour compromission. Appelez la méthode Check() pour vérifier les signatures du document. Si aucune compromission de signature n’est détectée, la méthode renverra true. Si la méthode renvoie false, vous pouvez vérifier si des signatures compromises utilisent la propriété HasCompromisedSignatures et récupérer la liste des signatures compromises via la propriété CompromisedSignatures.

Pour vérifier si les signatures existantes couvrent l’ensemble du document, utilisez la propriété SignaturesCoverage. Cette propriété peut avoir les valeurs suivantes :

  • Undefined – si l’une des signatures est explicitement compromise ou si la vérification de couverture a échoué.
  • EntirelySigned – si les signatures couvrent l’ensemble du document.
  • PartiallySigned – si les signatures ne couvrent pas l’ensemble du document et qu’il y a du contenu non signé.