Comment créer une signature de code-barres Java pour les documents PDF

Introduction

Dans ce tutoriel, vous apprendrez comment créer une signature de code-barres Java pour des fichiers PDF en utilisant GroupDocs.Signature. Que vous ayez besoin d’intégrer des codes produit, des identifiants d’audit ou toute donnée structurée dans un contrat, les signatures de code-barres vous permettent d’ajouter des informations lisibles par machine qui peuvent être scannées instantanément tout en maintenant le document cryptographiquement sécurisé. Nous parcourrons la configuration, le code, la personnalisation et les meilleures pratiques afin que vous puissiez commencer à ajouter des signatures de code-barres à vos PDF en quelques minutes.

Réponses rapides

  • Quelle bibliothèque ajoute des signatures de code-barres en Java ? GroupDocs.Signature for Java.
  • Quel type de code-barres est le meilleur pour le commerce de détail ? GS1CompositeBar (standard de l’industrie pour le suivi des produits).
  • Ai‑je besoin d’une licence pour la production ? Oui – une licence GroupDocs achetée est requise.
  • Puis‑je ajouter à la fois des signatures numériques et des signatures de code‑barres ? Absolument ; combinez‑les pour la sécurité et la lisibilité.
  • Le code est‑il compatible avec Java 11 et versions ultérieures ? Oui, l’API fonctionne avec JDK 8+.

Qu’est‑ce que create barcode signature java ?

create barcode signature java désigne le processus d’insertion programmatique d’un code‑barres dans un PDF à l’aide de code Java. GroupDocs.Signature fournit une API simple qui génère l’image du code‑barres, la positionne sur la page et enregistre le document signé en une seule opération fluide.

Pourquoi utiliser les signatures de code‑barres ?

Les signatures de code‑barres vous offrent des métadonnées lisibles par machine à l’intérieur d’un PDF signé légalement. Elles permettent une vérification visuelle instantanée, rationalisent le scannage de la chaîne d’approvisionnement et permettent aux systèmes en aval d’extraire des données structurées sans ouvrir le fichier. Plus de 60 formats de code‑barres sont pris en charge, et GS1CompositeBar peut encoder des identifiants de produit, des numéros de série et des codes de lot dans un symbole compact unique — parfait pour le commerce de détail, la santé et la finance.

Prérequis

  • Kit de développement Java : JDK 8 ou plus récent (Java 11, 17, 21 fonctionnent tous).
  • Outil de construction : Maven ou Gradle – choisissez celui que vous préférez.
  • IDE : IntelliJ IDEA, Eclipse ou VS Code.
  • Bibliothèque GroupDocs.Signature : Ajoutez la dépendance comme indiqué ci‑dessous.
  • Licence : Essai gratuit pour le développement ; une licence achetée pour la production.

Ajout de GroupDocs.Signature à votre projet

  • Pour les utilisateurs Maven, ajoutez ceci à votre pom.xml :
<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>
  • Pour les utilisateurs Gradle, ajoutez ceci à votre build.gradle :
implementation 'com.groupdocs:groupdocs-signature:23.12'

À propos de la licence : GroupDocs propose un essai gratuit idéal pour les tests et le développement. Vous pouvez le télécharger depuis leur page des releases. Lorsque vous êtes prêt pour la production, vous devrez acheter une licence ou demander une licence temporaire sur le site Web GroupDocs. Pour une utilisation détaillée de l’API, consultez la Référence API, le Guide du développeur pour des instructions pas à pas, et posez vos questions sur le Forum GroupDocs. Le même lien d’achat est également indiqué comme la page d’achat.

Comment configurer GroupDocs.Signature en Java ?

La classe Signature représente un document et fournit des méthodes pour appliquer des signatures, rechercher du contenu et gérer les ressources. Créez une instance Signature pour ouvrir votre PDF et le préparer à la signature. La classe Signature est le composant central de GroupDocs.Signature qui gère le chargement du document, la gestion des ressources et le flux de travail de signature, garantissant que toutes les opérations sont effectuées de manière sûre et efficace.

import com.groupdocs.signature.Signature;

// Point to your PDF file
Signature signature = new Signature("path/to/your/document.pdf");

Important : Toujours libérer l’objet Signature après utilisation — cela libère les poignées de fichier et libère la mémoire.

Comment configurer les options de signature de code‑barres ?

