Barcode-spezifische Seiten in Dokumenten mit Java suchen
Einführung
Haben Sie schon 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 Leitfaden zeigen wir Ihnen wie Sie barcode‑spezifische Seiten in Ihren Dokumenten programmgesteuert mit Java und GroupDocs.Signature durchsuchen können. Am Ende sind Sie in der Lage, Signaturen auf ausgewählten Seiten zu erkennen, den Suchfortschritt in Echtzeit zu überwachen und eine Vielzahl von Barcode‑Formaten zu verarbeiten – alles mit sauberem, wartbarem Code.
Was Sie lernen werden
- Einrichten von GroupDocs.Signature in einem Java‑Projekt (≈5 Minuten)
- Abonnieren von Suchereignissen für die Echtzeit‑Fortschrittsverfolgung
- Konfigurieren intelligenter Suchoptionen, um bestimmte Seiten anzusprechen
- Ausführen der Suche und effizientes Verarbeiten der Ergebnisse
Schnelle Antworten
- Welche Bibliothek hilft Ihnen, barcode‑spezifische Seiten zu durchsuchen? GroupDocs.Signature für 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; ein Testlauf funktioniert für die Evaluierung
Was bedeutet „barcode‑spezifische Seiten durchsuchen“?
Das Durchsuchen von 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 den Aufbau einer reaktionsschnellen UI‑Rückmeldung.
Warum GroupDocs.Signature für diese Aufgabe verwenden?
GroupDocs.Signature bietet eine High‑Level‑API, die die Low‑Level‑Barcode‑Dekodierung, Seiten‑Rendering und Dokumentformat‑Verarbeitung abstrahiert. Sie funktioniert sofort mit PDF, DOCX, XLSX und vielen anderen Formaten, sodass Sie sich auf die Geschäftslogik statt auf das Parsen von Dateien konzentrieren können.
Voraussetzungen
- JDK 8+ installiert
- Maven oder Gradle für das Abhängigkeitsmanagement
- Grundlegende Kenntnisse von Java‑Klassen, -Methoden und Ausnahmebehandlung
- Zugriff auf eine GroupDocs.Signature‑Lizenz (Testversion oder Vollversion)
Einrichtung 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 sie 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
Überprüfen 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.
Verständnis 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 | Daten mit hoher Dichte, URLs, mehrzeiliger Text | Bis zu 4 296 Zeichen |
| Code128 | Alphanumerische Verfolgungsnummern | Variabel |
| Code39 | Einfache Legacy‑Codes | Bis zu 43 Zeichen |
| DataMatrix | Kleine Etiketten, Gesundheitsdaten | Bis zu 2 335 Zeichen |
| EAN/UPC | Produktidentifikation, Einzelhandel | 8‑13 Ziffern |
Sie werden Barcodes häufig einsetzen, wenn Sie schnelles maschinelles Lesen, strukturierte Daten oder manipulationssichere Signaturen benötigen.
Wie man barcode‑spezifische Seiten durchsucht
Wir werden die Implementierung in drei fokussierte Funktionen aufteilen.
Feature 1: Abonnieren von Dokument‑Suchereignissen
Warum das wichtig ist
Bei der Verarbeitung großer Stapel verbessert Echtzeit‑Feedback (z. B. Fortschrittsbalken) die Benutzererfahrung und hilft, Staus frühzeitig zu erkennen.
Implementierung
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 Ihnen Startzeit, Live‑Fortschritt und Endstatistiken – perfekt für Protokollierung 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‑Zyklen. Das Anvisieren nur der ersten und letzten Seite kann die Laufzeit um 80 % reduzieren.
Implementierung
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 Feintuning 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 mit den Daten etwas tun (z. B. validieren, speichern oder Workflows auslösen).
Implementierung
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()– dekodierte 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());
}
}
Anwendungsbeispiele aus der Praxis
| Szenario | Wie barcode‑spezifische Seiten Suche hilft |
|---|---|
| Rechtliche Vertragsprüfung | QR‑kodierte Zertifikats‑Hashes automatisch auf der Signaturseite validieren |
| Lieferketten‑Verfolgung | Code128‑Versand‑IDs auf den ersten/letzten Seiten von Manifesten finden |
| Einverständniserklärungen im Gesundheitswesen | DataMatrix‑Patienten‑IDs von der letzten Einverständnis‑Seite extrahieren |
| Rechnungsautomatisierung | 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.
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);
}
Zwischenspeichern von Ergebnissen, 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));
}
Fortschritts‑Ereignisse für UI‑Feedback nutzen
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Barcode‑Payloads 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
F: 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.
F: 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 bei Bedarf.
F: Wie wirkt sich die Suche über alle Seiten im Vergleich zu spezifischen Seiten auf die Leistung aus?
A: Das Scannen jeder Seite eines 50‑seitigen PDFs kann 3–5 Sekunden dauern. Die Beschränkung auf die erste + letzte Seite beendet die Suche in der Regel in unter 1 Sekunde.
F: Funktioniert das mit gescannten PDFs (Raster‑Bildern)?
A: Nur wenn der Barcode als digitales Signatur‑Objekt hinzugefügt wurde. Für ausschließlich rasterbasierte Barcodes benötigen Sie einen bildbasierten Barcode‑Erkenner (z. B. GroupDocs.Barcode).
F: Wie kann ich prüfen, ob eine Barcode‑Signatur nicht manipuliert wurde?
A: Betten Sie einen Hash oder eine digitale Signatur in die Barcode‑Payload ein, berechnen Sie anschließend den Hash der Originaldaten erneut und vergleichen Sie ihn. Dafür benötigen Sie den ursprünglichen Signaturschlüssel oder das Zertifikat.
Zuletzt aktualisiert: 2026-01-29
Getestet mit: GroupDocs.Signature 23.12 für Java
Autor: GroupDocs