Comment signer des fichiers PDF en C# en utilisant IronPDF | Tutoriel IronPDF

A Developer's Guide to Digitally Signing PDFs with C#

This article was translated from English: Does it need improvement?
Translated
View the article in English

Ajouter une signature à un document PDF est une exigence courante dans de nombreuses applications, mais 'signer' peut signifier des choses différentes. Pour certains, il s'agit d'appliquer une signature numérique inviolable à l'aide d'un certificat de sécurité. Pour d'autres, il peut s'agir d'apposer une image de signature manuscrite visuelle sur un document ou d'ajouter un champ de formulaire interactif pour permettre aux utilisateurs de signer électroniquement.

Ce guide fournit un aperçu complet pour les développeurs C# sur la manière d'accomplir toutes ces tâches à l'aide de la bibliothèque IronPDF pour .NET. Nous couvrirons tout, de l'application d'une signature numérique sécurisée X509Certificate2 à l'apposition de signatures graphiques et à la création de champs de signature interactifs, en garantissant que vos documents PDF sont authentiques, sécurisés et professionnels.

Démarrage rapide : Signer numériquement un PDF sans effort à l'aide de IronPDF

Commencez rapidement avec IronPDF pour signer numériquement vos documents PDF en utilisant un processus simple et direct. Cet exemple démontre comment utiliser un certificat .pfx pour authentifier et signer un fichier PDF, garantissant l'intégrité et l'authenticité du document. Suivez ces étapes pour intégrer facilement la signature numérique à votre application, offrant à vos utilisateurs des fonctionnalités PDF sécurisées et fiables.

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    new IronPdf.Signing.PdfSignature("certificate.pfx", "password").SignPdfFile("input.pdf");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer
class="hsg-featured-snippet">

Flux de travail minimal (5 étapes)

Une illustration montrant à un développeur C# comment signer numériquement un fichier PDF.
  1. Installez la bibliothèque IronPDF pour .NET.
  2. Appliquez une signature numérique utilisant un objet X509Certificate2.
  3. Ajoutez une image visuelle pour représenter la signature numérique.
  4. Estampillez une signature graphique ou manuscrite sur un fichier PDF.
  5. Ajoutez un champ de formulaire de signature interactif pour la signature électronique.

Comment appliquer une signature numérique à un PDF avec un certificat ?

Vous pouvez appliquer une signature numérique à un document PDF à l'aide d'un fichier de certificat numérique (tel que .pfx ou .p12) pour garantir l'authenticité et l'intégrité du document. Ce processus garantit que le document n'a pas été modifié depuis sa signature.

IronPDF fournit une API simple pour cela, prenant en charge plusieurs façons de définir une signature numérique. Le cœur de cette fonctionnalité repose sur la classe PdfSignature, qui encapsule le certificat et toutes les métadonnées associées pour la signature.

Méthode de signature Description
Sign Signe un PDF avec un PdfSignature object que vous créez et configurez.
SignWithFile Signe un PDF en utilisant un fichier de certificat de signature numérique (.pfx ou .p12) situé sur le disque.
SignWithStore Signe un PDF avec une signature numérique depuis le magasin de certificats de votre ordinateur, identifié par son ID d'empreinte.

Utilisation d'un objet X509Certificate2

Pour un maximum de contrôle, vous pouvez créer un objet X509Certificate2 à partir de votre fichier de certificat. IronPDF est entièrement conforme à la norme X509Certificate2, offrant une méthode robuste et sécurisée pour la mise en œuvre de signature numérique. Lorsque vous créez l'objet certificat, assurez-vous que le X509KeyStorageFlags est réglé sur Exportable, car cela est requis par les API cryptographiques sous-jacentes.

Install-Package IronPdf
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");

// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);

// Apply the signature to the PDF document.
pdf.Sign(signature);

// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System.Security.Cryptography.X509Certificates;

// Create a new PDF from an HTML string for demonstration.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>");

// Load the certificate from a .pfx file with its password.
// The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
var cert = new X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable);

// Create a PdfSignature object using the loaded certificate.
var signature = new PdfSignature(cert);

// Apply the signature to the PDF document.
pdf.Sign(signature);

// Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System.Security.Cryptography.X509Certificates

' Create a new PDF from an HTML string for demonstration.
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1>Signed Document</h1><p>This document has been digitally signed.</p>")

