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 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 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‑barreMeilleur usageLongueur typique des données
QR CodeDonnées à haute densité, URL, 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 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 setAllPages et PagesSetup pour 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‑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 réelles

ScénarioComment la recherche de pages spécifiques de 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 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 facturesTrouver 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