La classe BarcodeSignOptions définit chaque aspect du code‑barres que vous allez intégrer, de la charge utile de données au style visuel. Elle agit comme un conteneur pour tous les paramètres liés aux codes‑barres tels que le type, la taille, les couleurs et le placement. Ci‑dessous se trouve une configuration minimale qui crée un code‑barres GS1CompositeBar contenant un GTIN et un numéro de série, et qui montre également comment définir les marges et les couleurs d’arrière‑plan pour une lisibilité optimale.

import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

// Create barcode with GS1 format data
BarcodeSignOptions options = new BarcodeSignOptions("(01)03212345678906/(21)A1B2C3D4E5F6G7H8");
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

La chaîne "(01)03212345678906/(21)A1B2C3D4E5F6G7H8" suit la norme GS1 :

  • (01) = GTIN (identifiant global du produit)
  • 03212345678906 = code produit réel
  • (21) = identifiant du numéro de série
  • A1B2C3D4E5F6G7H8 = série unique

Vous pouvez remplacer cela par n’importe quel texte pour les QR codes, Code128, DataMatrix, etc. Plus de 60 types de code‑barres sont pris en charge — consultez la documentation GroupDocs pour la liste complète.

Comment positionner et personnaliser le code‑barres ?

Le placement et le style sont contrôlés via le même objet BarcodeSignOptions. Utilisez setTop, setLeft, setWidth et setHeight pour définir des coordonnées et dimensions précises. En définissant setAllPages(true), le code‑barres est ajouté automatiquement à chaque page, tandis que setPageNumber(1) cible une page spécifique. Vous pouvez également faire pivoter le code‑barres, ajouter une couleur d’arrière‑plan ou ajuster les marges pour garantir que le code‑barres ne chevauche pas le contenu existant.

// Set position and apply to all pages
options.setTop(200); // Set vertical position
options.setAllPages(true);

Pour une mise en page plus précise, vous pouvez également ancrer le code‑barres à une page spécifique, le faire pivoter ou ajouter une couleur d’arrière‑plan :

options.setLeft(100);        // 100 pixels from left edge
options.setTop(200);         // 200 pixels from top
options.setWidth(300);       // Barcode width in pixels
options.setHeight(100);      // Barcode height in pixels
options.setPageNumber(1);    // Only sign page 1 (removes setAllPages)

La personnalisation visuelle (couleurs avant/arrière‑plan, marges, libellés de texte) est disponible via des propriétés supplémentaires :

options.setMargin(new Padding(10));           // Add padding around barcode
options.setBackground(new Background());       // Set background color
options.setForeColor(Color.BLACK);            // Barcode color
options.setBackgroundColor(Color.WHITE);      // Background color

Comment signer le document avec un code‑barres ?

La méthode sign sur l’instance Signature applique les options configurées et écrit le document signé sur le disque. Elle renvoie un objet SignResult qui indique combien de signatures ont été appliquées et si des avertissements sont survenus. Cette méthode gère toute la manipulation PDF de bas niveau, vous n’avez donc pas besoin de travailler directement avec des bibliothèques PDF.

try {
    SignResult signResult = signature.sign(outputPath, options);
    System.out.println("Document signed successfully!");
    System.out.println("Signed document saved to: " + outputPath);
} finally {
    if (signature != null) {
        signature.dispose();
    }
}

Le bloc try‑finally environnant garantit que l’objet Signature est libéré même en cas d’exception, évitant les fuites de poignées de fichier.

Vous pouvez inspecter le SignResult pour confirmer le succès :

if (signResult.getSucceeded().size() > 0) {
    System.out.println("Successfully added " + signResult.getSucceeded().size() + " signature(s)");
}

Exemple complet fonctionnel

En rassemblant tout, voici une méthode unique qui charge un PDF, ajoute un code‑barres GS1CompositeBar et enregistre le fichier signé :

import com.groupdocs.signature.Signature;
import com.groupdocs.signature.options.sign.BarcodeSignOptions;
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;

public class BarcodeSigningExample {
    
    public void signPdfWithBarcode(String inputPath, String outputPath) {
        Signature signature = null;
        
        try {
            // Initialize signature
            signature = new Signature(inputPath);
            
            // Configure barcode
            BarcodeSignOptions options = new BarcodeSignOptions(
                "(01)03212345678906/(21)A1B2C3D4E5F6G7H8"
            );
            options.setEncodeType(BarcodeTypes.GS1CompositeBar);
            options.setTop(200);
            options.setAllPages(true);
            
            // Sign and save
            SignResult result = signature.sign(outputPath, options);
            
            System.out.println("Signing completed: " + result.getSucceeded().size() + " signature(s) added");
            
        } catch (Exception e) {
            System.err.println("Error signing document: " + e.getMessage());
            e.printStackTrace();
        } finally {
            if (signature != null) {
                signature.dispose();
            }
        }
    }
}

