Rechercher des pages spécifiques de 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 source d’erreurs.
Dans ce guide, nous vous montrerons comment rechercher des pages spécifiques de codes-barres dans vos documents de façon programmatique avec Java et GroupDocs.Signature. À la fin, vous serez capable de détecter les signatures sur les pages sélectionnées, de surveiller la progression de la recherche en temps réel et de gérer une variété de formats de codes-barres — le tout avec un code propre et maintenable.
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 les options de recherche intelligente pour cibler des pages spécifiques
- Exécuter la recherche et traiter les résultats efficacement
Quick Answers
- Quelle bibliothèque vous aide à rechercher des pages spécifiques de 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 de codes-barres » ?
Rechercher des pages spécifiques de 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 fonctionne avec PDF, DOCX, XLSX et de nombreux autres formats dès le départ, vous permettant de vous concentrer sur la logique métier plutôt que sur l’analyse des 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)
Configurer 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'
Vous préférez les téléchargements manuels ? Vous pouvez obtenir 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 vrai fichier PDF, DOCX ou XLSX. 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 dans 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‑barre | Meilleur usage | Longueur typique des données |
|---|---|---|
| QR Code | Données à haute densité, URL, 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 rapide par machine, de données structurées ou d’une signature résistante à la falsification.
Comment rechercher des pages spécifiques de codes‑barres
Nous allons diviser l’implémentation en trois fonctionnalités ciblées.
Fonctionnalité 1 : S’abonner aux événements de recherche de document
Pourquoi c’est important
Lors du traitement 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.
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 fournissent 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
Scanner chaque page d’un contrat de 200 pages gaspille des cycles CPU. Cibler uniquement la première et la dernière page peut réduire le temps d’exécution de 80 %.
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");
- Types de correspondance vous permettent d’ajuster finement la recherche de texte (
Contains,Exact,StartsWith,EndsWith). - Modifiez
setAllPagesetPagesSetuppour rechercher uniquement les pages spécifiques de 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).
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 avez maintenant 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 réelles
| Scénario | Comment la recherche de pages spécifiques de 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 ID d’expédition Code128 sur les première et dernière pages des manifestes |
| Formulaires de consentement en santé | Extraire les ID patients DataMatrix de la dernière page de consentement |
| Automatisation des factures | Trouver les codes‑barres préfixés “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 les 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.
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 d’interface utilisateur
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 voulez que les 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 voulez que des types spécifiques.
Q : Comment gérer les documents contenant à la fois des signatures de codes‑barres et d’images ?
R : Effectuez des recherches séparées — utilisez BarcodeSignature.class pour les codes‑barres et ImageSignature.class pour les signatures d’images, puis combinez les résultats selon les besoins.
Q : Quel est l’impact sur les performances de la recherche sur toutes les pages versus des pages spécifiques ?
R : Scanner 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’une 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é comme 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é de signature ou le certificat d’origine.
Dernière mise à jour : 2026-01-29
Testé avec : GroupDocs.Signature 23.12 pour Java
Auteur : GroupDocs