' Load the certificate from a .pfx file with its password.
' The X509KeyStorageFlags.Exportable flag is crucial for allowing the private key to be used in the signing process.
Private cert = New X509Certificate2("IronSoftware.pfx", "123456", X509KeyStorageFlags.Exportable)

' Create a PdfSignature object using the loaded certificate.
Private signature = New PdfSignature(cert)

' Apply the signature to the PDF document.
pdf.Sign(signature)

' Save the securely signed PDF document.
pdf.SaveAs("Signed.pdf")
$vbLabelText   $csharpLabel

Le code ci-dessus génère d'abord un PDF simple. Il charge ensuite un fichier de certificat .pfx dans un objet X509Certificate2. Cet objet, qui représente l'identité numérique, est passé au constructeur PdfSignature. Enfin, la méthode pdf.Sign applique cette signature au document avant de l'enregistrer. For more information on the X509Certificate2 class, you can refer to the official Microsoft documentation.

Ajout de détails granulaires à une signature numérique

Une signature numérique peut contenir plus que le certificat ; vous pouvez intégrer des métadonnées riches pour fournir un contexte à la signature. Cela inclut l'emplacement de la signature, le motif, les informations de contact et un horodatage sécurisé d'une autorité de confiance.

Ajouter ces détails améliore la traçabilité du document et fournit aux vérificateurs des informations précieuses. IronPDF prend également en charge les serveurs d'horodatage utilisant les algorithmes de hachage modernes SHA256 et SHA512.

using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;

// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");

// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");

// Add detailed metadata to the signature for a comprehensive audit trail.
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";

// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;

// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));

// Sign the PDF document with the configured signature object.
pdf.Sign(signature);

// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
using IronPdf;
using IronPdf.Signing;
using IronSoftware.Drawing;
using System;

// Load an existing PDF document to be signed.
var pdf = PdfDocument.FromFile("invoice.pdf");

// Create a PdfSignature object directly from the certificate file and password.
var signature = new PdfSignature("IronSoftware.pfx", "123456");

// Add detailed metadata to the signature for a comprehensive audit trail.
signature.SignatureDate = DateTime.Now;
signature.SigningContact = "legal@ironsoftware.com";
signature.SigningLocation = "Chicago, USA";
signature.SigningReason = "Contractual Agreement";

// Add a secure timestamp from a trusted Time Stamp Authority (TSA).
// This provides cryptographic proof of the signing time.
signature.TimeStampUrl = new Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)");
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;

// Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, new Rectangle(350, 750, 200, 100));

// Sign the PDF document with the configured signature object.
pdf.Sign(signature);

// Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports IronSoftware.Drawing
Imports System

' Load an existing PDF document to be signed.
Private pdf = PdfDocument.FromFile("invoice.pdf")

' Create a PdfSignature object directly from the certificate file and password.
Private signature = New PdfSignature("IronSoftware.pfx", "123456")

' Add detailed metadata to the signature for a comprehensive audit trail.
signature.SignatureDate = DateTime.Now
signature.SigningContact = "legal@ironsoftware.com"
signature.SigningLocation = "Chicago, USA"
signature.SigningReason = "Contractual Agreement"

' Add a secure timestamp from a trusted Time Stamp Authority (TSA).
' This provides cryptographic proof of the signing time.
signature.TimeStampUrl = New Uri("[http://timestamp.digicert.com](http://timestamp.digicert.com)")
signature.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256

' Apply a visual appearance to the signature. (More on this in the next section)
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, New Rectangle(350, 750, 200, 100))

' Sign the PDF document with the configured signature object.
pdf.Sign(signature)

' Save the final, signed PDF document.
pdf.SaveAs("DetailedSignature.pdf")
$vbLabelText   $csharpLabel

Vous remarquerez peut-être une icône d'avertissement dans certains visionneuses PDF si le certificat de signature n'est pas dans le magasin de confiance du système. Pour obtenir une coche verte, le certificat doit être ajouté aux identités de confiance du visionneuse.

Comment puis-je ajouter une représentation visuelle à une signature numérique ?

Bien qu'une signature numérique soit cryptographiquement intégrée au PDF, il est souvent utile d'avoir une représentation visuelle sur la page. Cela peut être un logo d'entreprise, une image de signature manuscrite ou d'autres graphiques. IronPDF facilite l'ajout d'une image à un objet PdfSignature.

