Rechercher des pages spécifiques aux codes-barres dans les documents avec Java
Introduction
Vous avez déjà passé des heures à vérifier manuellement les signatures dans des centaines de documents ? Vous n’êtes pas seul. Que vous construisiez un système de gestion de contrats, automatisiez le traitement des factures ou sécurisiez les dossiers de santé, rechercher et valider manuellement les signatures de codes-barres est fastidieux et sujet aux erreurs. Dans ce tutoriel, vous apprendrez comment rechercher des pages de codes-barres en Java avec GroupDocs.Signature, afin de cibler programmatiquement uniquement les pages qui importent, de surveiller la progression en temps réel et de gérer une variété de formats de codes-barres avec seulement quelques lignes de code Java.
Ce que vous apprendrez
- Configurer GroupDocs.Signature dans un projet Java (≈5 minutes)
- S’abonner aux événements de recherche pour le suivi de la progression en temps réel
- Configurer des options de recherche intelligentes pour cibler des pages spécifiques
- Exécuter la recherche et traiter les résultats efficacement
Réponses rapides
- Quelle bibliothèque vous aide à rechercher des pages spécifiques aux codes-barres ? GroupDocs.Signature for Java
- Temps d’installation typique ? Environ 5 minutes pour ajouter la dépendance Maven/Gradle et une licence
- Puis-je limiter la recherche aux première et dernière pages ? Oui – utilisez
PagesSetuppour spécifier les pages exactes - Quels formats de codes-barres sont pris en charge ? QR Code, Code128, Code39, DataMatrix, EAN/UPC, et plus
- Ai-je besoin d’une licence payante pour la production ? Une licence complète est requise pour la production ; un essai fonctionne pour l’évaluation
Qu’est-ce que « rechercher des pages spécifiques aux codes-barres » ?
Rechercher des pages spécifiques aux codes-barres signifie indiquer au moteur de signature de ne rechercher les signatures de codes-barres que sur les pages qui vous intéressent — par exemple la première page, la dernière page ou toute plage personnalisée. Cette approche ciblée accélère le traitement, réduit l’utilisation de la mémoire et vous permet de créer des retours d’interface utilisateur réactifs.
Pourquoi utiliser GroupDocs.Signature pour cette tâche ?
GroupDocs.Signature fournit une API de haut niveau qui abstrait le décodage bas‑niveau des codes-barres, le rendu des pages et la gestion des formats de documents. Elle prend en charge plus de 20 formats de codes-barres et peut traiter des documents de plusieurs centaines de pages sans charger le fichier entier en mémoire, vous laissant vous concentrer sur la logique métier plutôt que sur le parsing de fichiers.
Prérequis
- JDK 8+ installé
- Maven ou Gradle pour la gestion des dépendances
- Familiarité de base avec les classes Java, les méthodes et la gestion des exceptions
- Accès à une licence GroupDocs.Signature (essai ou complète)
Configuration de GroupDocs.Signature pour Java
Configuration Maven
Ajoutez la dépendance à votre pom.xml :
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Configuration Gradle
Ou incluez‑la dans build.gradle :
implementation 'com.groupdocs:groupdocs-signature:23.12'
Préférez les téléchargements manuels ? Vous pouvez récupérer la dernière version directement depuis la page de téléchargement GroupDocs.
Obtention de votre licence
- Essai gratuit – démarrez immédiatement, sans engagement
- Licence temporaire – accès complet aux fonctionnalités pour l’évaluation
- Licence complète – prête pour la production, utilisation illimitée
Vérifiez l’installation avec un extrait d’initialisation rapide :
import com.groupdocs.signature.Signature;
public class SignatureSetup {
public static void main(String[] args) {
// Initialize the Signature instance with the document path
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
System.out.println("GroupDocs.Signature for Java initialized successfully.");
}
}
Astuce pro : Remplacez
"YOUR_DOCUMENT_PATH"par un fichier PDF, DOCX ou XLSX réel. Si la console affiche le message de succès, vous êtes prêt à démarrer.
Comprendre les types de signatures de codes-barres
Les codes-barres intègrent des données lisibles par machine à l’intérieur d’un document. Contrairement aux signatures manuscrites, ils peuvent stocker des ID, des horodatages, des URL ou des charges JSON, ce qui les rend idéaux pour la vérification automatisée.
| Type de code-barres | Meilleur usage pour | Longueur typique des données |
|---|---|---|
| QR Code | Données à haute densité, URLs, texte multi‑lignes | Jusqu’à 4 296 caractères |
| Code128 | Numéros de suivi alphanumériques | Variable |
| Code39 | Codes hérités simples | Jusqu’à 43 caractères |
| DataMatrix | Petites étiquettes, dossiers de santé | Jusqu’à 2 335 caractères |
| EAN/UPC | Identification de produit, commerce de détail | 8‑13 chiffres |
Vous utiliserez souvent les codes-barres lorsque vous avez besoin d’une lecture machine rapide, de données structurées ou d’une signature inviolable.
Comment rechercher des pages de codes-barres en Java ?
Signature est la classe principale représentant un document à traiter. Chargez votre document avec new Signature("file.pdf"), BarcodeSearchOptions définit les paramètres de recherche des signatures de codes-barres, configurez‑les pour cibler les pages souhaitées, puis appelez signature.search(options). La méthode search exécute l’opération de recherche en utilisant les options fournies. Le moteur renvoie une liste d’objets BarcodeSignature contenant les numéros de page, le texte décodé et les coordonnées géométriques — le tout en un seul appel. Ce modèle en une étape élimine le besoin d’extraction d’images séparée ou de logique de décodage personnalisée.
Maintenant que vous comprenez le flux global, plongeons dans les trois fonctionnalités principales que vous allez implémenter.
Fonctionnalité 1 : S’abonner aux événements de recherche de document
Pourquoi c’est important
Lorsque vous traitez de gros lots, un retour en temps réel (par ex. barres de progression) améliore l’expérience utilisateur et vous aide à détecter les blocages rapidement.
Definition anchor
Signature représente le document et fournit des capacités d’abonnement aux événements.
Implementation
Signature signature = new Signature("YOUR_DOCUMENT_PATH");
signature.SearchStarted.add(new ProcessStartEventHandler() {
public void invoke(Signature sender, ProcessStartEventArgs args) {
System.out.println("Search process started at " + args.getStarted()
+ " with " + args.getTotalSignatures() + " total signatures to be put in document");
}
});
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
System.out.println("Search progress. Processed " + args.getProcessedSignatures()
+ " signatures. Time spent " + args.getTicks() + " mlsec");
}
});
signature.SearchCompleted.add(new ProcessCompleteEventHandler() {
public void invoke(Signature sender, ProcessCompleteEventArgs args) {
System.out.println("Search process completed at " + args.getCompleted()
+ " with " + args.getTotalSignatures() + " total signatures. Process took "
+ args.getTicks() + " mlsec");
}
});
Ces trois gestionnaires vous donnent le temps de démarrage, la progression en direct et les statistiques finales — parfaits pour la journalisation ou les mises à jour d’interface.
Fonctionnalité 2 : Configurer les options de recherche de codes-barres pour des pages spécifiques
Pourquoi le contrôle granulaire est important
Analyser chaque page d’un contrat de 200 pages gaspille des cycles CPU. Cibler uniquement les première et dernière pages peut réduire le temps d’exécution de jusqu’à 80 %.
Definition anchor
PagesSetup spécifie quelles pages sont incluses dans l’opération de recherche.
Implementation
import com.groupdocs.signature.domain.enums.TextMatchType;
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setAllPages(false); // Opt‑in selective page searching
options.setPageNumber(1); // Starting page (optional)
import com.groupdocs.signature.options.PagesSetup;
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setFirstPage(true); // Include first page
pagesSetup.setLastPage(true); // Include last page
pagesSetup.setOddPages(false); // Skip odd pages
pagesSetup.setEvenPages(false); // Skip even pages
options.setPagesSetup(pagesSetup);
options.setMatchType(TextMatchType.Contains);
options.setText("12345");
- Match types vous permettent d’affiner la recherche de texte (
Contains,Exact,StartsWith,EndsWith). - Ajustez
setAllPagesetPagesSetuppour rechercher uniquement des pages spécifiques aux codes-barres.
Fonctionnalité 3 : Exécuter la recherche et traiter les résultats
Pourquoi cette étape est importante
Trouver les codes-barres n’est que la moitié de l’histoire — vous devez agir sur les données (par ex. valider, stocker ou déclencher des flux de travail).
Definition anchor
BarcodeSignature représente un code-barres détecté et contient ses propriétés telles que le numéro de page et le texte décodé.
Implementation
import java.util.List;
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
System.out.println("Source document contains following signatures.");
for (BarcodeSignature barcodeSignature : signatures) {
System.out.println("Barcode signature found at page " + barcodeSignature.getPageNumber()
+ " with type " + barcodeSignature.getEncodeType() + " and text " + barcodeSignature.getText());
}
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
Vous disposez maintenant d’une liste d’objets BarcodeSignature, chacun exposant :
getPageNumber()– où se trouve le code-barresgetEncodeType()– QR, Code128, etc.getText()– charge décodée- Position (
getLeft(),getTop()) et taille (getWidth(),getHeight())
Exemple : Traiter uniquement les QR codes sur la dernière page
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Applications concrètes
| Scénario | Comment la recherche de pages spécifiques aux codes-barres aide |
|---|---|
| Vérification de contrats juridiques | Auto‑valider les hachages de certificats encodés en QR sur la page de signature |
| Suivi de la chaîne d’approvisionnement | Localiser les identifiants d’expédition Code128 sur les première et dernière pages des manifestes |
| Formulaires de consentement médicaux | Extraire les identifiants patients DataMatrix de la dernière page de consentement |
| Automatisation des factures | Trouver les codes-barres préfixés par « APPR‑ » n’importe où sur la facture, puis les acheminer |
Problèmes courants et solutions
Problème 1 – Aucun résultat malgré la présence de codes-barres visibles
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Si le code-barres est intégré en tant qu’image raster, envisagez d’utiliser GroupDocs.Image pour la détection basée sur l’image.
Problème 2 – Performances lentes sur de gros fichiers
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Les pages ciblées réduisent considérablement le temps de traitement ; un PDF de 150 pages passe de ~4 secondes à <1 seconde lorsque vous limitez la recherche à deux pages.
Problème 3 – TextMatchType ne trouve pas les codes-barres attendus
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Problème 4 – Fuites de mémoire dans les boucles de longue durée
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
Le bloc try‑with‑resources libère automatiquement l’instance Signature.
Bonnes pratiques pour la production
Gestion robuste des erreurs
try {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
} catch (com.groupdocs.signature.exception.GroupDocsSignatureException e) {
logger.error("GroupDocs error: " + e.getMessage());
} catch (Exception e) {
logger.error("Unexpected error: " + e.getMessage(), e);
}
Mettre en cache les résultats lorsque les documents sont immuables
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
Utiliser les événements de progression pour le retour UI
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Valider les charges utiles des codes-barres
for (BarcodeSignature barcodeSignature : signatures) {
String text = barcodeSignature.getText();
if (!text.matches("APPR-\\d{4}-\\d{3}")) {
logger.warn("Invalid format: " + text);
continue;
}
if (!validateChecksum(text)) {
logger.error("Checksum failed for: " + text);
flagForManualReview(document);
}
}
Optimiser la sélection des pages selon le type de document
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Filtrer par type de code-barres après la recherche (si vous ne avez besoin que des QR codes)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Extraire les dimensions de l’image du code-barres (si nécessaire pour le rendu)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Questions fréquentes
Q : Puis‑je rechercher plusieurs formats de codes-barres en un seul appel ?
R : Oui. BarcodeSearchOptions recherche tous les formats pris en charge par défaut. Filtrez les résultats avec getEncodeType() si vous ne souhaitez que des types spécifiques.
Q : Comment gérer les documents contenant à la fois des signatures de codes-barres et d’images ?
R : Exécutez des recherches séparées — utilisez BarcodeSignature.class pour les codes-barres et ImageSignature.class pour les signatures d’image, puis combinez les résultats selon les besoins.
Q : Quel est l’impact sur les performances entre la recherche sur toutes les pages et sur des pages spécifiques ?
R : Analyser chaque page d’un PDF de 50 pages peut prendre 3–5 secondes. Limiter aux première + dernière pages se termine généralement en moins d'1 seconde.
Q : Cette méthode fonctionne‑t‑elle avec des PDF numérisés (images raster) ?
R : Seulement si le code-barres a été ajouté en tant qu’objet de signature numérique. Pour les codes-barres uniquement raster, vous aurez besoin d’un reconnaisseur de codes-barres basé sur l’image (par ex. GroupDocs.Barcode).
Q : Comment vérifier qu’une signature de code‑barres n’a pas été altérée ?
R : Intégrez un hachage ou une signature numérique dans la charge du code‑barres, puis recompute le hachage sur les données originales et comparez. Cela nécessite la clé ou le certificat de signature original.
Dernière mise à jour : 2026-06-21
Testé avec : GroupDocs.Signature 23.12 for Java
Auteur : GroupDocs