Cette méthode est prête pour la production : elle valide les entrées, gère les ressources et rapporte le résultat.

Comment ajouter à la fois des signatures numériques et des signatures de code‑barres ?

Pour une sécurité maximale, ajoutez d’abord une signature numérique cryptographique, puis superposez le code‑barres. La signature numérique garantit l’intégrité du document, tandis que le code‑barres offre une vérification visuelle rapide et des données lisibles par machine. Utilisez la classe DigitalSignOptions pour la première étape, puis appliquez BarcodeSignOptions comme indiqué ci‑dessus.

// First, add digital signature
DigitalSignOptions digitalOptions = new DigitalSignOptions("certificate.pfx");
digitalOptions.setPassword("cert_password");
signature.sign(outputPath, digitalOptions);

// Then, add barcode on top
BarcodeSignOptions barcodeOptions = new BarcodeSignOptions("DATA");
barcodeOptions.setEncodeType(BarcodeTypes.QR);
signature.sign(outputPath, barcodeOptions);

Le PDF résultant est à la fois juridiquement contraignant (signature numérique) et immédiatement lisible par n’importe quel scanner de code‑barres.

Travailler avec différents types de code‑barres

Changer de format de code‑barres est aussi simple que de modifier une valeur d’énumération. Voici un exemple qui remplace le GS1CompositeBar par un QR code :

// Define barcode sign options with sample text
BarcodeSignOptions options = new BarcodeSignOptions("Sample Text");

// Assign specific barcode type
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

Et voici le même changement pour un code‑barres linéaire Code128 :

options.setEncodeType(BarcodeTypes.QR);           // QR code
options.setEncodeType(BarcodeTypes.Code128);      // Code 128
options.setEncodeType(BarcodeTypes.DataMatrix);   // Data Matrix

Rappelez‑vous que chaque type de code‑barres a ses propres limites de capacité de données — les QR codes peuvent contenir des milliers de caractères, tandis que le Code39 est limité aux alphanumériques.

Cas d’utilisation réels

Gestion de la chaîne d’approvisionnement

Intégrer un GS1CompositeBar sur les manifestes d’expédition permet au personnel d’entrepôt de scanner les numéros de commande, les destinations et les codes de lot sans ouvrir le PDF.

BarcodeSignOptions options = new BarcodeSignOptions(
    "(01)" + gtin + "/(21)" + serialNumber + "/(10)" + batchNumber
);
options.setEncodeType(BarcodeTypes.GS1CompositeBar);

Documentation médicale

Les QR codes sur les formulaires de consentement peuvent être scannés pour classer automatiquement le document sous le dossier patient correct.

String patientData = "PATIENT_ID:" + patientId + "|DOC_TYPE:CONSENT|DATE:" + dateString;
BarcodeSignOptions options = new BarcodeSignOptions(patientData);
options.setEncodeType(BarcodeTypes.QR);

Services financiers

Les identifiants de transaction encodés dans un code‑barres permettent aux auditeurs de vérifier la conformité avec un simple scan.

String complianceData = "TXN:" + transactionId + "|AGENT:" + agentId + "|BRANCH:" + branchCode;
BarcodeSignOptions options = new BarcodeSignOptions(complianceData);
options.setEncodeType(BarcodeTypes.PDF417);

Contrôle qualité en fabrication

Les rapports d’inspection signés avec des codes‑barres contenant les numéros de lot et les identifiants des inspecteurs rendent l’analyse des causes racines instantanée.

String qcData = "BATCH:" + batchNumber + "|INSPECTOR:" + inspectorId + "|RESULT:" + passFailStatus;
BarcodeSignOptions options = new BarcodeSignOptions(qcData);
options.setEncodeType(BarcodeTypes.DataMatrix);

Problèmes d’implémentation courants

Problème 1 : Exception « File is already in use »

Réponse : Le fichier reste verrouillé si une instance précédente de Signature n’a pas été libérée. Enveloppez toujours le code de signature dans un bloc try‑finally et appelez signature.dispose().

Signature signature = null;
try {
    signature = new Signature(filePath);
    // ... your code ...
} finally {
    if (signature != null) {
        signature.dispose();
    }
}

Problème 2 : Le code‑barres n’apparaît pas dans le PDF

Réponse : Vérifiez que les valeurs setTop/setLeft sont dans les limites de la page, augmentez la largeur/hauteur du code‑barres, et assurez‑vous que les couleurs avant/arrière‑plan contrastent avec le fond de la page.