Vous pouvez charger une image à partir d'un fichier ou d'un flux et la positionner précisément sur n'importe quelle page du PDF. Les formats d'image pris en charge incluent PNG, JPEG, GIF, BMP, TIFF et WebP.

using IronPdf.Signing;
using IronSoftware.Drawing;

// This example demonstrates various ways to add a visual image to a PDF signature.

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

// Define the position and size for the signature image on the first page (index 0).
var signatureRectangle = new Rectangle(350, 750, 200, 100);

// Option 1: Set the SignatureImage property directly.
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);

// Option 2: Use the LoadSignatureImageFromFile method.
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);

// Option 3: Load an image from a stream. This is useful for images generated in memory.
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
    signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}

// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
</span><br class="ProseMirror-trailingBreak">
using IronPdf.Signing;
using IronSoftware.Drawing;

// This example demonstrates various ways to add a visual image to a PDF signature.

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

// Define the position and size for the signature image on the first page (index 0).
var signatureRectangle = new Rectangle(350, 750, 200, 100);

// Option 1: Set the SignatureImage property directly.
signature.SignatureImage = new PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle);

// Option 2: Use the LoadSignatureImageFromFile method.
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle);

// Option 3: Load an image from a stream. This is useful for images generated in memory.
AnyBitmap image = AnyBitmap.FromFile("assets/visual-signature.png");
using (var imageStream = image.ToStream())
{
    signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle);
}

// After configuring the signature image, apply it to a PDF.
var pdf = PdfDocument.FromFile("invoice.pdf");
pdf.Sign(signature);
pdf.SaveAs("VisualSignature.pdf");
</span><br class="ProseMirror-trailingBreak">
Imports IronPdf.Signing
Imports IronSoftware.Drawing

' This example demonstrates various ways to add a visual image to a PDF signature.

' Create a PdfSignature object.
Private signature = New PdfSignature("IronSoftware.pfx", "123456")

' Define the position and size for the signature image on the first page (index 0).
Private signatureRectangle = New Rectangle(350, 750, 200, 100)

' Option 1: Set the SignatureImage property directly.
signature.SignatureImage = New PdfSignatureImage("assets/visual-signature.png", 0, signatureRectangle)

' Option 2: Use the LoadSignatureImageFromFile method.
signature.LoadSignatureImageFromFile("assets/visual-signature.png", 0, signatureRectangle)

' Option 3: Load an image from a stream. This is useful for images generated in memory.
Dim image As AnyBitmap = AnyBitmap.FromFile("assets/visual-signature.png")
Using imageStream = image.ToStream()
	signature.LoadSignatureImageFromStream(imageStream, 0, signatureRectangle)
End Using

' After configuring the signature image, apply it to a PDF.
Dim pdf = PdfDocument.FromFile("invoice.pdf")
pdf.Sign(signature)
pdf.SaveAs("VisualSignature.pdf")
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'</span><br class="ProseMirror-trailingBreak">
$vbLabelText   $csharpLabel

Ce code montre trois façons équivalentes d'ajouter un composant visuel à une signature numérique. Que vous ayez une image sur disque ou en mémoire, vous pouvez facilement l'estampiller sur le PDF dans le cadre du processus de signature. Cela comble le fossé entre la sécurité cryptographique invisible et l'approbation visible du document.

Comment puis-je contrôler les autorisations documentaires après la signature ?

Lorsque vous signez un document, vous souhaitez peut-être spécifier quelles modifications, le cas échéant, sont autorisées par la suite. Par exemple, vous pouvez verrouiller complètement le document ou permettre uniquement aux utilisateurs de remplir les champs de formulaire. IronPDF vous permet de définir ces autorisations à l'aide de l'énumération SignaturePermissions.

Définir les autorisations de signature est une partie clé de la gestion du cycle de vie d'un document. Cela garantit que l'intégrité du document est maintenue selon vos règles après l'application de votre signature. Si un utilisateur exécute une action non autorisée, la signature sera invalidée.

