Cette page peut contenir du texte traduit automatiquement.

Signer des documents PDF en C# et VB.NET

Les signatures numériques servent à authentifier l'identité d'un utilisateur et le contenu d'un document PDF. Les signatures permettent de prouver que le document PDF :

  • N'a pas été modifié depuis sa signature.
  • A été signé numériquement par une personne spécifique.

Ajouter une signature numérique au PDF en C# et VB.NET

Bibliothèque .NET pour signer des documents PDF

Utilisez la bibliothèque Docotic.Pdf pour signer des documents PDF dans des applications .NET Framework et .NET Core. Obtenez la bibliothèque et une clé de licence gratuite à durée limitée sur la page Télécharger la bibliothèque PDF C# .NET.

Docotic.Pdf peut créer des signatures numériques à l'aide de différents algorithmes de hachage (SHA-1, SHA-256, SHA-384, SHA-512, RIPEMD-160) et de différents formats de signature (adbe.pkcs7.detached ou ETSI.CAdES.detached). La bibliothèque peut aussi vérifier les signatures PDF.

Ajouter une signature numérique à un PDF en C#

Vous avez besoin d'un certificat PKCS#12 numérique (.pfx ou .p12) émis par une autorité de certification valide (CA) pour signer un document PDF. Voici l'exemple de base qui montre comment signer un document PDF en C# :

using BitMiracle.Docotic.Pdf;

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
    Reason = "Testing digital signatures",
    Location = "My workplace",
    ContactInfo = "support@example.com"
};

pdf.SignAndSave(options, "signed.pdf");

Remplacez "your_cert.p12" et "your_cert_password" par votre propre fichier de certificat .p12 ou .pfx et son mot de passe. Sur GitHub, vous pouvez télécharger et essayer les exemples complets Signer un document PDF en C# et VB.NET.

Il existe des cas où vous devez signer un document déjà signé. Ou plusieurs personnes doivent signer un formulaire les unes après les autres. C'est également possible. Les étapes sont presque les mêmes. Veillez simplement à signer et enregistrer de manière incrémentielle. Les mises à jour incrémentielles n'invalident pas les signatures numériques si vous n'appliquez que des modifications autorisées.

Il existe des exemples Signer un document PDF déjà signé et Signer un formulaire PDF par plusieurs personnes en C# et VB.NET pour ces cas.

Le code ci-dessus ajoute implicitement un champ de signature invisible au document PDF et l'utilise pour la signature. Voyons comment ajouter et personnaliser des champs de signature dans PDF.

Signer un document PDF avec une image de signature manuscrite

Vous devez souvent ajouter une image de signature manuscrite au PDF en plus de la signature numérique. Cet exemple montre comment ajouter une signature numérique avec une image associée en C# :

using var pdf = new PdfDocument("document_to_sign.pdf");
var options = new PdfSigningOptions("your_cert.p12", "your_cert_password")
{
    DigestAlgorithm = PdfDigestAlgorithm.Sha256,
    Format = PdfSignatureFormat.Pkcs7Detached,
};

PdfSignatureField field = pdf.Pages[0].AddSignatureField(20, 20, 100, 50);
options.Field = field;

PdfImage image = pdf.CreateImage("your_signature.jpg");
options.Appearance.Image = image;
options.Appearance.HideAllText();

pdf.SignAndSave(options, "signed.pdf");

Ce code ajoute un champ de signature, associe le champ aux options de signature et personnalise l'apparence du champ. Vous pouvez afficher du texte, une image ou les deux dans les champs de signature. Consultez la classe PdfSignatureAppearanceOptions et les exemples Signer un champ de signature à l'aide d'un style personnalisé pour plus de détails.

Verrouiller les champs de formulaire PDF avec un champ de signature

Un champ de signature peut être utilisé pour verrouiller les champs de formulaire PDF après la signature. Cet exemple montre comment verrouiller des champs de formulaire spécifiques après la signature en C# :

var first = page.AddSignatureField("first", 100, 100, 200, 50);

// lorsque le premier champ est signé, les champs portant les noms "some_text_field" et
// "some_checkbox" seront verrouillés en modification
first.Lock = PdfSignatureFieldLock.CreateLockFields("some_text_field", "some_checkbox");

Et le code suivant montre comment verrouiller tous les champs de formulaire après la signature :

var second = page.AddSignatureField("second", 100, 200, 200, 50);

// lorsque le second champ est signé, tous les champs seront verrouillés en modification
second.Lock = PdfSignatureFieldLock.CreateLockAll();

Vous pouvez aussi verrouiller tous les champs de formulaire du document PDF, sauf les champs spécifiés. Utilisez la méthode PdfSignatureFieldLock.CreateLockAllExceptFields pour cela.

Téléchargez et essayez les exemples complets Signer un champ de signature avec un verrouillage en C# et VB.NET depuis GitHub.

Intégrer un horodatage dans une signature numérique

Vous pouvez ajouter une sécurité supplémentaire à une signature numérique en intégrant un horodatage. Pour cela, spécifiez l'URL de l'autorité d'horodatage comme l'une des options de signature. Vous pouvez aussi fournir un nom d'utilisateur et un mot de passe si nécessaire.

Lors de la signature, la bibliothèque obtiendra un horodatage auprès de l'autorité d'horodatage et l'intégrera à la signature.

Pour des raisons de compatibilité, nous recommandons d'utiliser l'un des algorithmes de hachage SHA pour les signatures horodatées.

// Remplacez l'URL de test suivante par l'URL de votre autorité d'horodatage
options.Timestamp.AuthorityUrl = new Uri("http://tsa.starfieldtech.com/");

// Spécifiez le nom d'utilisateur et le mot de passe si votre autorité d'horodatage exige une authentification
options.Timestamp.Username = null;
options.Timestamp.Password = null;