Barcode‑spezifische Seiten in Dokumenten mit Java suchen

Einleitung

Haben Sie jemals Stunden damit verbracht, Signaturen manuell in Hunderten von Dokumenten zu überprüfen? Sie sind nicht allein. Egal, ob Sie ein Vertragsmanagementsystem aufbauen, die Rechnungsverarbeitung automatisieren oder Gesundheitsdaten sichern, das manuelle Aufspüren und Validieren von Barcode‑Signaturen ist mühsam und fehleranfällig. In diesem Tutorial lernen Sie, wie Sie Barcode‑Seiten mit GroupDocs.Signature in Java durchsuchen, sodass Sie programmgesteuert nur die relevanten Seiten anvisieren, den Fortschritt in Echtzeit überwachen und eine Vielzahl von Barcode‑Formaten mit nur wenigen Zeilen Java‑Code verarbeiten können.

Was Sie lernen werden

  • Einrichten von GroupDocs.Signature in einem Java‑Projekt (≈5 Minuten)
  • Abonnieren von Such‑Events für die Echtzeit‑Fortschrittsverfolgung
  • Konfigurieren von intelligenten Suchoptionen, um bestimmte Seiten zu adressieren
  • Ausführen der Suche und effizientes Verarbeiten der Ergebnisse

Schnelle Antworten

  • Welche Bibliothek hilft Ihnen, barcode‑spezifische Seiten zu durchsuchen? GroupDocs.Signature for Java
  • Typische Einrichtungszeit? Etwa 5 Minuten, um die Maven/Gradle‑Abhängigkeit und eine Lizenz hinzuzufügen
  • Kann ich die Suche auf die erste und letzte Seite beschränken? Ja – verwenden Sie PagesSetup, um genaue Seiten anzugeben
  • Welche Barcode‑Formate werden unterstützt? QR Code, Code128, Code39, DataMatrix, EAN/UPC und mehr
  • Benötige ich eine kostenpflichtige Lizenz für die Produktion? Eine Voll‑Lizenz ist für die Produktion erforderlich; eine Testversion funktioniert für die Evaluierung

Was bedeutet „barcode‑spezifische Seiten suchen“?

Das Suchen nach barcode‑spezifischen Seiten bedeutet, die Signatur‑Engine anzuweisen, nur auf den Seiten nach Barcode‑Signaturen zu suchen, die Sie interessieren – z. B. die erste Seite, die letzte Seite oder ein benutzerdefinierter Bereich. Dieser fokussierte Ansatz beschleunigt die Verarbeitung, reduziert den Speicherverbrauch und ermöglicht ein reaktionsschnelles UI‑Feedback.

Warum GroupDocs.Signature für diese Aufgabe verwenden?

GroupDocs.Signature bietet eine High‑Level‑API, die Low‑Level‑Barcode‑Dekodierung, Seiten‑Rendering und Dokument‑Format‑Handling abstrahiert. Es unterstützt über 20 Barcode‑Formate und kann mehrhundertseitige Dokumente verarbeiten, ohne die gesamte Datei in den Speicher zu laden, sodass Sie sich auf die Geschäftslogik statt auf das Dateiparsen konzentrieren können.

Voraussetzungen

  • JDK 8+ installiert
  • Maven oder Gradle für die Abhängigkeitsverwaltung
  • Grundlegende Kenntnisse von Java‑Klassen, -Methoden und Ausnahmebehandlung
  • Zugang zu einer GroupDocs.Signature‑Lizenz (Testversion oder Vollversion)

Einrichten von GroupDocs.Signature für Java

Maven‑Einrichtung

Fügen Sie die Abhängigkeit zu Ihrer pom.xml hinzu:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-signature</artifactId>
    <version>23.12</version>
</dependency>

Gradle‑Einrichtung

Oder fügen Sie es in build.gradle ein:

implementation 'com.groupdocs:groupdocs-signature:23.12'

Bevorzugen Sie manuelle Downloads? Sie können das neueste Release direkt von der GroupDocs-Download-Seite herunterladen.

Lizenz erhalten

  • Kostenlose Testversion – sofort starten, keine Verpflichtung
  • Temporäre Lizenz – voller Funktionszugriff für die Evaluierung
  • Vollständige Lizenz – produktionsbereit, unbegrenzte Nutzung

Verifizieren Sie die Installation mit einem kurzen Initialisierungssnippet:

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.");
    }
}

Pro Tipp: Ersetzen Sie "YOUR_DOCUMENT_PATH" durch eine tatsächliche PDF-, DOCX‑ oder XLSX‑Datei. Wenn die Konsole die Erfolgsmeldung ausgibt, sind Sie startklar.