SignaturePermissions Membre Définition
NoChangesAllowed Aucun changement de quelque nature que ce soit n'est autorisé. Le document est effectivement verrouillé.
FormFillingAllowed Seul le remplissage des champs de formulaire existants et la signature sont autorisés.
AnnotationsAndFormFillingAllowed Permet de remplir des formulaires, de signer et de créer ou de modifier des annotations.

Enregistrement et signature d'une révision spécifique de PDF

Les PDF peuvent stocker un historique des modifications, à l'instar d'un système de contrôle de version. C'est ce qu'on appelle l'enregistrement incrémental. Lorsque vous signez un PDF, la signature s'applique à une révision spécifique du document. Cela est crucial pour les flux de travail où un document passe par plusieurs étapes d'approbation.

Dans l'exemple suivant, nous chargeons un PDF, apportons des modifications, puis signons la révision actuelle tout en n'autorisant que le remplissage de formulaires comme changement futur. Nous utilisons SaveAsRevision pour valider l'état actuel de l'historique du document avant d'enregistrer le fichier.

using IronPdf.Signing;

// Load a PDF file with change tracking enabled.
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);

// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));

// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
    "assets/IronSignature.p12", 
    "password", 
    SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);

// Save the current state as a distinct revision within the PDF's history.
PdfDocument pdfWithRevision = pdf.SaveAsRevision();

// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
using IronPdf.Signing;

// Load a PDF file with change tracking enabled.
var pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking);

// Placeholder for edits: You might add text, fill forms, or add annotations here.
// For example: pdf.Annotations.Add(new TextAnnotation(...));

// Sign the current state of the document using SignWithFile for convenience.
// We set permissions to allow further signatures and form filling.
pdf.SignWithFile(
    "assets/IronSignature.p12", 
    "password", 
    SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed);

// Save the current state as a distinct revision within the PDF's history.
PdfDocument pdfWithRevision = pdf.SaveAsRevision();

// Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf");
Imports IronPdf.Signing

' Load a PDF file with change tracking enabled.
Private pdf = PdfDocument.FromFile("annual_census.pdf", ChangeTrackingModes.EnableChangeTracking)

' Placeholder for edits: You might add text, fill forms, or add annotations here.
' For example: pdf.Annotations.Add(new TextAnnotation(...));

' Sign the current state of the document using SignWithFile for convenience.
' We set permissions to allow further signatures and form filling.
pdf.SignWithFile("assets/IronSignature.p12", "password", SignaturePermissions.AdditionalSignaturesAndFormFillingAllowed)

' Save the current state as a distinct revision within the PDF's history.
Dim pdfWithRevision As PdfDocument = pdf.SaveAsRevision()

' Save the final PDF with its full revision history to a new file.
pdfWithRevision.SaveAs("annual_census_signed.pdf")
$vbLabelText   $csharpLabel

Comprendre les enregistrements incrémentiels est essentiel pour des flux de travail PDF avancés. Bien qu'un visionneuse simple puisse n'afficher que la dernière version, un outil comme Adobe Acrobat peut révéler tout l'historique des révisions, montrant qui a signé quelle version et quelles modifications ont été apportées entre les signatures. IronPDF vous offre un contrôle programmatique complet sur ce processus.

Pour les entreprises gérant des flux de travail de documents complexes nécessitant une sécurité et une conformité élevées, une solution complète peut être nécessaire. Iron Software propose Iron Suite, qui comprend IronPDF pour la signature et la manipulation, ainsi que d'autres bibliothèques pour un large éventail de tâches de traitement de documents, disponibles pour un paiement unique.

Comment puis-je gérer et vérifier les signatures à travers les révisions ?

Un document PDF peut avoir plusieurs signatures appliquées à travers ses diverses révisions. IronPDF fournit des outils pour gérer cet historique efficacement.

  • Revenir à une révision précédente : Vous pouvez revenir à un état antérieur du document en utilisant la méthode GetRevision. Cela supprimera tous les changements et signatures effectués après cette révision.
  • Vérifier toutes les signatures : La méthode VerifySignatures vérifie la validité de toutes les signatures à travers toutes les révisions du document. Elle renvoie true uniquement si chaque signature est valide et qu'aucune modification non autorisée n'a été apportée.
  • Supprimer les signatures : La méthode RemoveSignatures supprimera toutes les signatures numériques de chaque révision du document, créant une version propre et non signée.
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");

// Verify all signatures across all revisions.
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");

