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 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.
Comment signer un fichier PDF en C#

- Installez la bibliothèque IronPDF pour signer les documents PDF
- Ajouter des détails granulaires et signer le PDF à partir de
X509Certificate2
- Ajouter une image visuelle pour représenter la signature numérique de plusieurs manières
- Tamponner une signature manuscrite sur le fichier PDF
- Ajouter un champ de signature en C#
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 Method | Description |
---|---|
Sign | Sign a PDF with a PdfSignature object |
SignWithFile | Sign PDF with a digital signature certificate(.pfx or .p12) on disk |
SignWithStore | Signs 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
: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éfinitionCe 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 Iteration | Certificate A | Certificate B | Certificate C | Certificate 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 :

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

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