Verstehen von Barcode‑Signaturtypen

Barcodes betten maschinenlesbare Daten in ein Dokument ein. Im Gegensatz zu handschriftlichen Signaturen können sie IDs, Zeitstempel, URLs oder JSON‑Payloads speichern, was sie ideal für die automatisierte Verifizierung macht.

Barcode‑TypAm besten geeignet fürTypische Datenlänge
QR CodeHochdichte Daten, URLs, mehrzeiliger TextBis zu 4.296 Zeichen
Code128Alphanumerische Tracking‑NummernVariabel
Code39Einfache Legacy‑CodesBis zu 43 Zeichen
DataMatrixKleine Etiketten, GesundheitsaktenBis zu 2.335 Zeichen
EAN/UPCProduktidentifikation, Einzelhandel8‑13 Ziffern

Sie verwenden Barcodes häufig, wenn Sie schnelles maschinelles Lesen, strukturierte Daten oder manipulationssichere Signaturen benötigen.

Wie man Barcode‑Seiten in Java sucht?

Signature ist die Hauptklasse, die ein zu verarbeitendes Dokument repräsentiert. Laden Sie Ihr Dokument mit new Signature("file.pdf"), BarcodeSearchOptions definiert die Parameter für die Suche nach Barcode‑Signaturen, konfigurieren Sie es, um die gewünschten Seiten anzusteuern, und rufen Sie signature.search(options) auf. Die search‑Methode führt die Suche mit den angegebenen Optionen aus. Die Engine gibt eine Liste von BarcodeSignature‑Objekten zurück, die Seitenzahlen, dekodierten Text und geometrische Koordinaten enthalten – alles in einem einzigen Aufruf. Dieses Ein‑Schritt‑Muster eliminiert die Notwendigkeit separater Bild‑Extraktion oder benutzerdefinierter Dekodierlogik.

Jetzt, wo Sie den Gesamtablauf verstehen, gehen wir zu den drei Kern‑Features über, die Sie implementieren werden.

Feature 1: Abonnieren von Dokument‑Such‑Events

Warum das wichtig ist

Bei der Verarbeitung großer Stapel verbessert Echtzeit‑Feedback (z. B. Fortschrittsbalken) die Benutzererfahrung und hilft, Stillstände frühzeitig zu erkennen.

Definition anchor

Signature repräsentiert das Dokument und bietet Event‑Abonnement‑Funktionen.

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");
    }
});

Diese drei Handler liefern Startzeit, Live‑Fortschritt und Endstatistiken – perfekt für Logging oder UI‑Updates.

Feature 2: Konfigurieren von Barcode‑Suchoptionen für spezifische Seiten

Warum granulare Kontrolle wichtig ist

Das Scannen jeder Seite eines 200‑seitigen Vertrags verschwendet CPU‑Ressourcen. Das Anvisieren nur der ersten und letzten Seite kann die Laufzeit um bis zu 80 % reduzieren.

Definition anchor

PagesSetup gibt an, welche Seiten in den Suchvorgang einbezogen werden.

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‑Typen ermöglichen das feine Abstimmen der Textsuche (Contains, Exact, StartsWith, EndsWith).
  • Passen Sie setAllPages und PagesSetup an, um nur barcode‑spezifische Seiten zu durchsuchen.

Feature 3: Ausführen der Suche und Verarbeiten der Ergebnisse

Warum dieser Schritt wichtig ist

Barcodes zu finden ist nur die halbe Geschichte – Sie müssen die Daten nutzen (z. B. validieren, speichern oder Workflows auslösen).

Definition anchor

BarcodeSignature repräsentiert einen erkannten Barcode und enthält Eigenschaften wie Seitenzahl und dekodierten Text.

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);
}

Sie haben nun eine Liste von BarcodeSignature‑Objekten, die jeweils Folgendes bereitstellen:

  • getPageNumber() – wo sich der Barcode befindet
  • getEncodeType() – QR, Code128 usw.
  • getText() – decodierte Nutzlast
  • Position (getLeft(), getTop()) und Größe (getWidth(), getHeight())

Beispiel: Nur QR‑Codes auf der letzten Seite verarbeiten

for (BarcodeSignature barcodeSignature : signatures) {
    if (barcodeSignature.getPageNumber() == lastPageNumber 
        && barcodeSignature.getEncodeType().equals("QRCode")) {
        // Process only QR codes from the final page
        processApprovalCode(barcodeSignature.getText());
    }
}

Anwendungen in der Praxis