// Roll back to the first revision (index 0).
if (pdf.RevisionCount &gt; 1)
{
    PdfDocument firstRevision = pdf.GetRevision(0);
    firstRevision.SaveAs("report_first_revision.pdf");
}

// Create a completely unsigned version of the document.
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
// Load a PDF with a complex signature history.
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");

// Verify all signatures across all revisions.
bool allSignaturesValid = pdf.VerifySignatures();
Console.WriteLine($"All signatures are valid: {allSignaturesValid}");

// Roll back to the first revision (index 0).
if (pdf.RevisionCount &gt; 1)
{
    PdfDocument firstRevision = pdf.GetRevision(0);
    firstRevision.SaveAs("report_first_revision.pdf");
}

// Create a completely unsigned version of the document.
pdf.RemoveSignatures();
pdf.SaveAs("report_unsigned.pdf");
' Load a PDF with a complex signature history.
Dim pdf = PdfDocument.FromFile("multi_signed_report.pdf")

' Verify all signatures across all revisions.
Dim allSignaturesValid As Boolean = pdf.VerifySignatures()
Console.WriteLine($"All signatures are valid: {allSignaturesValid}")

' Roll back to the first revision (index 0).
If pdf.RevisionCount And gt; 1 Then
	Dim firstRevision As PdfDocument = pdf.GetRevision(0)
	firstRevision.SaveAs("report_first_revision.pdf")
End If

' Create a completely unsigned version of the document.
pdf.RemoveSignatures()
pdf.SaveAs("report_unsigned.pdf")
$vbLabelText   $csharpLabel

Comment estamper une signature manuscrite sur un PDF ?

Parfois, vous n'avez pas besoin de la sécurité cryptographique d'une signature numérique mais simplement d'appliquer une signature électronique visuelle, comme une signature manuscrite scannée. On parle souvent de tamponnage. IronPDF peut le faire en utilisant ses fonctionnalités Watermark ou Stamp.

Commençons par un PDF de facturation exemple et une image .png d'une signature manuscrite.

Le fichier PDF de facture original avant d'apposer une signature.

Voici l'image de signature que nous appliquerons :

Une image d'une signature manuscrite Une image de signature manuscrite exemple.

Le code suivant utilise la propriété Watermark pour apposer cette image dans le coin inférieur droit du PDF.

using IronPdf.Editing;

// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");

// Create an HtmlStamp containing our signature image.
var signatureStamp = new HtmlStamp("&lt;img src='assets/signature.png'/&gt;")
{
    // Configure the stamp's position and appearance.
    VerticalAlignment = VerticalAlignment.Bottom,
    HorizontalAlignment = HorizontalAlignment.Right,
    Margin = 10, // Add some space from the edge.
    Opacity = 90 // Make it slightly transparent.
};

// Apply the stamp to all pages of the PDF.
pdf.ApplyStamp(signatureStamp);

// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
using IronPdf.Editing;

// Load the existing PDF document.
var pdf = PdfDocument.FromFile("invoice.pdf");

// Create an HtmlStamp containing our signature image.
var signatureStamp = new HtmlStamp("&lt;img src='assets/signature.png'/&gt;")
{
    // Configure the stamp's position and appearance.
    VerticalAlignment = VerticalAlignment.Bottom,
    HorizontalAlignment = HorizontalAlignment.Right,
    Margin = 10, // Add some space from the edge.
    Opacity = 90 // Make it slightly transparent.
};

// Apply the stamp to all pages of the PDF.
pdf.ApplyStamp(signatureStamp);

// Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf");
Imports IronPdf.Editing

' Load the existing PDF document.
Private pdf = PdfDocument.FromFile("invoice.pdf")

' Create an HtmlStamp containing our signature image.
Dim signatureStamp = New HtmlStamp("&lt;img src='assets/signature.png'/&gt;")
If True Then
	' Configure the stamp's position and appearance.
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Right, Margin = 10, Opacity = 90
	10, Opacity = 90 ' Make it slightly transparent.
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Right, Margin = 10, Opacity
	HorizontalAlignment.Right, Margin = 10, Opacity
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Right, Margin
	VerticalAlignment.Bottom, HorizontalAlignment = HorizontalAlignment.Right, Margin
	VerticalAlignment = VerticalAlignment.Bottom, HorizontalAlignment
