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 zorgrecords beveiligt, het handmatig opsporen en valideren van barcode‑handtekeningen is tijdrovend en foutgevoelig.
In deze gids laten we je zien hoe je barcode‑specifieke pagina’s in je documenten programmatically kunt zoeken met Java en GroupDocs.Signature. Aan het einde kun je handtekeningen op geselecteerde pagina’s detecteren, de zoekvoortgang in realtime volgen en verschillende barcode‑formaten verwerken – allemaal met schone, onderhoudbare 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 proefversie werkt voor evaluatie
Wat is “barcode‑specifieke pagina’s zoeken”?
Barcode‑specifieke pagina’s zoeken betekent dat je de handtekeningengine instrueert om alleen op de pagina’s waar je om geeft 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, paginavoorstelling en documentformaat‑afhandeling abstraheert. Het werkt direct met PDF, DOCX, XLSX en vele andere formaten, zodat je je kunt concentreren op de bedrijfslogica in plaats van op bestandsparsing.
Vereisten
- JDK 8+ geïnstalleerd
- Maven of Gradle voor afhankelijkheidsbeheer
- Basiskennis van Java‑klassen, methoden en foutafhandeling
- Toegang tot een GroupDocs.Signature‑licentie (proef of volledig)
GroupDocs.Signature voor Java instellen
Maven‑instelling
Add the dependency to your pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle‑instelling
Or include it in build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Voorkeur voor handmatige downloads? Je kunt de nieuwste release direct downloaden van de GroupDocs downloadpagina.
Je licentie verkrijgen
- Gratis proefversie – direct starten, geen verplichting
- Tijdelijke licentie – volledige functionaliteit voor evaluatie
- Volledige licentie – 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 embed machine‑leesbare data 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 datalengte |
|---|---|---|
| QR Code | Hoge‑dichtheid data, URL’s, meer‑regelige tekst | Tot 4.296 tekens |
| Code128 | Alfanumerieke traceernummers | Variabel |
| Code39 | Eenvoudige legacy‑codes | Tot 43 tekens |
| DataMatrix | Kleine labels, zorgrecords | Tot 2.335 tekens |
| EAN/UPC | Productidentificatie, retail | 8‑13 cijfers |
Je zult vaak barcodes gebruiken wanneer je snelle machinale lezing, gestructureerde data of manipulatie‑evidente ondertekening nodig hebt.
Hoe barcode‑specifieke pagina’s zoeken
We splitsen de implementatie op in drie gerichte functies.
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 je vroegtijdig stilstand te detecteren.
Implementatie
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 uitvoeringstijd met 80 % verkorten.
Implementatie
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 data (bijv. valideren, opslaan of workflows activeren).
Implementatie
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()– op welke pagina de barcode zich bevindtgetEncodeType()– QR, Code128, etc.getText()– gedecodeerde payload- Positie (
getLeft(),getTop()) en grootte (getWidth(),getHeight())
Voorbeeld: Verwerk alleen QR‑codes op de laatste pagina
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Praktische toepassingen
| Scenario | Hoe barcode‑specifieke‑pagina‑zoektocht helpt |
|---|---|
| Juridische contractverificatie | Automatisch QR‑gecodeerde certificaat‑hashes valideren op de handtekeningpagina |
| Supply‑chain tracking | Code128‑verzendings‑ID’s vinden op de eerste/laatste pagina’s van manifesten |
| Zorg‑toestemmingsformulieren | DataMatrix‑patiënt‑ID’s extraheren van de laatste toestemmingspagina |
| Factuurautomatisering | Barcodes met voorvoegsel “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 te gebruiken 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.
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 lussen
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);
}
Cache resultaten 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 zoeken (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 weergave)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Veelgestelde vragen
V: 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.
V: Hoe ga ik om met documenten die zowel barcode‑ als afbeelding‑handtekeningen bevatten?
A: Voer aparte zoekopdrachten uit – gebruik BarcodeSignature.class voor barcodes en ImageSignature.class voor afbeelding‑handtekeningen, en combineer de resultaten indien nodig.
V: 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 eerste + laatste pagina’s duurt meestal minder dan 1 seconde.
V: Werkt dit met gescande PDF’s (rasterafbeeldingen)?
A: Alleen als de barcode is toegevoegd als een digitaal handtekeningobject. Voor alleen raster‑barcodes heb je een beeldgebaseerde barcode‑herkenner nodig (bijv. GroupDocs.Barcode).
V: 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.
Last Updated: 2026-01-29
Tested With: GroupDocs.Signature 23.12 for Java
Author: GroupDocs