Zoek barcode‑specifieke pagina’s in documenten met Java
Introductie
Heb je ooit uren besteed aan het handmatig verifiëren van handtekeningen in honderden documenten? Je bent niet de enige. Of je nu een contractbeheersysteem bouwt, factuurverwerking automatiseert, of zorgdossiers beveiligt, het handmatig opsporen en valideren van barcode‑handtekeningen is tijdrovend en foutgevoelig. In deze tutorial leer je hoe je barcode‑pagina’s kunt zoeken met Java en GroupDocs.Signature, zodat je programmatisch alleen de relevante pagina’s kunt targeten, de voortgang in realtime kunt monitoren en een verscheidenheid aan barcode‑formaten kunt verwerken met slechts een paar regels Java‑code.
Wat je zult leren
- GroupDocs.Signature opzetten in een Java‑project (≈5 minuten)
- Abonneren op zoek‑events voor realtime voortgangsmonitoring
- Slimme zoekopties configureren om specifieke pagina’s te targeten
- De zoekopdracht uitvoeren en resultaten efficiënt verwerken
Snelle antwoorden
- Welke bibliotheek helpt je bij het zoeken naar barcode‑specifieke pagina’s? GroupDocs.Signature for Java
- Typische installatietijd? Ongeveer 5 minuten om de Maven/Gradle‑dependency en een licentie toe te voegen
- Kan ik de zoekopdracht beperken tot de eerste en laatste pagina’s? Ja – gebruik
PagesSetupom exacte pagina’s op te geven - Welke barcode‑formaten worden ondersteund? QR‑Code, Code128, Code39, DataMatrix, EAN/UPC en meer
- Heb ik een betaalde licentie nodig voor productie? Een volledige licentie is vereist voor productie; een trial werkt voor evaluatie
Wat betekent “barcode‑specifieke pagina’s zoeken”?
Barcode‑specifieke pagina’s zoeken betekent dat je de handtekeningsengine instrueert om alleen op de pagina’s die je interesseren naar barcode‑handtekeningen te zoeken — bijvoorbeeld de eerste pagina, de laatste pagina, of een aangepast bereik. Deze gerichte aanpak versnelt de verwerking, vermindert het geheugenverbruik en stelt je in staat om responsieve UI‑feedback te bouwen.
Waarom GroupDocs.Signature voor deze taak gebruiken?
GroupDocs.Signature biedt een high‑level API die low‑level barcode‑decodering, paginavergelijking en documentformaat‑afhandeling abstraheert. Het ondersteunt meer dan 20 barcode‑formaten en kan documenten met honderden pagina’s verwerken zonder het volledige bestand in het geheugen te laden, zodat je je kunt concentreren op de bedrijfslogica in plaats van op bestandsparsing.
Voorvereisten
- JDK 8+ geïnstalleerd
- Maven of Gradle voor dependency‑beheer
- Basiskennis van Java‑klassen, methoden en exception‑handling
- Toegang tot een GroupDocs.Signature‑licentie (trial of volledig)
GroupDocs.Signature voor Java instellen
Maven‑configuratie
Add the dependency to your pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle‑configuratie
Or include it in build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Prefer handmatige downloads? Je kunt de nieuwste release direct downloaden van de GroupDocs downloadpagina.
Je licentie verkrijgen
- Free Trial – direct starten, geen verplichting
- Temporary License – volledige functionaliteit voor evaluatie
- Full License – productie‑klaar, onbeperkt gebruik
Verify the installation with a quick initialization snippet:
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 tip: Vervang
"YOUR_DOCUMENT_PATH"door een echt PDF-, DOCX- of XLSX‑bestand. Als de console het succesbericht afdrukt, ben je klaar om te beginnen.
Begrijpen van barcode‑handtekeningtypes
Barcodes bevatten machinaal leesbare gegevens in een document. In tegenstelling tot handgeschreven handtekeningen kunnen ze ID’s, tijdstempels, URL’s of JSON‑payloads opslaan, waardoor ze ideaal zijn voor geautomatiseerde verificatie.
| Barcode‑type | Beste gebruik voor | Typische gegevenslengte |
|---|---|---|
| QR Code | Gegevens met hoge dichtheid, URL’s, meerregelige tekst | Tot 4.296 tekens |
| Code128 | Alfanumerieke traceernummers | Variabel |
| Code39 | Eenvoudige legacy‑codes | Tot 43 tekens |
| DataMatrix | Kleine etiketten, zorgdossiers | Tot 2.335 tekens |
| EAN/UPC | Productidentificatie, retail | 8‑13 cijfers |
Je zult barcodes vaak gebruiken wanneer je snelle machinale lezing, gestructureerde gegevens of manipulatie‑evidente ondertekening nodig hebt.
Hoe barcode‑pagina’s zoeken met Java?
Signature is de primaire klasse die een te verwerken document vertegenwoordigt. Laad je document met new Signature("file.pdf"), BarcodeSearchOptions definieert de parameters voor het zoeken naar barcode‑handtekeningen, configureer het om de gewenste pagina’s te targeten en roep signature.search(options) aan. De search‑methode voert de zoekbewerking uit met de opgegeven opties. De engine retourneert een lijst van BarcodeSignature‑objecten die paginanummers, gedecodeerde tekst en geometrische coördinaten bevatten — alles in één oproep. Dit één‑stap‑patroon elimineert de noodzaak voor afzonderlijke afbeeldingsextractie of aangepaste decodeerlogica.
Nu je de algemene stroom begrijpt, laten we duiken in de drie kernfuncties die je gaat implementeren.
Functie 1: Abonneren op document‑zoek‑events
Waarom dit belangrijk is
Bij het verwerken van grote batches verbetert realtime feedback (bijv. voortgangsbalken) de gebruikerservaring en helpt het je vroegtijdig stalls te detecteren.
Definitie‑anker
Signature vertegenwoordigt het document en biedt mogelijkheden voor event‑abonnement.
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");
}
});
Deze drie handlers geven je starttijd, live voortgang en eindstatistieken — perfect voor logging of UI‑updates.
Functie 2: Configureren van barcode‑zoekopties voor specifieke pagina’s
Waarom gedetailleerde controle belangrijk is
Het scannen van elke pagina van een contract van 200 pagina’s verspilt CPU‑cycli. Alleen de eerste en laatste pagina’s targeten kan de runtijd met tot 80 % verkorten.
Definitie‑anker
PagesSetup specificeert welke pagina’s zijn opgenomen in de zoekbewerking.
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 laten je de tekstzoekopdracht fijn afstemmen (
Contains,Exact,StartsWith,EndsWith). - Pas
setAllPagesenPagesSetupaan om alleen barcode‑specifieke pagina’s te zoeken.
Functie 3: De zoekopdracht uitvoeren en resultaten verwerken
Waarom deze stap belangrijk is
Barcodes vinden is slechts de helft van het verhaal — je moet actie ondernemen op de gegevens (bijv. valideren, opslaan of workflows activeren).
Definitie‑anker
BarcodeSignature vertegenwoordigt een gedetecteerde barcode en bevat eigenschappen zoals paginanummer en gedecodeerde tekst.
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);
}
You now have a list of BarcodeSignature objects, each exposing:
getPageNumber()– waar de barcode zich bevindtgetEncodeType()– QR, Code128, etc.getText()– gedecodeerde payload- Positie (
getLeft(),getTop()) en grootte (getWidth(),getHeight())
Example: Process only QR codes on the last page
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Toepassingen in de praktijk
| Scenario | Hoe barcode‑specifieke‑pagina zoeken helpt |
|---|---|
| Juridische contractverificatie | Automatisch QR‑gecodeerde certificaat‑hashes valideren op de handtekeningpagina |
| Supply‑chain tracking | Code128 verzend‑ID’s vinden op de eerste/laatste pagina’s van manifesten |
| Zorgtoestemmingsformulieren | DataMatrix patiënt‑ID’s extraheren van de laatste toestemmingspagina |
| Factuurautomatisering | Barcodes met de prefix “APPR‑” overal op de factuur vinden en vervolgens routeren |
Veelvoorkomende problemen en oplossingen
Probleem 1 – Geen resultaten ondanks zichtbare barcodes
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Als de barcode is ingebed als rasterafbeelding, overweeg dan GroupDocs.Image voor beeldgebaseerde detectie.
Probleem 2 – Trage prestaties bij grote bestanden
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Gerichte pagina’s verminderen de verwerkingstijd drastisch; een PDF van 150 pagina’s daalt van ~4 seconden naar <1 seconde wanneer je de zoekopdracht beperkt tot twee pagina’s.
Probleem 3 – TextMatchType vindt niet de verwachte barcodes
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Probleem 4 – Geheugenlekken in langdurige loops
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
Het try‑with‑resources‑blok verwijdert de Signature‑instantie automatisch.
Best practices voor productie
Robuuste foutafhandeling
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);
}
Resultaten cachen wanneer documenten onveranderlijk zijn
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
Gebruik voortgangs‑events voor UI‑feedback
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Valideer barcode‑payloads
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);
}
}
Optimaliseer paginaselectie per documenttype
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Filter op barcode‑type na zoekopdracht (als je alleen QR‑codes nodig hebt)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Extraheer barcode‑afbeeldingsdimensies (indien nodig voor rendering)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Veelgestelde vragen
Q: Kan ik in één oproep zoeken naar meerdere barcode‑formaten?
A: Ja. BarcodeSearchOptions zoekt standaard alle ondersteunde formaten. Filter resultaten op getEncodeType() als je alleen specifieke types nodig hebt.
Q: Hoe ga ik om met documenten die zowel barcode‑ als afbeelding‑handtekeningen bevatten?
A: Voer afzonderlijke zoekopdrachten uit — gebruik BarcodeSignature.class voor barcodes en ImageSignature.class voor afbeelding‑handtekeningen, en combineer de resultaten indien nodig.
Q: Wat is de prestatie‑impact van zoeken op alle pagina’s versus specifieke pagina’s?
A: Het scannen van elke pagina van een PDF van 50 pagina’s kan 3–5 seconden duren. Beperken tot de eerste + laatste pagina’s voltooit meestal onder de 1 seconde.
Q: Werkt dit met gescande PDF’s (rasterafbeeldingen)?
A: Alleen als de barcode is toegevoegd als een digitaal handtekeningobject. Voor uitsluitend raster‑barcodes heb je een beeldgebaseerde barcode‑herkenner nodig (bijv. GroupDocs.Barcode).
Q: Hoe kan ik verifiëren dat een barcode‑handtekening niet is gemanipuleerd?
A: Voeg een hash of digitale handtekening toe in de barcode‑payload, bereken vervolgens de hash opnieuw op de originele data en vergelijk. Dit vereist de originele ondertekeningssleutel of certificaat.
Laatst bijgewerkt: 2026-06-21
Getest met: GroupDocs.Signature 23.12 for Java
Auteur: GroupDocs