End If

' Apply the stamp to all pages of the PDF.
pdf.ApplyStamp(signatureStamp)

' Save the modified PDF document.
pdf.SaveAs("official_invoice.pdf")
$vbLabelText   $csharpLabel

Résultat du PDF estampé

Après exécution du code, l'image de la signature est estampée sur le document, créant une facture signée visuellement.

Le PDF final avec l'image de la signature manuscrite estampée dans le coin inférieur droit.

Comment ajouter un champ de signature interactif à un PDF ?

Pour les documents qui doivent être signés par un utilisateur final dans une visionneuse PDF comme Adobe Acrobat, vous pouvez ajouter un champ de formulaire de signature interactif. Cela crée une zone vide et cliquable qui invite l'utilisateur à appliquer sa propre signature numérique.

Vous pouvez créer un SignatureFormField et l'ajouter à la collection de formulaires du PDF. Vous avez un contrôle précis sur son emplacement et sa taille sur la page.

using IronPdf.Forms;
using IronSoftware.Drawing;

// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("&lt;h1&gt;Please Sign Below&lt;/h1&gt;");

// Define the properties for the signature form field.
string fieldName = "ClientSignature";
int pageIndex = 0; // Add to the first page.
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)

// Create the SignatureFormField object.
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);

// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);

// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
using IronPdf.Forms;
using IronSoftware.Drawing;

// Create a new PDF to add the signature field to.
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("&lt;h1&gt;Please Sign Below&lt;/h1&gt;");

// Define the properties for the signature form field.
string fieldName = "ClientSignature";
int pageIndex = 0; // Add to the first page.
var fieldRect = new Rectangle(50, 200, 300, 100); // Position: (x, y), Size: (width, height)

// Create the SignatureFormField object.
var signatureField = new SignatureFormField(fieldName, pageIndex, fieldRect);

// Add the signature field to the PDF's form.
pdf.Form.Add(signatureField);

// Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf");
Imports IronPdf.Forms
Imports IronSoftware.Drawing

' Create a new PDF to add the signature field to.
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("&lt;h1&gt;Please Sign Below&lt;/h1&gt;")

' Define the properties for the signature form field.
Private fieldName As String = "ClientSignature"
Private pageIndex As Integer = 0 ' Add to the first page.
Private fieldRect = New Rectangle(50, 200, 300, 100) ' Position: (x, y), Size: (width, height)

' Create the SignatureFormField object.
Private signatureField = New SignatureFormField(fieldName, pageIndex, fieldRect)

' Add the signature field to the PDF's form.
pdf.Form.Add(signatureField)

' Save the PDF with the new interactive signature field.
pdf.SaveAs("interactive_signature.pdf")
$vbLabelText   $csharpLabel

Lorsque l'utilisateur ouvre ce PDF, il verra un champ cliquable, lui permettant de compléter le processus de signature avec son propre ID numérique. Vous pouvez en savoir plus sur la création et la gestion de formulaires interactifs dans notre guide Comment créer des formulaires PDF.

Signature non signée Un champ de signature interactif non signé ajouté par programmation à un document PDF.

Récupérer le nom du signataire à partir des signatures vérifiées

Pour obtenir le nom commun du propriétaire du certificat qui a signé une signature, nous pouvons utiliser la classe VerifiedSignature pour accéder à la propriété SignerName. Voici un extrait de code montrant comment accomplir cela.

:path=/static-assets/pdf/content-code-examples/how-to/signing-find-signer-name.cs
using IronPdf;
using System;

// Import the Signed PDF report
var pdf = PdfDocument.FromFile("multi_signed_report.pdf");

// Using GetVerifiedSignatures() obtain a list of `VerifiedSignature` objects from the PDF
pdf.GetVerifiedSignatures().ForEach(signature =>
{
    // Print out the SignerName of each `VerifiedSignature` object
    Console.WriteLine($"SignatureName: {signature.SignerName}");
});
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Après avoir importé le fichier PDF signé, nous utilisons la méthode GetVerifiedSignatures pour récupérer une liste d'objets VerifiedSignature dans le rapport et imprimer le SignerName pour chaque signature.

Veuillez noterVeuillez noter que cette valeur est extraite du nom distingué du sujet du certificat (SubjectDN) et renverra null si le champ CN n'est pas présent.