// Make sure dimensions are reasonable
options.setTop(100);      // Not 10000
options.setLeft(100);
options.setWidth(300);    // At least 200 pixels for readability
options.setHeight(100);

// Ensure contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);

Problème 3 : Exception « Invalid Barcode Data »

Réponse : Les codes‑barres GS1 nécessitent une notation stricte avec parenthèses. Utilisez les identifiants d’application corrects (par ex., (01), (21)) et évitez les caractères non pris en charge.

// Correct:
"(01)03212345678906/(21)ABC123"

// Incorrect:
"03212345678906ABC123"

Problème 4 : OutOfMemoryError avec de gros PDF

Réponse : Augmentez le tas JVM (-Xmx4G) et envisagez de signer les pages individuellement au lieu d’utiliser setAllPages(true) pour les documents très volumineux.

java -Xmx2G -jar your-application.jar

Problème 5 : Échec du scan du code‑barres

Réponse : Assurez‑vous que le code‑barres fait au moins 200 × 100 px, utilise des couleurs à fort contraste, et n’est pas déformé par la compression du PDF.

// Increase size
options.setWidth(400);
options.setHeight(150);

// Maximize contrast
options.setForeColor(Color.BLACK);
options.setBackgroundColor(Color.WHITE);

// Add quiet zone (blank space around barcode)
options.setMargin(new Padding(10));

Sécurité et validation

Les signatures de code‑barres sont‑elles sécurisées ?

Un code‑barres seul n’est pas protégé cryptographiquement, donc n’importe qui pourrait en générer un nouveau. Associez‑le à une signature numérique pour garantir à la fois l’authenticité et la lisibilité. Le modèle de double signature (numérique d’abord, code‑barres ensuite) vous offre une force juridique ainsi qu’une commodité opérationnelle.

Validation des données du code‑barres

Après le scan, vérifiez que la signature numérique du document est toujours valide et que la charge du code‑barres correspond aux modèles attendus. Utilisez l’API search() de GroupDocs avec BarcodeSearchOptions pour extraire et valider automatiquement le contenu du code‑barres.

public boolean validateScannedBarcode(String scannedData, String documentPath) {
    // Verify digital signature first
    if (!verifyDigitalSignature(documentPath)) {
        return false;
    }
    
    // Validate barcode format
    if (!scannedData.matches("(01)\\d{14}/(21)[A-Z0-9]+")) {
        return false;
    }
    
    // Check against database
    String productId = extractProductId(scannedData);
    return database.productExists(productId);
}

Considérations de performance

Gestion des ressources

Toujours libérer les objets Signature après chaque opération pour éviter les fuites de mémoire :

signature.dispose();

Lors du traitement de nombreux fichiers, créez et libérez un nouveau Signature par document :

for (String filePath : documentPaths) {
    Signature signature = null;
    try {
        signature = new Signature(filePath);
        // ... signing logic ...
    } finally {
        if (signature != null) {
            signature.dispose();
        }
    }
}

Traitement par lots

Pour de petits lots (< 100 fichiers), le traitement séquentiel est simple :

for (String path : paths) {
    signDocument(path);
}

Pour des charges de travail plus importantes, le traitement parallèle peut accélérer les choses — mais surveillez la pression I/O et limitez le nombre de threads à 4‑8 :

paths.parallelStream().forEach(path -> signDocument(path));

Optimisation de la mémoire pour les gros PDF

Augmentez la taille du tas, traitez les pages individuellement et libérez les références après chaque étape. Cela empêche les OutOfMemoryError sur les documents de plus de 50 Mo.

Mise en cache des options de code‑barres

Si vous réutilisez la même configuration de code‑barres sur de nombreux fichiers, mettez en cache l’instance BarcodeSignOptions :

// Create once, reuse many times
private static BarcodeSignOptions createStandardBarcodeOptions(String data) {
    BarcodeSignOptions options = new BarcodeSignOptions(data);
    options.setEncodeType(BarcodeTypes.GS1CompositeBar);
    options.setTop(200);
    options.setAllPages(true);
    return options;
}

Fonctionnalités avancées

Signatures multiples sur un même document

Ajoutez plusieurs codes‑barres (ou mélangez avec des signatures numériques) en appelant sign plusieurs fois avec différents objets d’options :

// Add QR code in top-left
BarcodeSignOptions qrOptions = new BarcodeSignOptions("https://example.com");
qrOptions.setEncodeType(BarcodeTypes.QR);
qrOptions.setTop(50);
qrOptions.setLeft(50);
signature.sign(outputPath, qrOptions);

