Signer numériquement un document PDF
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 :
Pour ajouter une image de signature manuscrite à un PDF existant à partir d'un fichier image.
- Pour ajouter un champ de formulaire de signature à un PDF que certaines visionneuses peuvent inviter à signer.
Commencez avec IronPDF
Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit.
Comment signer un fichier PDF en C#

- Installer la bibliothèque IronPDF pour signer des documents PDF
- Ajouter des détails granulaires et signer le PDF à partir de
Certificat X5092
- Ajouter une image visuelle pour représenter la signature numérique de différentes manières
- Apposer une signature manuscrite sur un fichier PDF
- Ajouter un champ de formulaire de signature en C#
Signer un PDF à l'aide d'un certificat numérique
IronPDF supporte 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 les documents PDF :
Méthode de signature | Description |
---|---|
Signe | Signer un PDF avec un Objet PdfSignature |
SignWithFile | Signer un PDF avec un certificat de signature numérique (.pfx ou .p12) sur le disque |
SignWithStore | Signe le PDF à l'aide d'une signature numérique extraite de la mémoire de signature de votre ordinateur. Sur la base d'une empreinte de pouce |
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 les instructions qui peuvent être trouvées sur le site web de laDocumentation Microsoft.
Signer : Créer une signature Pdf à partir d'un certificat X5092
Les méthodes de signature d'IronPDF acceptent les objets X509Certificate2
avec X509KeyStorageFlags réglé sur Exportable.
[{i :(
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");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")
' Create X509Certificate2 object with X509KeyStorageFlags set to Exportable
Private cert As New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)
' Create PdfSignature object
Private 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
: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");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>foo</h1>")
pdf.SaveAs("signed.pdf")
' Create PdfSignature object
Dim 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éfinir la propriété SignatureImage à un nouvel objet PdfSignatureImage.
- Utilisez la méthode
LoadSignatureImageFromFile
pour charger une image à partir d'un fichier. La méthode LoadSignatureImageFromFile prend en charge différents 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));
Imports IronPdf.Signing
Imports IronSoftware.Drawing
' Create PdfSignature object
Private 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
Dim image As AnyBitmap = 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 :
PdfDocument.SignaturePermissions | Définition |
---|---|
Pas de changement autorisé | Aucune modification n'est autorisée |
FormFillingAllowed | Modification des valeurs des champs de formulaire autorisée |
FormFillingAndAnnotationsAllowed (Remplissage et annotations autorisés) | Modification des valeurs des champs de formulaire et modification des annotations autorisées |
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");
Imports IronPdf
Imports IronPdf.Rendering
' Import PDF and enable TrackChanges
Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf", TrackChanges:= ChangeTrackingModes.EnableChangeTracking)
' ... various edits ...
pdf.SignWithFile("/assets/IronSignature.p12", "password", Nothing, IronPdf.Signing.SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed)
Dim pdfWithRevision As PdfDocument = 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 :
Itération du document PDF | Certificat A | Certificat B | Certificat C# | Certificat D |
---|---|---|---|---|
(première sauvegarde) | ✅ | |||
✅ (modification des champs du formulaire uniquement) | ✅ (modification des champs du formulaire uniquement) | |||
(seulement les champs de formulaire édités) | ✅ | |||
✅ (aucune autre modification n'est autorisée) | ✅ (aucune autre modification n'est autorisée) | ✅ (aucune autre modification n'est autorisée) |
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". Étant donné qu'aucune action d'invalidation n'a été entreprise dans ce document, lorsque nous exécutons la méthode de signature d'IronPDF, nous obtenons vrai.
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");
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("report.pdf")
Private versions As Integer = pdf.RevisionCount ' total revisions
Private rolledBackPdf As PdfDocument = pdf.GetRevision(2)
rolledBackPdf.SaveAs("report-draft.pdf")
Supprimer les signatures
IronPDF dispose d'une méthode RemoveSignatures
qui supprime toutes les signatures de toutes les révisions 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();
Imports IronPdf
Private pdf As PdfDocument = 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. Ceci retournera un bool
de true
si elles sont toutes 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();
Imports IronPdf
Private pdf As PdfDocument = PdfDocument.FromFile("annual_census.pdf")
Private isValid As Boolean = 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 appliquerons 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 :

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");
Imports IronPdf
Imports IronPdf.Editing
Private 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");
Imports IronPdf
Imports IronSoftware.Forms
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>testing</h1>")
' Configure required parameters
Private name As String = "cert"
Private pageIndex As UInteger = 0
Private x As Double = 100
Private y As Double = 600
Private width As Double = 300
Private height As Double = 100
' Create signature
Private signature As New SignatureFormField(name, pageIndex, x, y, width, height)
' Add signature
pdf.Form.Add(signature)
pdf.SaveAs("signature.pdf")

Pour en savoir plus sur IronPDF et les formulaires qu'il prend en charge, consultez la rubriqueComment créer des formulaires PDF article.