SzenarioWie die Suche nach barcode‑spezifischen Seiten hilft
Rechtsvertrag‑VerifizierungAutomatisches Validieren von QR‑kodierten Zertifikats‑Hashes auf der Signaturseite
Lieferketten‑VerfolgungCode128‑Versand‑IDs auf den ersten/letzten Seiten von Manifesten finden
Gesundheits‑EinwilligungsformulareDataMatrix‑Patienten‑IDs von der letzten Einwilligungsseite extrahieren
Rechnungs‑AutomatisierungBarcodes mit Präfix „APPR‑“ überall auf der Rechnung finden und dann weiterleiten

Häufige Probleme und Lösungen

Problem 1 – Keine Ergebnisse trotz sichtbarer Barcodes

// Ensure you are not limiting pages too aggressively
options.setAllPages(true);

Wenn der Barcode als Raster‑Bild eingebettet ist, sollten Sie GroupDocs.Image für bildbasierte Erkennung in Betracht ziehen.

Problem 2 – Langsame Leistung bei großen Dateien

PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true);  // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);

Gezielte Seiten reduzieren die Verarbeitungszeit drastisch; ein 150‑seitiges PDF sinkt von ~4 Sekunden auf <1 Sekunde, wenn Sie die Suche auf zwei Seiten beschränken.

Problem 3 – TextMatchType findet erwartete Barcodes nicht

String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode

Problem 4 – Speicherlecks in langlaufenden Schleifen

try (Signature signature = new Signature("document.pdf")) {
    List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
    // Process signatures
}

Der try‑with‑resources‑Block gibt die Signature‑Instanz automatisch frei.

Best Practices für die Produktion

Robuste Fehlerbehandlung

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);
}

Ergebnisse zwischenspeichern, wenn Dokumente unveränderlich sind

Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();

public List<BarcodeSignature> getCachedSignatures(String docId) {
    return cache.computeIfAbsent(docId, id -> performSearch(id));
}

Verwenden Sie Fortschritts‑Events für UI‑Feedback

signature.SearchProgress.add(new ProcessProgressEventHandler() {
    public void invoke(Signature sender, ProcessProgressEventArgs args) {
        int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
        updateProgressBar(percent);
    }
});

Barcode‑Nutzlasten validieren

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);
    }
}

Seitenauswahl pro Dokumenttyp optimieren

PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);

Nach Barcode‑Typ nach der Suche filtern (falls nur QR‑Codes benötigt werden)

for (BarcodeSignature sig : signatures) {
    if ("QRCode".equals(sig.getEncodeType())) {
        // Process QR code
    }
}

Barcode‑Bildabmessungen extrahieren (falls für das Rendering benötigt)

for (BarcodeSignature sig : signatures) {
    int width = sig.getWidth();
    int height = sig.getHeight();
    // Use dimensions for overlay or thumbnail generation
}

Häufig gestellte Fragen

Q: Kann ich in einem Aufruf nach mehreren Barcode‑Formaten suchen?
A: Ja. BarcodeSearchOptions durchsucht standardmäßig alle unterstützten Formate. Filtern Sie die Ergebnisse nach getEncodeType(), wenn Sie nur bestimmte Typen benötigen.

Q: Wie gehe ich mit Dokumenten um, die sowohl Barcode‑ als auch Bild‑Signaturen enthalten?
A: Führen Sie separate Suchen durch – verwenden Sie BarcodeSignature.class für Barcodes und ImageSignature.class für Bild‑Signaturen, und kombinieren Sie die Ergebnisse nach Bedarf.

Q: Wie wirkt sich die Suche auf allen Seiten im Vergleich zu spezifischen Seiten auf die Performance aus?
A: Das Scannen jeder Seite eines 50‑seitigen PDFs kann 3–5 Sekunden dauern. Die Beschränkung auf erste + letzte Seiten beendet die Suche in der Regel in unter 1 Sekunde.

Q: Funktioniert das mit gescannten PDFs (Raster‑Bildern)?
A: Nur wenn der Barcode als digitales Signatur‑Objekt hinzugefügt wurde. Für rein rasterbasierte Barcodes benötigen Sie einen bildbasierten Barcode‑Erkenner (z. B. GroupDocs.Barcode).

Q: Wie kann ich überprüfen, ob eine Barcode‑Signatur nicht manipuliert wurde?
A: Betten Sie einen Hash oder eine digitale Signatur in die Barcode‑Payload ein, berechnen Sie den Hash der Originaldaten erneut und vergleichen Sie ihn. Dazu benötigen Sie den ursprünglichen Signaturschlüssel oder das Zertifikat.


Zuletzt aktualisiert: 2026-06-21
Getestet mit: GroupDocs.Signature 23.12 for Java
Autor: GroupDocs

Verwandte Tutorials