Comment signer numériquement un PDF en Java
Signer numériquement un PDF en Java avec IronPDF vous permet d'appliquer des signatures cryptographiques qui vérifient l'authenticité du document et détectent les modifications non autorisées. IronPDF prend en charge PdfSignature pour joindre des signatures basées sur des certificats PFX à n'importe quel PDF, définir des images de signature visibles, contrôler les niveaux de certification des PDF avec PdfCertificationLevel et se connecter à un serveur d'autorité de horodatage pour garantir la validité à long terme des signatures.
Démarrage rapide : Signer numériquement un PDF en Java
- Installez IronPDF for Java via Maven ou Gradle
- Définissez votre clé de licence avec
License.setLicenseKey() - Charger le PDF avec
PdfDocument.fromFile() - Créez un fichier
PdfSignatureavec votre fichier de certificat PFX et votre mot de passe - Appliquer la signature avec
signDigitalSignature() - Économisez le PDF signé avec
saveAs()
```java :title=Quickstart //:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/quickstart.java import java.io.IOException ; import java.nio.file.Path; import com.ironsoftware.IronPdf.License; import com.ironsoftware.ironpdf.PdfDocument ; import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main { public static void main(String[] args) throws IOException { // Définissez la clé de licence IronPDF License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Chargez un document PDF existant
PdfDocument pdf = PdfDocument.fromFile(Path.of("document.pdf"));
// Créez une PdfSignature en utilisant un fichier de certificat PFX et son mot de passe
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Définissez les métadonnées de signature pour les pistes d'audit
signature.setSigningContact("John Smith");
signature.setSigningLocation("New York");
signature.setSigningReason("Approbation du document");
// Appliquez la signature numérique au PDF
pdf.signDigitalSignature(signature);
// Enregistrez le PDF signé dans un nouveau fichier
pdf.saveAs(Path.of("signed.pdf"));
}
}
Les signatures numériques confèrent aux documents PDF une identité cryptographique liée à une clé privée et à un certificat. Lorsqu'un destinataire ouvre un PDF signé dans Adobe Acrobat ou tout autre visualiseur conforme, l'application vérifie que la chaîne de certificats remonte à une autorité de confiance et que le contenu du document n'a pas changé depuis la signature. Cette combinaison d'authentification et d'intégrité rend les signatures numériques essentielles pour les contrats, les factures, les dépôts réglementaires, et tout document où la preuve de falsification est importante.
Les signatures PDF se divisent en deux catégories : les signatures d'approbation et les signatures d'auteur (certification). Une signature d'approbation enregistre l'approbation d'un signataire à un moment donné; plusieurs parties peuvent ajouter des signatures d'approbation en séquence sans invalider les précédentes. Une signature de certification, appliquée avec `certify()`, verrouille le document conformément à `PdfCertificationLevel` et désigne le signataire comme auteur du document. Les signatures de certification doivent être la première signature sur un document et contrôlent quelles modifications, le cas échéant, les signataires ultérieurs peuvent effectuer.
IronPDF prend en charge les deux types de signature via une API cohérente construite autour de `PdfSignature` et `PdfDocument`. Pour la configuration initiale, la configuration des dépendances, et les instructions de clé de licence, voir la [Vue d'ensemble de démarrage](https://ironpdf.com/java/docs/).
<div class="hsg-featured-snippet">
<h2>Comment signer numériquement un PDF en Java</h2>
<ol>
<li><a href="https://ironpdf.com/java/#download-modal">Installez la bibliothèque Java IronPDF pour les signatures numériques</a></li>
<li>Utilisez la classe <strong>PdfDocument</strong> pour charger le PDF</li>
<li>Créez une <strong>PdfSignature</strong> en utilisant un fichier de certificat PFX et un mot de passe</li>
<li>Optionnellement, définissez une image de signature visible avec <code>setSignatureImage</code></li>
<li>Appliquez la signature avec <code>signDigitalSignature</code></li>
<li>Certifiez le PDF avec <code>certify</code> et un <code>PdfCertificationLevel</code></li>
<li>Enregistrez le PDF signé avec <code>saveAs</code></li>
</ol>
</div>
## De quoi ai-je besoin avant de commencer?
Avant de signer des PDF avec IronPDF, confirmez les prérequis suivants :
- **Java 8 ou supérieur** : IronPDF nécessite un JDK version 8 ou supérieure.
- **IronPDF for Java** : Ajoutez la dépendance à votre fichier de construction. Trouvez la dernière version sur [Maven Central](https://central.sonatype.com/artifact/com.ironsoftware/ironpdf).
- **Une clé de licence valide** : définissez la clé au démarrage de l'application avec `License.setLicenseKey()`. Pour les détails de configuration, visitez le [guide des clés de licence](https://ironpdf.com/java/get-started/license-keys/).
- **Un fichier de certificat PFX ou P12** : C'est une archive protégée par mot de passe contenant votre clé privée et certificat public au format PKCS#12. Les certificats auto-signés fonctionnent pour le développement et les tests; pour les documents de production qui doivent être dignes de confiance pour les destinataires externes, utilisez un certificat délivré par une autorité de certification reconnue (CA) telle que DigiCert, Comodo ou GlobalSign.
Pour la configuration complète des dépendances et du projet, consultez la [Vue d'ensemble de démarrage](https://ironpdf.com/java/docs/).
## Comment puis-je appliquer une signature numérique à un PDF ?
Le constructeur `PdfSignature` prend en paramètre le chemin d'accès au fichier de votre certificat PFX et son mot de passe. Une fois construit, vous pouvez attacher des métadonnées optionnelles via trois méthodes de définition :
- `setSigningContact(String)` : le nom ou l'adresse e-mail de la personne signataire
- `setSigningLocation(String)` : l'emplacement physique ou organisationnel du signataire
- `setSigningReason(String)` : brève description de la raison pour laquelle le document est signé
Ces champs apparaissent dans le panneau des propriétés de la signature des visualiseurs PDF et créent un enregistrement d'audit utile à des fins de conformité. Appelez `signDigitalSignature(PdfSignature)` sur le `PdfDocument` chargé pour intégrer la signature cryptographique, puis économisez le résultat avec `saveAs()`.
```java
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/apply-signature.java
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF to sign
PdfDocument pdf = PdfDocument.fromFile(Path.of("contract.pdf"));
// Construct the PdfSignature with the certificate path and password
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Set metadata that will appear in the signature properties panel
signature.setSigningContact("Jane Doe");
signature.setSigningLocation("Austin, TX");
signature.setSigningReason("Contract Approval");
// Embed the digital signature in the PDF
pdf.signDigitalSignature(signature);
// Save the signed document
pdf.saveAs(Path.of("contract-signed.pdf"));
}
}
Une fois signDigitalSignature() terminé, le PDF contient un hachage cryptographique du contenu du document signé avec la clé privée du fichier PFX. Toute modification apportée au fichier après cette étape invalidera la signature.
Comment puis-je ajouter une image de signature visible à un PDF ?
Une image de signature visible place une représentation graphique directement sur la page du PDF à l'emplacement du champ de signature. C'est couramment utilisé pour afficher une signature manuscrite numérisée, un tampon d'entreprise, ou un logo afin que le document semble signé lorsqu'il est imprimé ou visualisé, et pas seulement inspecté avec le panneau des signatures d'un lecteur PDF.
Pour ajouter une image visible, ouvrez le fichier image en tant que FileInputStream et transmettez-le à PdfSignature.setSignatureImage(InputStream) avant d'appeler signDigitalSignature(). L'image est intégrée dans le champ de signature sur la page.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF document to sign
PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));
// Build the PdfSignature from a PFX certificate
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Set signing metadata
signature.setSigningContact("Alice Johnson");
signature.setSigningLocation("Chicago, IL");
signature.setSigningReason("Agreement Authorization");
// Open the signature image file and attach it to the signature
FileInputStream imageStream = new FileInputStream("signature.png");
signature.setSignatureImage(imageStream);
// Apply the digital signature with the visible image to the PDF
pdf.signDigitalSignature(signature);
// Save the signed PDF with the visible signature image embedded
pdf.saveAs(Path.of("agreement-signed.pdf"));
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/visible-signature-image.java
import java.io.FileInputStream;
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF document to sign
PdfDocument pdf = PdfDocument.fromFile(Path.of("agreement.pdf"));
// Build the PdfSignature from a PFX certificate
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Set signing metadata
signature.setSigningContact("Alice Johnson");
signature.setSigningLocation("Chicago, IL");
signature.setSigningReason("Agreement Authorization");
// Open the signature image file and attach it to the signature
FileInputStream imageStream = new FileInputStream("signature.png");
signature.setSignatureImage(imageStream);
// Apply the digital signature with the visible image to the PDF
pdf.signDigitalSignature(signature);
// Save the signed PDF with the visible signature image embedded
pdf.saveAs(Path.of("agreement-signed.pdf"));
}
}
L'image de signature ne remplace pas la protection cryptographique; le timbre graphique et le certificat sous-jacent restent tous deux partie du résultat signé. Les formats PNG et JPEG sont pris en charge pour l'image de signature.
Comment puis-je certifier un PDF avec un niveau de permission spécifique ?
La certification d'un PDF diffère de l'ajout d'une signature d'approbation. Lorsque vous appelez pdf.certify(PdfSignature, PdfCertificationLevel), vous signez le document en tant qu'auteur et spécifiez les types de modifications autorisées par les utilisateurs suivants. Un PDF certifié affiche un ruban bleu ou un indicateur de confiance similaire dans Adobe Acrobat, signalant aux destinataires que le document provient d'une source vérifiée.
IronPDF propose trois niveaux de certification via l'énumération PdfCertificationLevel :
PdfCertificationLevel.NO_CHANGES_ALLOWED: le document est entièrement verrouillé après certification ; aucune autre modification n'est permise.PdfCertificationLevel.FORM_FILLING: les destinataires peuvent remplir les champs du formulaire mais ne peuvent pas ajouter de commentaires, d'annotations ou d'autres modifications.PdfCertificationLevel.FORM_FILLING_AND_ANNOTATIONS: les destinataires peuvent remplir les champs du formulaire et ajouter des annotations, mais les modifications structurelles restent interdites.
Étant donné qu'une signature de certification doit être la première signature apposée sur un document, appelez certify() avant d'appliquer toute signature d'approbation provenant d'autres parties.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF that will be certified
PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));
// Create the PdfSignature from the author's certificate
PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");
// Set author metadata for the certification signature
signature.setSigningContact("Legal Department");
signature.setSigningLocation("San Francisco, CA");
signature.setSigningReason("Official Publication");
// Certify the document with NO_CHANGES_ALLOWED to lock it completely
// Use FORM_FILLING to allow form field input after certification
// Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);
// Save the certified PDF
pdf.saveAs(Path.of("report-certified.pdf"));
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/certify-pdf.java
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.ironpdf.signature.PdfCertificationLevel;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF that will be certified
PdfDocument pdf = PdfDocument.fromFile(Path.of("report.pdf"));
// Create the PdfSignature from the author's certificate
PdfSignature signature = new PdfSignature("author-certificate.pfx", "password123");
// Set author metadata for the certification signature
signature.setSigningContact("Legal Department");
signature.setSigningLocation("San Francisco, CA");
signature.setSigningReason("Official Publication");
// Certify the document with NO_CHANGES_ALLOWED to lock it completely
// Use FORM_FILLING to allow form field input after certification
// Use FORM_FILLING_AND_ANNOTATIONS to also permit annotations
pdf.certify(signature, PdfCertificationLevel.NO_CHANGES_ALLOWED);
// Save the certified PDF
pdf.saveAs(Path.of("report-certified.pdf"));
}
}
Une fois certifié avec NO_CHANGES_ALLOWED, toute tentative de modification du PDF invalidera la signature de certification et les lecteurs de PDF afficheront un avertissement. Choisissez FORM_FILLING ou FORM_FILLING_AND_ANNOTATIONS lorsque le document certifié doit être complété ou annoté par des destinataires en aval sans invalider la certification de l'auteur.
Comment puis-je ajouter un horodatage à une signature numérique ?
Un serveur d'Autorité de Horodatage (TSA) fournit un jeton temporel signé cryptographiquement qui est intégré aux côtés de la signature dans le PDF. Cet horodatage prouve quand la signature a été appliquée, indépendamment de l'horloge locale du signataire. La validité à long terme dépend des horodatages : même après l'expiration d'un certificat de signature, un horodatage fiable permet aux validateurs de confirmer que la signature a été créée alors que le certificat était encore valide.
Pour activer l'horodatage, définissez deux propriétés sur l'objet PdfSignature avant la signature :
setTimestampHashAlgorithm(PdfHashAlgorithm): spécifie l'algorithme de hachage à utiliser lors du calcul du jeton d'horodatage.PdfHashAlgorithm.SHA256est le choix standard.setTimestampUrl(String): le point de terminaison HTTP ou HTTPS du serveur TSA qui émettra le jeton d'horodatage.
Plusieurs serveurs TSA sont disponibles sans frais pour les tests et une utilisation en production à faible volume. https://freetsa.org/tsr et http://timestamp.digicert.com sont deux points de terminaison couramment utilisés.
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF to sign with a timestamp
PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));
// Construct the PdfSignature from the certificate file
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Set signature metadata
signature.setSigningContact("Finance Team");
signature.setSigningLocation("Seattle, WA");
signature.setSigningReason("Invoice Authorization");
// Configure the timestamp: set the hash algorithm and TSA endpoint
signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
signature.setTimestampUrl("https://freetsa.org/tsr");
// Apply the digital signature; IronPDF will contact the TSA to obtain
// and embed a timestamp token alongside the cryptographic signature
pdf.signDigitalSignature(signature);
// Save the timestamped, signed PDF
pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
}
}
//:path=/static-assets/ironpdf-java/content-code-examples/how-to/how-to-digitally-sign-pdfs-java-tutorial/timestamp-signature.java
import java.io.IOException ;
import java.nio.file.Path;
import com.ironsoftware.IronPdf.License;
import com.ironsoftware.ironpdf.PdfDocument ;
import com.ironsoftware.ironpdf.signature.PdfHashAlgorithm;
import com.ironsoftware.IronPdf.Signature.PdfSignature;
public class Main {
public static void main(String[] args) throws IOException {
// Définissez la clé de licence IronPDF
License.setLicenseKey("IronPDF-MYLICENSE-KEY-1EF01") ;
// Load the PDF to sign with a timestamp
PdfDocument pdf = PdfDocument.fromFile(Path.of("invoice.pdf"));
// Construct the PdfSignature from the certificate file
PdfSignature signature = new PdfSignature("certificate.pfx", "password123");
// Set signature metadata
signature.setSigningContact("Finance Team");
signature.setSigningLocation("Seattle, WA");
signature.setSigningReason("Invoice Authorization");
// Configure the timestamp: set the hash algorithm and TSA endpoint
signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256);
signature.setTimestampUrl("https://freetsa.org/tsr");
// Apply the digital signature; IronPDF will contact the TSA to obtain
// and embed a timestamp token alongside the cryptographic signature
pdf.signDigitalSignature(signature);
// Save the timestamped, signed PDF
pdf.saveAs(Path.of("invoice-signed-timestamped.pdf"));
}
}
Lorsque le TSA est inaccessible au moment de la signature, IronPDF lancera une exception; vérifiez l'accès réseau et l'URL de l'endpoint TSA avant de déployer en production. Pour les flux de travail de production à haut volume, envisagez un abonnement commercial TSA pour garantir disponibilité et garanties de débit.
Quelles sont les prochaines étapes pour signer numériquement des PDF en Java ?
La classe PdfSignature d'IronPDF couvre l'ensemble des exigences en matière de signature PDF : signatures d'approbation avec métadonnées de certificat, tampons graphiques visibles, certification PDF avec niveaux de contrôle d'accès et horodatages certifiés par la TSA pour une validité à long terme. Pour étendre votre flux de travail PDF au-delà de la signature, explorez ces ressources connexes :
- Créer des formulaires PDF en Java : construisez des champs de formulaire remplissables qui peuvent être complétés après la certification d'un PDF
- Remplir des formulaires PDF en Java : remplissez par programmation les champs de formulaire dans des documents PDF existants
- Ajouter des annotations aux PDF en Java : attachez des commentaires, surlignages, et annotations à des emplacements de page spécifiques
- Fusionner des PDFs en Java : combinez plusieurs documents avant d'appliquer une signature de certification unique
- Exemples IronPDF for Java : copiez-collez des exemples de code couvrant toute l'API Java d'IronPDF
Démarrez votre essai gratuit pour ajouter des signatures numériques à votre flux de travail PDF Java. Pour acheter une licence pour une utilisation en production, consultez les options de licence.
Questions Fréquemment Posées
Comment signer numériquement un PDF en Java avec IronPDF ?
Chargez votre PDF avec PdfDocument.fromFile(), créez une PdfSignature en utilisant le chemin de votre fichier de certificat PFX et son mot de passe, définissez éventuellement les métadonnées avec setSigningContact(), setSigningLocation(), et setSigningReason(), puis appelez pdf.signDigitalSignature(signature) et enregistrez avec pdf.saveAs().
Quelle est la différence entre signDigitalSignature() et certify() dans IronPDF ?
signDigitalSignature() ajoute une signature d'approbation qui enregistre l'approbation d'un signataire. Plusieurs signatures d'approbation peuvent être ajoutées en séquence. certify() ajoute une signature d'auteur qui doit être la première dans le document et défini un PdfCertificationLevel contrôlant les modifications que les signataires suivants peuvent effectuer.
Comment puis-je ajouter une image de signature visible à un PDF signé en Java ?
Ouvrez le fichier image en tant que FileInputStream et passez-le à signature.setSignatureImage(imageStream) avant d'appeler signDigitalSignature(). L'image est intégrée dans le champ de signature sur la page aux côtés de la signature cryptographique.
Quels niveaux de certification PDF IronPDF supporte-t-il ?
IronPDF supporte trois niveaux via l'énumération PdfCertificationLevel : NO_CHANGES_ALLOWED verrouille complètement le document, FORM_FILLING permet uniquement l'entrée des champs de formulaire, et FORM_FILLING_AND_ANNOTATIONS permet les champs de formulaire et les annotations tout en empêchant les modifications structurelles.
Comment puis-je ajouter un horodatage à une signature numérique en Java ?
Définissez signature.setTimestampHashAlgorithm(PdfHashAlgorithm.SHA256) et signature.setTimestampUrl("https://freetsa.org/tsr") sur la PdfSignature avant d'appeler signDigitalSignature(). IronPDF contacte le serveur TSA et intègre le jeton d'horodatage dans le PDF signé.
Quel format de fichier de certificat IronPDF nécessite-t-il pour la signature de PDF ?
IronPDF nécessite un fichier de certificat PFX ou P12, qui est une archive PKCS#12 contenant la clé privée et le certificat public. Les certificats autosignés fonctionnent pour le développement ; pour un usage en production, obtenez un certificat auprès d'une autorité de certification de confiance comme DigiCert ou GlobalSign.
Quelles sont les prérequis pour signer numériquement des PDFs avec IronPDF en Java ?
Vous avez besoin de Java 8 ou plus, de la dépendance IronPDF ajoutée via Maven ou Gradle, d'une clé de licence valide définie avec License.setLicenseKey(), et d'un fichier de certificat PFX ou P12 avec son mot de passe.