// Add GS1 barcode in bottom-right
BarcodeSignOptions gs1Options = new BarcodeSignOptions("(01)03212345678906");
gs1Options.setEncodeType(BarcodeTypes.GS1CompositeBar);
gs1Options.setTop(700);
gs1Options.setLeft(400);
signature.sign(outputPath, gs1Options);

Contenu dynamique du code‑barres

Générez les données du code‑barres à partir des métadonnées du document, des horodatages ou des recherches en base de données :

// Extract data from PDF or database
String orderId = extractOrderIdFromPdf(filePath);
String timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);
String barcodeData = String.format("ORDER:%s|TIME:%s", orderId, timestamp);

BarcodeSignOptions options = new BarcodeSignOptions(barcodeData);

Intégration avec Spring Boot

Exposez un point d’accès REST qui reçoit un PDF, ajoute un code‑barres et renvoie le fichier signé :

@Service
public class DocumentSigningService {
    public void signWithBarcode(MultipartFile file, String barcodeData) {
        // ... implementation ...
    }
}

Exemple d’API REST

Un contrôleur minimal qui délègue au service de signature :

@PostMapping("/sign-document")
public ResponseEntity<byte[]> signDocument(
    @RequestParam("file") MultipartFile file,
    @RequestParam("barcode") String barcodeData
) {
    // Sign document and return as byte array
}

Foire aux questions

Q : Qu’est‑ce qu’un code‑barres GS1CompositeBar ?
R : Un GS1CompositeBar combine des composants linéaires et 2D pour stocker des identifiants de produit, des numéros de série et d’autres données dans un symbole scannable unique, largement utilisé dans le commerce de détail et la logistique.

Q : Puis‑je utiliser d’autres types de code‑barres que le GS1CompositeBar ?
R : Oui — GroupDocs.Signature prend en charge plus de 60 types, y compris QR, Code128, DataMatrix, PDF417 et Aztec. Changez la valeur de setEncodeType() pour modifier le format.

Q : Ai‑je besoin d’une licence pour une utilisation en production ?
R : Une licence GroupDocs valide est requise pour les déploiements en production. Un essai gratuit est disponible pour le développement et les tests.

Q : Les scanners de code‑barres liront‑ils les codes‑barres des PDF signés ?
R : Absolument, à condition que le code‑barres mesure au moins 200 × 100 px et possède un contraste suffisant. Les applications de scan sur smartphone fonctionnent à l’écran ; les scanners matériels fonctionnent sur les copies imprimées.

Q : Comment gérer les erreurs lors de la signature ?
R : Enveloppez votre code dans des blocs try‑catch, consignez les traces complètes de la pile, et appelez toujours signature.dispose() dans un bloc finally pour libérer les ressources.

Q : Puis‑je signer d’autres formats de documents ?
R : Oui — GroupDocs.Signature prend également en charge DOCX, XLSX, PPTX, les images et bien d’autres. Il suffit de changer l’extension du fichier d’entrée ; l’API reste la même.

Q : Existe‑t‑il des limites de taille de fichier ?
R : Aucun plafond strict, mais les documents de plus de 50 Mo peuvent nécessiter un tas JVM plus grand et un traitement page par page pour rester efficaces en mémoire.

Q : Comment signer des PDF stockés dans le cloud ?
R : Téléchargez le fichier vers un chemin local temporaire, appliquez la signature, puis renvoyez‑le dans votre bucket cloud. Nettoyez les fichiers temporaires ensuite.

Conclusion

Vous disposez maintenant d’un guide complet et prêt pour la production pour créer une signature de code‑barres Java pour les documents PDF. En combinant des signatures numériques cryptographiques avec des codes‑barres lisibles par machine, vous obtenez à la fois une force juridique et une efficacité opérationnelle dans les cas d’utilisation de la chaîne d’approvisionnement, de la santé, de la finance et de la fabrication. Expérimentez différents types de code‑barres, intégrez le code dans vos services existants et explorez le traitement par lots pour des déploiements à grande échelle.


Last Updated: 2026-05-21
Tested With: GroupDocs.Signature 23.10 for Java
Author: GroupDocs

String filePath = "YOUR_DOCUMENT_DIRECTORY" + "/sample.pdf";
String fileName = new java.io.File(filePath).getName();
String outputPath = "YOUR_OUTPUT_DIRECTORY" + "/SignedWithBarcodeGS1CompositeBar/" + fileName;
String documentDir = System.getenv("DOCUMENT_DIR");
String outputDir = System.getenv("OUTPUT_DIR");
Signature signature = new Signature(filePath);

Tutoriels associés