Étapes suivantes

Ce guide a montré les capacités puissantes et flexibles de signature de PDF d'IronPDF. Que vous ayez besoin d'appliquer des signatures numériques sécurisées avec des métadonnées détaillées, de gérer les révisions de documents, d'estamper des signatures visuelles ou de créer des formulaires interactifs, IronPDF fournit une API complète et conviviale pour les développeurs pour accomplir le travail.

To continue exploring, you can download the IronPDF library for .NET and get a free trial license to test out all its features in your projects.

Prêt à voir ce que vous pouvez faire d'autre ? Consultez notre page de didacticiels ici : Signer et sécuriser des PDFs

Questions Fréquemment Posées

Comment puis-je appliquer une signature numérique à un PDF en utilisant un fichier de certificat en C#?

Pour appliquer une signature numérique à un PDF en utilisant un fichier de certificat en C#, vous pouvez utiliser IronPDF. Chargez votre certificat dans un objet X509Certificate2 et utilisez la classe PdfSignature d'IronPDF pour l'appliquer à votre document avec la méthode Sign.

Quels sont les avantages de l'utilisation d'une signature numérique pour les documents PDF?

Les signatures numériques fournissent une authentification et une intégrité pour les documents PDF. En utilisant IronPDF, vous pouvez vous assurer que votre document est signé par une source vérifiée et qu'il n'a pas été modifié depuis l'application de la signature.

Comment puis-je ajouter une signature manuscrite à un PDF en C#?

IronPDF vous permet d'ajouter une signature manuscrite en tamponnant une image de votre signature sur le PDF. Vous pouvez utiliser la méthode ApplyStamp avec un HtmlStamp, en précisant le fichier image, pour y parvenir.

Quel est le processus pour ajouter un champ de signature interactif à un PDF?

Pour ajouter un champ de signature interactif à un PDF, créez un objet SignatureFormField avec le nom, la page et l'emplacement souhaités. Ajoutez ce champ à la collection PdfDocument.Form en utilisant IronPDF avant d'enregistrer le document.

Puis-je contrôler les autorisations sur un PDF signé?

Oui, lors de la signature d'un PDF avec IronPDF, vous pouvez spécifier SignaturePermissions pour contrôler les modifications autorisées après la signature du document. Les options incluent NoChangesAllowed, FormFillingAllowed, et AnnotationsAndFormFillingAllowed.

Comment puis-je vérifier l'authenticité de la signature numérique d'un PDF?

IronPDF fournit une méthode VerifySignatures qui vérifie la validité de toutes les signatures dans un PDF. Elle renvoie un booléen indiquant si toutes les signatures sont authentiques et n'ont pas été altérées.

Qu'est-ce que la sauvegarde incrémentielle dans les PDF et pourquoi est-elle utile?

La sauvegarde incrémentielle dans les PDF permet de stocker plusieurs versions de document dans un seul fichier. Cette fonctionnalité est utile pour maintenir un historique des modifications et assurer que chaque signature numérique correspond à la bonne version du document au moment de la signature.

Comment puis-je ajouter des métadonnées à une signature numérique dans un PDF?

En utilisant IronPDF, vous pouvez enrichir les signatures numériques avec des métadonnées telles que la raison de la signature, l'emplacement et l'horodatage. Cela peut être défini lors de la création d'un objet PdfSignature, permettant une documentation détaillée du processus de signature.

Puis-je utiliser les fonctionnalités de signature numérique d'IronPDF dans les applications .NET 10 ?

Oui. IronPDF prend entièrement en charge .NET 10, donc le même flux de travail de signature numérique basé sur X509Certificate2 présenté dans cet article fonctionne dans les applications console, web et de service .NET 10. Il suffit de créer un projet .NET 10, d'installer le dernier package IronPdf depuis NuGet, et de réutiliser le code de signature pour appliquer des signatures invisibles ou visibles, des images de signature et des champs de formulaire de signature.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur technique chez Iron Software et un ingénieur visionnaire pionnier dans la technologie des PDF en C#. En tant que développeur original derrière la base de code principale d'Iron Software, il a façonné l'architecture du produit de l'entreprise depuis sa création, ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer?
Nuget Téléchargements 16,154,058 | Version : 2025.11 vient de sortir