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 PagesSetup pour 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-barresMeilleur usage pourLongueur typique des données
QR CodeDonnées à haute densité, URLs, texte multi‑lignesJusqu’à 4 296 caractères
Code128Numéros de suivi alphanumériquesVariable
Code39Codes hérités simplesJusqu’à 43 caractères
DataMatrixPetites étiquettes, dossiers de santéJusqu’à 2 335 caractères
EAN/UPCIdentification de produit, commerce de détail8‑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 setAllPages et PagesSetup pour 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-barres
  • getEncodeType() – 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énarioComment la recherche de pages spécifiques aux codes-barres aide
Vérification de contrats juridiquesAuto‑valider les hachages de certificats encodés en QR sur la page de signature
Suivi de la chaîne d’approvisionnementLocaliser les identifiants d’expédition Code128 sur les première et dernière pages des manifestes
Formulaires de consentement médicauxExtraire les identifiants patients DataMatrix de la dernière page de consentement
Automatisation des facturesTrouver 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

Tutoriels associés