Comment lire un PDF de code QR avec Java
Introduction
Vous avez déjà eu besoin d’extraire des informations de code‑barres à partir de centaines de factures PDF, d’étiquettes d’expédition ou de documents d’inventaire ? Parcourir manuellement les pages est fastidieux et source d’erreurs. Que vous construisiez un système automatisé de traitement de documents ou que vous vérifiiez l’authenticité d’un produit, trouver efficacement les codes‑barres dans les PDF peut être un vrai défi.
Dans ce guide, vous apprendrez à read QR code PDF documents de façon efficace en utilisant l’API GroupDocs.Signature. Cette puissante API transforme ce qui pourrait prendre des heures de travail manuel en quelques lignes de code seulement. Vous pouvez scanner des documents entiers, localiser des types de code‑barres spécifiques (comme les QR codes ou Code128) et extraire leurs données automatiquement.
Ce que vous apprendrez :
- Installer GroupDocs.Signature pour Java en quelques minutes
- Rechercher des signatures de code‑barres dans des documents PDF
- Configurer les options de recherche pour des résultats précis et ciblés
- Gérer différents types de code‑barres (QR codes, EAN, Code128, etc.)
- Résoudre les problèmes courants et optimiser les performances
Allons‑y !
Réponses rapides
- GroupDocs.Signature peut‑il lire les codes QR à partir de PDF ? Oui, il détecte les QR, Data Matrix, PDF417 et de nombreux codes‑barres 1D.
- Ai‑je besoin d’une licence pour une utilisation en production ? Une licence commerciale est requise ; un essai gratuit est disponible pour l’évaluation.
- Quelle version de Java est requise ? Java 8+ (Java 11+ recommandé).
- Comment limiter la recherche à des pages spécifiques ? Utilisez
BarcodeSearchOptions.setAllPages(false)et définissezsetPageNumber(). - L’API est‑elle thread‑safe pour le traitement par lots ? Oui, à condition de créer une instance
Signaturedistincte par thread.
Pourquoi rechercher des codes‑barres dans les PDF ?
Avant d’entrer dans le technique, voici pourquoi cela compte dans les applications réelles :
Scénarios d’entreprise courants
- Traitement des factures – Extraire automatiquement les numéros de commande ou les codes de suivi à partir des factures fournisseurs.
- Gestion des stocks – Scanner les catalogues produits et extraire les codes‑barres SKU pour mettre à jour la base de données.
- Expédition & logistique – Vérifier les codes de suivi des colis dans les manifestes d’expédition.
- Authentification de documents – Valider les documents signés en vérifiant les codes‑barres de sécurité intégrés.
- Dossiers de santé – Extraire les identifiants patients ou les codes de prescription à partir des documents médicaux.
L’API GroupDocs.Signature se charge du travail lourd — vous n’avez pas à vous soucier du traitement d’image, des algorithmes de décodage de code‑barres ou des complexités de rendu PDF. Tout est intégré.
Prérequis
Avant de commencer ce tutoriel, assurez‑vous d’avoir les éléments suivants prêts :
Bibliothèques et dépendances requises
Vous devez inclure la bibliothèque GroupDocs.Signature dans votre projet Java. Voici comment l’ajouter avec Maven ou Gradle :
Maven :
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle :
implementation 'com.groupdocs:groupdocs-signature:23.12'
Note : Vérifiez toujours la dernière version sur GroupDocs.Signature for Java releases. Utiliser la version la plus récente vous assure d’obtenir les corrections de bugs et les nouvelles fonctionnalités.
Configuration de l’environnement
- JDK 8 ou supérieur – GroupDocs.Signature nécessite au minimum Java 8 (Java 11+ recommandé pour de meilleures performances).
- IDE – Tout éditeur de texte fonctionne, mais IntelliJ IDEA ou Eclipse faciliteront la vie grâce à l’autocomplétion et au débogage.
- Document PDF – Disposez d’un PDF de test contenant des codes‑barres (factures, étiquettes d’expédition ou catalogues produits sont idéaux).
Prérequis de connaissances
Vous devez être à l’aise avec :
- La syntaxe Java de base et les concepts orientés objet
- La gestion des exceptions avec les blocs
try‑catch - L’utilisation de bibliothèques externes dans votre IDE
Si vous débutez avec les bibliothèques tierces Java, ne vous inquiétez pas — nous passerons tout en revue étape par étape.
Configuration de GroupDocs.Signature pour Java
Commencer avec GroupDocs.Signature ne prend que quelques minutes. Voici le processus complet :
Étape 1 : Ajouter la dépendance
Utilisez Maven ou Gradle pour inclure la bibliothèque (voir le code ci‑dessus). Après avoir ajouté la dépendance, rafraîchissez votre projet pour télécharger les JAR.
Étape 2 : Acquisition de licence
GroupDocs propose plusieurs options de licence :
- Essai gratuit – Idéal pour les tests. Téléchargez depuis GroupDocs releases.
- Licence temporaire – Obtenez 30 jours d’accès complet via la Temporary License Page.
- Licence commerciale – Pour la production, achetez une licence sur GroupDocs Purchase.
Astuce : Commencez avec l’essai gratuit pour créer votre preuve de concept, puis passez à la version payante si l’API répond à vos besoins.
Étape 3 : Initialisation de base
Voici comment créer un objet Signature pour travailler avec votre PDF :
import com.groupdocs.signature.Signature;
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample_signed.pdf"; // Replace with your PDF path
Signature signature = new Signature(filePath);
La classe Signature est votre point d’entrée principal. Elle charge le PDF en mémoire et fournit des méthodes pour rechercher, vérifier et extraire les données de signature (y compris les codes‑barres).
Important : Assurez‑vous que le chemin du fichier est correct et que le PDF existe. Erreur fréquente ? Utiliser des antislashs sous Windows sans les échapper (C:\\Documents\\file.pdf et non C:\Documents\file.pdf).
Guide d’implémentation
Passons maintenant à la partie amusante — écrivons le code pour rechercher des codes‑barres dans votre PDF.
Recherche de signatures de code‑barres dans un document
Cette section vous montre comment scanner un PDF et localiser toutes les signatures de code‑barres. Nous décomposerons le tout en étapes digestes avec des explications pour chaque partie.
Étape 1 : Initialiser l’objet Signature
Chargez votre document PDF :
import com.groupdocs.signature.Signature;
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample_signed.pdf"; // Replace with actual file path
Signature signature = new Signature(filePath);
Ce qui se passe ici
La classe Signature ouvre votre PDF et le prépare au traitement. Pensez‑y comme à l’ouverture d’un fichier dans un éditeur de texte — le document est chargé en mémoire pour que vous puissiez le manipuler.
Note du monde réel
Si vous traitez des PDF provenant de téléchargements utilisateurs, validez toujours le chemin du fichier et vérifiez que le fichier existe avant de créer l’objet Signature. Cela évite des erreurs obscures plus tard.
Étape 2 : Créer BarcodeSearchOptions
Configurez la façon dont vous souhaitez rechercher les codes‑barres :
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
// Configure options for searching barcodes
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setAllPages(true); // Search every page in the document
Options de configuration clés
setAllPages(true): Scanne toutes les pages. Passez àfalsesi vous ne voulez vérifier que des pages spécifiques (configurables avecsetPageNumber()).- Pourquoi c’est important : Si vous traitez des factures où les codes‑barres sont toujours sur la page 1, rechercher sur toutes les pages gaspille des ressources. Pour des manifestes d’expédition multi‑pages, vous aurez besoin de
setAllPages(true).
Astuce : Vous pouvez également filtrer par type de code‑barres (voir la section Types de codes‑barres pris en charge ci‑dessous). Cela accélère les recherches quand vous connaissez exactement le format recherché.
Étape 3 : Exécuter la recherche et gérer les résultats
Lancez la recherche et traitez les résultats :
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import java.util.List;
try {
// Execute the barcode search
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Check if any barcodes were found
if (signatures.isEmpty()) {
System.out.println("No barcode signatures found in the document.");
} else {
System.out.println("Found " + signatures.size() + " barcode signature(s):\n");
// Loop through each barcode and display details
for (BarcodeSignature barcodeSignature : signatures) {
System.out.println("----------------------------------------");
System.out.println("Barcode Type: " + barcodeSignature.getEncodeType().getTypeName());
System.out.println("Barcode Text: " + barcodeSignature.getText());
System.out.println("Page Number: " + barcodeSignature.getPageNumber());
System.out.println("Position: X=" + barcodeSignature.getLeft() +
", Y=" + barcodeSignature.getTop());
System.out.println("Size: Width=" + barcodeSignature.getWidth() +
", Height=" + barcodeSignature.getHeight());
System.out.println("----------------------------------------\n");
}
}
} catch (Exception e) {
System.err.println("Error searching for barcodes: " + e.getMessage());
e.printStackTrace();
} finally {
// Always dispose of the signature object to free resources
if (signature != null) {
signature.dispose();
}
}
Ce qui se passe dans ce code
- Exécution de la recherche –
signature.search()scanne le PDF et renvoie une liste d’objetsBarcodeSignature. - Vérification du vide – S’assure que des codes‑barres ont bien été trouvés (évite les NullPointerException).
- Extraction des données – Pour chaque code‑barres, nous extrayons :
- Type – Le format du code‑barres (QR Code, Code128, EAN13, etc.)
- Text – Les données décodées (numéro de commande, code de suivi, SKU, etc.)
- Location – Numéro de page et coordonnées X/Y
- Dimensions – Largeur et hauteur (utile pour la validation)
- Gestion des erreurs – Le
try‑catchempêche les plantages en cas de problème (PDF corrompu, fichier manquant, etc.). - Nettoyage des ressources – Le bloc
finallygarantit que l’objetSignatureest correctement libéré, libérant ainsi la mémoire.
Application du monde réel
Imaginons que vous traitiez des étiquettes d’expédition. Vous extrairiez la valeur getText() (numéro de suivi) et la stockeriez dans votre base de données. Le numéro de page indique à quelle étiquette correspond chaque envoi si vous traitez des documents groupés.
Filtrage par type de code‑barres
Vous pouvez accélérer les recherches en spécifiant le type de code‑barres recherché :
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setEncodeType(BarcodeTypes.QR); // Only search for QR codes
options.setAllPages(true);
Quand filtrer
Si vous savez que vos factures ne contiennent que des codes‑barres Code128, le filtrage par type réduit le temps de traitement de 30 % à 50 % sur de gros documents.
Types de codes‑barres pris en charge
GroupDocs.Signature peut détecter un large éventail de formats de code‑barres. Voici ce que vous pouvez rechercher :
Codes‑barres 1D (linéaires)
- Code128 – Courant dans l’expédition et l’emballage
- Code39 – Utilisé dans l’automobile et la défense
- EAN13/EAN8 – Codes‑barres produits de détail (vous les voyez sur chaque produit)
- UPC‑A/UPC‑E – Standard nord‑américain du commerce de détail
- Interleaved2of5 – Entrepôts et distribution
Codes‑barres 2D (matrices)
- QR Code – Le plus populaire — utilisé pour les URL, mots de passe Wi‑Fi, informations de paiement
- Data Matrix – Format compact pour les petits objets (composants électroniques)
- PDF417 – Pièces d’identité gouvernementales, cartes d’embarquement, permis de conduire
- Aztec Code – Tickets de transport
Le filtrage par type (exemple montré plus haut) vous aide à vous concentrer sur le format exact dont vous avez besoin.
Cas d’utilisation réels
Voici comment des développeurs exploitent la recherche de code‑barres en production :
1. Traitement automatisé des factures
Scénario – Un service comptable reçoit plus de 500 factures fournisseurs par jour au format PDF.
Solution – Scanner chaque PDF à la recherche de codes‑barres Code39 contenant les numéros de facture, les associer automatiquement aux bons de commande dans le système ERP. Cela élimine la saisie manuelle et réduit les erreurs.
// Pseudo-code workflow
for (PDF invoice : invoiceBatch) {
List<BarcodeSignature> barcodes = searchBarcodes(invoice);
String invoiceNumber = barcodes.get(0).getText();
updateERPSystem(invoiceNumber, invoice);
}
2. Mises à jour d’inventaire d’entrepôt
Scénario – Un entrepôt reçoit des expéditions avec des listes de colis PDF contenant les SKU sous forme de codes‑barres EAN13.
Solution – Extraire tous les codes‑barres des listes, mettre à jour les comptes d’inventaire automatiquement et signaler les écarts pour révision.
3. Authentification de documents
Scénario – Des documents juridiques intègrent des QR codes contenant des signatures cryptographiques pour vérifier l’authenticité.
Solution – Rechercher les QR codes dans les contrats signés, décoder les données de signature et les vérifier auprès d’une autorité de certification fiable. Cela garantit que les documents n’ont pas été altérés.
4. Gestion des dossiers de santé
Scénario – Les dossiers patients dans les hôpitaux contiennent des rapports de laboratoire PDF avec des codes‑barres Code128 pour les identifiants d’échantillon.
Solution – Extraire automatiquement les identifiants d’échantillon et les lier aux résultats de laboratoire dans le système d’information hospitalier (SIH).
Problèmes courants et solutions
Voici des problèmes que vous pourriez rencontrer et comment les résoudre :
Problème 1 : « Aucun code‑barres trouvé » (mais vous savez qu’ils existent)
Causes possibles
- Qualité d’image du code‑barres trop basse (flou, pixelisé)
- Le PDF est basé sur des images mais le code‑barres est trop petit
- Vous recherchez le mauvais type de code‑barres
Solutions
- Vérifier la résolution d’image – Les codes‑barres nécessitent au moins 200 DPI pour une détection fiable. Si vous numérisez des documents, utilisez 300 DPI ou plus.
- Supprimer le filtrage par type – Essayez d’abord de rechercher tous les types de code‑barres (ne pas définir
setEncodeType()), puis affinez une fois le format identifié. - Valider la qualité du code‑barres – Ouvrez le PDF dans Adobe Acrobat et zoomez. Si le code‑barres vous paraît flou, il le sera également pour l’API.
Problème 2 : OutOfMemoryError avec de gros PDF
Cause – Charger un PDF de 500 pages avec des images haute résolution consomme beaucoup de mémoire.
Solution
- Traiter les pages par lots – Au lieu de
setAllPages(true), traitez 50 pages à la fois :
for (int startPage = 1; startPage <= totalPages; startPage += 50) {
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setPageNumber(startPage);
options.setPagesSetup(new PagesSetup());
options.getPagesSetup().setLastPage(Math.min(startPage + 49, totalPages));
List<BarcodeSignature> batchResults = signature.search(BarcodeSignature.class, options);
// Process results...
}
- Augmenter la taille du heap JVM – Ajoutez
-Xmx4gà votre commande Java pour allouer 4 Go de mémoire (ajustez selon vos besoins).
Problème 3 : Performance lente sur les documents multi‑pages
Cause – La recherche sur toutes les pages séquentiellement prend du temps, surtout avec des codes‑barres complexes comme PDF417.
Solutions
- Traitement parallèle – Si les codes‑barres sont toujours sur des pages spécifiques (ex. : page 1 des factures), ne recherchez que ces pages.
- Mettre en cache les résultats – Si vous traitez plusieurs fois le même document, mettez en cache les données de code‑barres pour éviter de rescanner.
- Utiliser des SSD – La vitesse d’I/O influence le chargement des gros PDF. Les SSD réduisent le temps de chargement de 60 % à 70 % comparé aux disques durs classiques.
Problème 4 : Faux positifs (détection de motifs aléatoires comme codes‑barres)
Cause – Les tableaux, grilles ou motifs linéaires peuvent être mal interprétés comme des codes‑barres.
Solution – Validez les résultats en vérifiant la longueur et le format du texte décodé :
for (BarcodeSignature barcode : signatures) {
String text = barcode.getText();
// Example: Invoice numbers are always 10 digits
if (text.matches("\\d{10}")) {
// Valid invoice number
processBarcode(barcode);
} else {
System.out.println("Skipping invalid barcode: " + text);
}
}
Conseils de performance pour les gros documents
1. Stratégie de traitement par lots
Au lieu de traiter les fichiers un par un, utilisez un pool de threads pour gérer plusieurs PDF simultanément :
ExecutorService executor = Executors.newFixedThreadPool(4); // 4 parallel threads
for (String pdfPath : pdfFiles) {
executor.submit(() -> {
try (Signature sig = new Signature(pdfPath)) {
List<BarcodeSignature> results = sig.search(BarcodeSignature.class, options);
// Process results...
} catch (Exception e) {
e.printStackTrace();
}
});
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);
Gain de performance – Traiter 1 000 fichiers passe d’environ 2 heures à 30 minutes sur une machine quad‑core.
2. Réduire la portée de recherche
Si votre logique métier le permet, limitez la zone de recherche :
// Only search the top‑right corner where barcodes are typically placed
options.setRectangle(new Rectangle(400, 50, 150, 150)); // X, Y, Width, Height
Gain de performance – 40 % à 60 % plus rapide sur les documents où les codes‑barres sont toujours au même endroit.
3. Surveiller l’utilisation de la mémoire
Pour les traitements par lots de longue durée, surveillez la consommation du heap et suggérez explicitement le garbage collection si nécessaire :
Runtime runtime = Runtime.getRuntime();
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
if (usedMemory > (runtime.maxMemory() * 0.8)) {
System.gc(); // Suggest garbage collection
}
Bonnes pratiques
1. Toujours libérer les objets Signature
Encapsulez votre code dans un try‑with‑resources (Java 7+) pour fermer automatiquement les ressources :
try (Signature signature = new Signature(filePath)) {
// Your search code here...
} // Automatically disposed
2. Valider les fichiers d’entrée
Avant le traitement, vérifiez que le fichier existe et qu’il s’agit bien d’un PDF valide :
File pdfFile = new File(filePath);
if (!pdfFile.exists() || !pdfFile.canRead()) {
throw new FileNotFoundException("PDF not found or not readable: " + filePath);
}
// Optional: Verify it's actually a PDF (check magic bytes)
3. Journaliser les résultats de détection de codes‑barres
Pour le débogage et l’audit, consignez ce que vous trouvez :
Logger logger = Logger.getLogger(BarcodeSearcher.class.getName());
for (BarcodeSignature barcode : signatures) {
logger.info(String.format("Detected %s barcode '%s' on page %d at (%.2f, %.2f)",
barcode.getEncodeType().getTypeName(),
barcode.getText(),
barcode.getPageNumber(),
barcode.getLeft(),
barcode.getTop()));
}
4. Gérer différents formats de codes‑barres
Différents secteurs utilisent des standards différents. Rendez votre code flexible :
switch (barcode.getEncodeType().getTypeName()) {
case "QR":
// QR codes might contain URLs or JSON data
processQRCode(barcode.getText());
break;
case "Code128":
// Code128 typically contains alphanumeric order/tracking numbers
processTrackingNumber(barcode.getText());
break;
default:
logger.warning("Unexpected barcode type: " + barcode.getEncodeType());
}
5. Tester avec des documents réels
Ne vous limitez pas aux PDF d’exemple parfaits. Utilisez les documents réels de votre environnement de production :
- Factures scannées avec des taches de café
- Étiquettes d’expédition faxées avec du bruit
- Photos basse résolution prises avec un smartphone et converties en PDF
Cela révèle des cas limites que vous ne verrez pas dans les démonstrations.
Questions fréquentes
Q : Puis‑je lire des PDF de code QR sans licence ?
R : Un essai gratuit vous permet de lire des PDF de code QR pour l’évaluation, mais une licence commerciale est requise pour les déploiements en production.
Q : L’API prend‑elle en charge les PDF protégés par mot de passe ?
R : Oui. Vous pouvez passer le mot de passe lors de la création de l’objet Signature : new Signature(filePath, "password").
Q : Comment améliorer la détection sur des scans basse résolution ?
R : Augmentez le DPI du scan source (minimum 200 DPI) et envisagez de filtrer par type de code‑barres pour réduire les faux positifs.
Q : La recherche est‑elle thread‑safe pour le traitement parallèle ?
R : Chaque thread doit utiliser sa propre instance Signature. L’API est thread‑safe lorsqu’elle est utilisée de cette façon.
Q : Quelle version de GroupDocs.Signature a été testée avec ce tutoriel ?
R : Le code a été validé avec GroupDocs.Signature 23.12.
Conclusion
Vous venez d’apprendre comment read QR code PDF documents avec Java et l’API GroupDocs.Signature. Voici ce que nous avons couvert :
✅ Installation – Ajout de GroupDocs.Signature à votre projet et options de licence
✅ Implémentation – Code complet pour rechercher, extraire et traiter les données de code‑barres
✅ Types de code‑barres – Compréhension des formats supportés (1D et 2D)
✅ Cas d’utilisation réels – Traitement de factures, gestion d’inventaire, authentification de documents, dossiers de santé
✅ Dépannage – Résolution des problèmes courants comme les erreurs de mémoire et les faux positifs
✅ Performance – Optimisation des recherches pour le traitement à grande échelle
L’API GroupDocs.Signature gère la complexité du parsing PDF et de la détection de code‑barres, vous permettant de vous concentrer sur votre logique métier. Que vous automatisiez le traitement de factures, vérifiiez des étiquettes d’expédition ou extrayiez des données d’inventaire, vous disposez maintenant d’une solution robuste.
Dernière mise à jour : 2026-03-01
Testé avec : GroupDocs.Signature 23.12
Auteur : GroupDocs