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‑Typ | Am besten geeignet für | Typische Datenlänge |
|---|---|---|
| QR Code | Hochdichte Daten, URLs, mehrzeiliger Text | Bis zu 4.296 Zeichen |
| Code128 | Alphanumerische Tracking‑Nummern | Variabel |
| Code39 | Einfache Legacy‑Codes | Bis zu 43 Zeichen |
| DataMatrix | Kleine Etiketten, Gesundheitsakten | Bis zu 2.335 Zeichen |
| EAN/UPC | Produktidentifikation, Einzelhandel | 8‑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
setAllPagesundPagesSetupan, 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 befindetgetEncodeType()– 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
| Szenario | Wie die Suche nach barcode‑spezifischen Seiten hilft |
|---|---|
| Rechtsvertrag‑Verifizierung | Automatisches Validieren von QR‑kodierten Zertifikats‑Hashes auf der Signaturseite |
| Lieferketten‑Verfolgung | Code128‑Versand‑IDs auf den ersten/letzten Seiten von Manifesten finden |
| Gesundheits‑Einwilligungsformulare | DataMatrix‑Patienten‑IDs von der letzten Einwilligungsseite extrahieren |
| Rechnungs‑Automatisierung | Barcodes 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