Signer numériquement un document PDF

Chaknith Bin
Chaknith Bin
janvier 25, 2023
Mise à jour décembre 24, 2024
Partager:
This article was translated from English: Does it need improvement?
Translated
View the article in English

Désambiguïsation importante : Signature d'un PDF

Les développeurs demandent souvent comment ils peuvent ajouter par programme une signature à un document PDF à l'aide d'IronPDF. En général, la signature a des significations différentes selon les développeurs :

  1. Pour signer numériquement un document PDF avec un certificat afin de garantir qu'il ne puisse pas être altéré.

  2. Pour ajouter une image de signature manuscrite graphique à un PDF existant à partir d'un fichier image.

  3. Pour tamponner l'image d'un certificat sur un PDF.

  4. Pour ajouter un champ de formulaire de signature à un PDF, que certains visionneurs peuvent utiliser pour la signature.

    Commencez avec IronPDF

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.

    Première étape :
    green arrow pointer


Signer un PDF à l'aide d'un certificat numérique

IronPDF prend en charge de nombreuses façons de signer un PDF avec un certificat de signature numérique aux formats .pfx et .p12. Dans ce guide pratique, vous serez guidé à travers les trois principales méthodes utilisées pour signer numériquement des documents PDF :

Signing MethodDescription
SignSign a PDF with a PdfSignature object
SignWithFileSign PDF with a digital signature certificate(.pfx or .p12) on disk
SignWithStoreSigns the PDF with digital signature extracted from your computer's signature storage. Based on a thumbprint ID

Fichiers de certificats de signature numérique pris en charge

Nous respectons officiellement la norme X509Certificate2 et prenons en charge les signatures .pfx et .p12. Si votre signature ne peut pas être appliquée directement dans les méthodes de signature d'IronPDF, vous devrez créer un certificat X509Certificate2 avec des instructions disponibles dans la documentation Microsoft.

Signer : Créer une signature Pdf à partir d'un certificat X5092

Les méthodes de signature d'IronPDF accepteront les objets X509Certificate2 avec X509KeyStorageFlags définis sur Exportable.

A noter

  • IronPDF ne prend en charge que X509KeyStorageFlags.Exportable. Pour certains certificats, KeyStorageFlags est défini par défaut sur Exportable. Toute tentative d'utilisation de KeyStorageFlags différents entraîne une exception => Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException : 'The requested operation is not supported.' (L'opération demandée n'est pas prise en charge)

:path=/static-assets/pdf/content-code-examples/how-to/signing-X509Certificate2-with-privatekey.cs
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

// Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
X509Certificate2 cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create PdfSignature object
var sig = new PdfSignature(cert);

// Sign PDF document
pdf.Sign(sig);

pdf.SaveAs("signed.pdf");

Signer : ajouter des détails granulaires à PdfSignature

Lors de l'instanciation de PdfSignature ou après son instanciation, des informations utiles peuvent être ajoutées à l'objet PdfSignature, notamment la date, le contact signataire, l'emplacement, la raison de la signature, l'horodatage et l'ajout d'une image en tant qu'apparence visuelle sur le document PDF.

Conseils
Prise en charge des serveurs d'horodatage qui requièrent SHA256 et SHA512

:path=/static-assets/pdf/content-code-examples/how-to/signing-add-granular-information.cs
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>foo</h1>");

pdf.SaveAs("signed.pdf");

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add granular information
sig.SignatureDate = new DateTime(2000, 12, 02);
sig.SigningContact = "IronSoftware";
sig.SigningLocation = "Chicago";
sig.SigningReason = "How to guide";
sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
sig.TimeStampUrl = "http://timestamp.digicert.com";
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Sign and save PDF document
sig.SignPdfFile("signed.pdf");

Démonstration

Il se peut qu'un point d'exclamation ou un signe d'avertissement s'affiche au lieu d'une coche. Cela est dû au fait qu'Adobe ne peut pas confirmer l'authenticité et l'intégrité du document puisque le certificat n'est pas présent. Pour obtenir la coche, veuillez ajouter le certificat à Adobe et rouvrir le document.

