Signer des documents PDF à partir d'une carte à puce en Java

Le référentiel Java actuel n’inclut pas d’exemple de signature de carte à puce dédié basé sur la source sous facades/pdffilesignature, mais le flux de travail suivant montre le modèle d’API typique pour signer un PDF avec un certificat sélectionné dans un magasin de certificats local.

Signer un document PDF à partir d’une carte à puce

  1. Ouvrez le PDF source Document.
  2. Créez une façade PdfFileSignature et liez le document PDF source.
  3. Récupérez le certificat local et créez la ExternalSignature requise.
  4. Configurez l’apparence de la signature visuelle et la cible Rectangle.
  5. Appliquez la signature au document PDF via PdfFileSignature.
  6. Enregistrez le document PDF mis à jour.
  7. Liez le document chargé à la façade PdfFileSignature avec bindPdf(...).
  8. Récupérez le certificat local qui représente les informations d’identification de la carte à puce en appelant getLocalCertificate().
  9. Vérifiez si un certificat a été trouvé. Sinon, enregistrez le fichier de sortie inchangé et arrêtez le flux de travail.
  10. Créez une ExternalSignature à partir du certificat sélectionné.
  11. Définissez l’image d’apparence de la signature visuelle avec setSignatureAppearance(...).
  12. Appelez sign(...) avec la page cible, le motif, le contact, l’emplacement, l’indicateur de visibilité, la signature Rectangle et l’objet de signature externe.
  13. Enregistrez le PDF signé dans le chemin de sortie.
public static void signWithSmartCard(Path inputFile, Path outputFile, Path pngFile) {
    try (Document document = new Document(inputFile.toString());
            PdfFileSignature pdfSignature = new PdfFileSignature()) {
        pdfSignature.bindPdf(document);
        X509Certificate2 selectedCertificate = getLocalCertificate();
        if (selectedCertificate == null) {
            System.out.println("Local certificate was not found.");
            document.save(outputFile.toString());
            return;
        }

        ExternalSignature externalSignature = new ExternalSignature(selectedCertificate, null);
        pdfSignature.setSignatureAppearance(pngFile.toString());
        pdfSignature.sign(1, "Reason", "Contact", "Location", true,
                new java.awt.Rectangle(100, 100, 200, 200), externalSignature);
        pdfSignature.save(outputFile.toString());
    }
}