Différentes façons d'ajouter une image

L'image peut être incluse de différentes manières :

  • Définissez la propriété SignatureImage sur un nouvel objet PdfSignatureImage.
  • Utilisez la méthode LoadSignatureImageFromFile pour charger une image à partir d'un fichier. La méthode LoadSignatureImageFromFile prend en charge divers formats d'image.
  • Utilisez la méthode LoadSignatureImageFromStream pour charger une image à partir d'un flux. Le flux d'images peut être généré à partir d'autres bibliothèques à condition qu'il ait les formats TGA, PBM, TIFF, BMP, GIF, PNG, JPEG, Webp.
:path=/static-assets/pdf/content-code-examples/how-to/signing-add-image.cs
using IronPdf.Signing;
using IronSoftware.Drawing;

// Create PdfSignature object
var sig = new PdfSignature("IronSoftware.pfx", "123456");

// Add image by property
sig.SignatureImage = new PdfSignatureImage("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Add image by LoadSignatureImageFromFile method
sig.LoadSignatureImageFromFile("IronSoftware.png", 0, new Rectangle(0, 600, 100, 100));

// Import image using IronSoftware.Drawing
AnyBitmap image = AnyBitmap.FromFile("IronSoftware.png");

sig.LoadSignatureImageFromStream(image.ToStream(), 0, new Rectangle(0, 600, 100, 100));

Droits de signature

Vous pouvez spécifier explicitement les conditions dans lesquelles votre certificat restera valide. Si vous souhaitez que votre signature soit invalidée en cas de modification, ou qu'elle ne permette que des modifications de champs de formulaire, etc., veuillez utiliser le tableau suivant pour voir les options :

Définition

Ce paramètre est facultatif. S'il n'est pas défini, une signature certifiant une révision spécifique sera appliquée et ne pourra pas être invalidée.

Enregistrer et signer un PDF Itération de révision

Dans l'exemple suivant, nous ouvrons un fichier PDF, nous y apportons diverses modifications, puis nous le signons avant de l'enregistrer. Pour les autorisations de signature, nous n'autoriserons que le remplissage de formulaires pour les éditions futures ; dans le cas contraire, la signature sera invalidée par toute autre modification.

Nous appellerons ensuite SaveAsRevision pour enregistrer la révision dans l'historique, puis nous enregistrerons notre nouveau document sur le disque.

:path=/static-assets/pdf/content-code-examples/how-to/signing-revision.cs
using IronPdf;
using IronPdf.Rendering;

// Import PDF and enable TrackChanges
PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf", TrackChanges: ChangeTrackingModes.EnableChangeTracking);
// ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", null, IronPdf.Signing.SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);

PdfDocument pdfWithRevision = pdf.SaveAsRevision();

pdfWithRevision.SaveAs("annual_census_2.pdf");

Comprendre l'enregistrement incrémentiel des signatures

Alors que certaines visionneuses comme les navigateurs Chrome n'affichent qu'une seule version, les fichiers PDF ont la capacité de stocker les versions précédentes du document, à l'instar d'un historique des livraisons Git. Vous verrez cela dans des visionneurs de PDF plus avancés tels qu'Adobe Acrobat.

Lorsqu'il s'agit de signatures de PDF, il est important de le savoir car l'action de signer un PDF s'applique à l'itération actuelle du PDF. Votre PDF peut comporter des signatures pour des itérations plus anciennes ou quelques versions non signées. Nous pouvons visualiser un exemple comme suit :

PDF Document IterationCertificate ACertificate BCertificate CCertificate D
0 (first save)
1
2
3
(form field edits only)

(form field edits only)
4 (only form fields edited)
5
(no further edits allowed)

(no further edits allowed)

(no further edits allowed)

Ci-dessus, nous avons des documents qui ont fait l'objet de 6 itérations différentes. Ce document peut être transmis aux différents services d'une entreprise pour approbation jusqu'à ce qu'il soit finalisé à l'itération 3. Dans cette itération, la personne A et la personne B ont toutes deux signé le document avec l'autorisation "Modifications des champs du formulaire uniquement". Cela signifie qu'il est permis de remplir les champs du formulaire dans le document PDF, mais que toute autre modification du document invalidera leurs signatures.

Dans l'exemple ci-dessus, nous pouvons supposer que la personne C# est celle qui a rempli le formulaire et l'a renvoyé aux personnes A, B et D qui ont toutes signé le document une dernière fois avec l'autorisation "Aucune modification autorisée". Comme aucune action invalidante n'a été effectuée dans ce document, lorsque nous exécutons la méthode de signature d'IronPDF, nous obtiendrons true.

Revenir à une ancienne révision

Pour revenir à une révision précédente d'un PDF, vous pouvez utiliser la méthode GetRevision. Cette opération a pour effet d'oublier toutes les modifications apportées depuis cette révision, y compris les signatures plus récentes. Pour ce faire, utilisez :

:path=/static-assets/pdf/content-code-examples/how-to/signing-revert-revision.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("report.pdf");

int versions = pdf.RevisionCount; // total revisions

PdfDocument rolledBackPdf = pdf.GetRevision(2);
rolledBackPdf.SaveAs("report-draft.pdf");

Supprimer les signatures

IronPDF dispose d'une méthode RemoveSignatures qui supprimera chaque signature de chaque révision d'un document PDF. L'utilisation est la suivante :

:path=/static-assets/pdf/content-code-examples/how-to/signing-remove-signature.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("invoice.pdf");
pdf.RemoveSignatures();

Vérifier toutes les signatures dans un PDF

L'appel de la méthode de vérification des signatures sur un document PDF permet d'examiner toutes les signatures de toutes les itérations du document et de vérifier qu'elles sont toujours valides. Cela retournera un bool de true s'ils sont tous valides.

:path=/static-assets/pdf/content-code-examples/how-to/signing-verify-signatures.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("annual_census.pdf");
bool isValid = pdf.VerifyPdfSignatures();

Apposer une signature sur un PDF

Tout d'abord, je commencerai par un PDF que je souhaite signer. J'utiliserai cet exemple de facture :

Nous allons appliquer une signature manuscrite sous forme d'image .png à notre PDF. Il peut s'agir d'une signature manuscrite ou de l'image utilisée pour la création d'un fichier de certificat. Il s'agit de l'exemple de signature que nous utiliserons :

Signature related to Apposer une signature sur un PDF

Code

Nous utiliserons le code suivant pour apposer la signature manuscrite en filigrane sur le PDF :

:path=/static-assets/pdf/content-code-examples/how-to/signing-handwritten.cs
using IronPdf;
using IronPdf.Editing;

var pdf = PdfDocument.FromFile("invoice.pdf");

pdf.ApplyWatermark("<img src='signature.png'/>", 90, VerticalAlignment.Bottom, HorizontalAlignment.Right);

pdf.SaveAs("official_invoice.pdf");

Résultat de la sortie

Une fois ce code exécuté, nous obtenons ce fichier de sortie qui porte notre signature en bas à droite :


Ajouter un champ de signature non signé à un PDF

Pour ajouter un champ de formulaire de signature non signé ou vide, vous devez d'abord créer le champ de formulaire de signature en instanciant l'objet de signature. Ensuite, sur le document PDF cible, accédez à la propriété Form et passez l'objet de signature nouvellement créé à la méthode Add. Enfin, exportez le PDF avec le formulaire de signature vide.

:path=/static-assets/pdf/content-code-examples/how-to/signing-unsigned-signature.cs
using IronPdf;
using IronSoftware.Forms;

ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>testing</h1>");

// Configure required parameters
string name = "cert";
uint pageIndex = 0;
double x = 100;
double y = 600;
double width = 300;
double height = 100;

// Create signature
SignatureFormField signature = new SignatureFormField(name, pageIndex, x, y, width, height);

// Add signature
pdf.Form.Add(signature);

pdf.SaveAs("signature.pdf");
Signature non signée

Vous pouvez en savoir plus sur IronPDF et les formulaires qu'il prend en charge dans l'article Comment créer des formulaires PDF.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.