Sök efter streckkodsspecifika sidor i dokument med Java

Introduktion

Har du någonsin tillbringat timmar med att manuellt verifiera signaturer i hundratals dokument? Du är inte ensam. Oavsett om du bygger ett kontraktshanteringssystem, automatiserar fakturabehandling eller säkrar patientjournaler, är det tråkigt och felbenäget att manuellt spåra och validera streckkodssignaturer. I den här handledningen lär du dig hur du söker efter streckkodssidor i Java med GroupDocs.Signature, så att du programatiskt kan rikta in dig på bara de sidor som är relevanta, övervaka framsteg i realtid och hantera en mängd olika streckkodformat med bara några få rader Java‑kod.

Vad du kommer att lära dig

  • Installera GroupDocs.Signature i ett Java‑projekt (≈5 minuter)
  • Prenumerera på sökhändelser för realtids‑framstegsspårning
  • Konfigurera smarta sökalternativ för att rikta in dig på specifika sidor
  • Utföra sökningen och bearbeta resultat effektivt

Snabba svar

  • Vilket bibliotek hjälper dig att söka streckkodsspecifika sidor? GroupDocs.Signature för Java
  • Typisk installationstid? Ungefär 5 minuter för att lägga till Maven/Gradle‑beroendet och en licens
  • Kan jag begränsa sökningen till första och sista sidan? Ja – använd PagesSetup för att ange exakta sidor
  • Vilka streckkodformat stöds? QR‑kod, Code128, Code39, DataMatrix, EAN/UPC och fler
  • Behöver jag en betald licens för produktion? En full licens krävs för produktion; en provlicens fungerar för utvärdering

Vad är “search barcode specific pages”?

Att söka streckkodsspecifika sidor innebär att instruera signaturmotorn att leta efter streckkodssignaturer endast på de sidor du är intresserad av – t.ex. första sidan, sista sidan eller ett eget intervall. Detta fokuserade tillvägagångssätt snabbar upp bearbetningen, minskar minnesanvändningen och låter dig bygga responsiv UI‑feedback.

Varför använda GroupDocs.Signature för denna uppgift?

GroupDocs.Signature erbjuder ett hög‑nivå‑API som döljer låg‑nivå streckkodavkodning, sidrendering och dokumentformatshantering. Det stöder över 20 streckkodformat och kan bearbeta dokument med hundratals sidor utan att ladda hela filen i minnet, så att du kan fokusera på affärslogiken istället för filparsing.

Förutsättningar

  • JDK 8+ installerat
  • Maven eller Gradle för beroendehantering
  • Grundläggande kunskap om Java‑klasser, metoder och undantagshantering
  • Tillgång till en GroupDocs.Signature‑licens (prov eller full)

Installera GroupDocs.Signature för Java

Maven‑inställning

Lägg till beroendet i din pom.xml:

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

Gradle‑inställning

Eller inkludera det i build.gradle:

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

Föredrar du manuella nedladdningar? Du kan hämta den senaste releasen direkt från GroupDocs download page.

Skaffa din licens

  • Free Trial – starta omedelbart, ingen förpliktelse
  • Temporary License – full funktionalitet för utvärdering
  • Full License – produktionsklar, obegränsad användning

Verifiera installationen med ett snabbt initierings‑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: Ersätt "YOUR_DOCUMENT_PATH" med en faktisk PDF‑, DOCX‑ eller XLSX‑fil. Om konsolen skriver ut framgångsmeddelandet är du redo att köra.

Förstå streckkodssignaturtyper

Streckkoder bäddar in maskinläsbar data i ett dokument. Till skillnad från handskrivna signaturer kan de lagra ID‑nummere, tidsstämplar, URL:er eller JSON‑payloads, vilket gör dem idealiska för automatiserad verifiering.

StreckkodstypBäst lämpad förTypisk datalängd
QR CodeData med hög densitet, URL:er, flerradig textUpp till 4 296 tecken
Code128Alfanumeriska spårningsnummerVariabel
Code39Enkla äldre koderUpp till 43 tecken
DataMatrixSmå etiketter, patientjournalerUpp till 2 335 tecken
EAN/UPCProduktidentifiering, detaljhandel8‑13 siffror

Du kommer ofta att använda streckkoder när du behöver snabb maskinläsning, strukturerad data eller manipulering‑säker signering.

Hur man söker streckkodssidor i Java?

Signature är huvudklassen som representerar ett dokument som ska bearbetas. Ladda ditt dokument med new Signature("file.pdf"), BarcodeSearchOptions definierar parametrarna för att söka streckkodssignaturer, konfigurera den för att rikta in dig på önskade sidor och anropa signature.search(options). search‑metoden kör sökoperationen med de angivna alternativen. Motorn returnerar en lista med BarcodeSignature‑objekt som innehåller sidnummer, avkodad text och geometriska koordinater – allt i ett enda anrop. Detta en‑stegs‑mönster eliminerar behovet av separat bildextraktion eller anpassad avkodningslogik.

Nu när du förstår hela flödet, låt oss gå in på de tre kärnfunktionerna du ska implementera.

Funktion 1: Prenumerera på dokumentets sökhändelser

Varför detta är viktigt

När du bearbetar stora batcher förbättrar realtids‑feedback (t.ex. förloppsindikatorer) användarupplevelsen och hjälper dig att upptäcka stopp tidigt.

Definitionsankare

Signature representerar dokumentet och erbjuder möjlighet att prenumerera på händelser.

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

Dessa tre hanterare ger dig starttid, levande framsteg och slutstatistik – perfekt för loggning eller UI‑uppdateringar.

Funktion 2: Konfigurera streckkodssökalternativ för specifika sidor

Varför finmaskig kontroll är viktigt

Att skanna varje sida i ett 200‑sidigt kontrakt slösar CPU‑cykler. Att rikta in sig bara på första och sista sidan kan minska körtiden med upp till 80 %.

Definitionsankare

PagesSetup specificerar vilka sidor som inkluderas i sökoperationen.

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 låter dig finjustera textsökningen (Contains, Exact, StartsWith, EndsWith).
  • Justera setAllPages och PagesSetup för att söka streckkodsspecifika sidor endast.

Funktion 3: Utföra sökningen och bearbeta resultat

Varför detta steg är viktigt

Att hitta streckkoder är bara halva historien – du måste agera på datan (t.ex. validera, lagra eller trigga arbetsflöden).

Definitionsankare

BarcodeSignature representerar en upptäckt streckkod och innehåller egenskaper som sidnummer och avkodad 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);
}

Du har nu en lista med BarcodeSignature‑objekt, var och en exponerar:

  • getPageNumber() – var streckkoden finns
  • getEncodeType() – QR, Code128, etc.
  • getText() – avkodad payload
  • Position (getLeft(), getTop()) och storlek (getWidth(), getHeight())

Exempel: Bearbeta endast QR‑koder på sista sidan

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

Verkliga tillämpningar

ScenarioHur streckkod‑specifik‑sidssökning hjälper
Juridisk kontraktsverifieringAuto‑validera QR‑kodade certifikathashar på signatursidan
Supply‑chain‑spårningHitta Code128‑sändnings‑ID på första/slut‑sidor av manifest
Patient‑samtyckesformulärExtrahera DataMatrix‑patient‑ID från sista samtyckessidan
Faktura‑automationHitta “APPR‑”‑prefixade streckkoder var som helst på fakturan, sedan routa

Vanliga problem och lösningar

Problem 1 – Inga resultat trots synliga streckkoder

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

Om streckkoden är inbäddad som en rasterbild, överväg att använda GroupDocs.Image för bildbaserad detektering.

Problem 2 – Långsam prestanda på stora filer

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

Målinriktade sidor minskar bearbetningstiden dramatiskt; en 150‑sidig PDF går från ~4 sekunder till <1 sekund när du begränsar sökningen till två sidor.

Problem 3 – TextMatchType hittar inte förväntade streckkoder

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

Problem 4 – Minnesläckor i långvariga loopar

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

try‑with‑resources‑blocket frigör Signature‑instansen automatiskt.

Bästa praxis för produktion

Robust felhantering

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

Cacha resultat när dokument är oföränderliga

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

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

Använd framstegshändelser 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);
    }
});

Validera streckkodspayloads

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

Optimera sidval per dokumenttyp

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

Filtrera efter streckkodstyp efter sökning (om du bara behöver QR‑koder)

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

Extrahera streckkodens bilddimensioner (om det behövs för rendering)

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

Vanliga frågor

Q: Kan jag söka efter flera streckkodformat i ett anrop?
A: Ja. BarcodeSearchOptions söker alla stödda format som standard. Filtrera resultat med getEncodeType() om du bara behöver specifika typer.

Q: Hur hanterar jag dokument som innehåller både streckkod‑ och bildsignaturer?
A: Kör separata sökningar – använd BarcodeSignature.class för streckkoder och ImageSignature.class för bildsignaturer, kombinera sedan resultaten vid behov.

Q: Vad är prestandapåverkan av att söka alla sidor kontra specifika sidor?
A: Att skanna varje sida i en 50‑sidig PDF kan ta 3–5 sekunder. Att begränsa till första + sista sidan slutförs vanligtvis på under 1 sekund.

Q: Fungerar detta med skannade PDF‑filer (rasterbilder)?
A: Endast om streckkoden lades till som ett digitalt signaturobjekt. För enbart raster‑streckkoder behövs en bildbaserad streckkodsläsare (t.ex. GroupDocs.Barcode).

Q: Hur kan jag verifiera att en streckkodssignatur inte har manipulerats?
A: Bädda in en hash eller digital signatur i streckkodens payload, beräkna sedan hash på originaldatan och jämför. Detta kräver den ursprungliga signeringsnyckeln eller certifikatet.


Senast uppdaterad: 2026-06-21
Testad med: GroupDocs.Signature 23.12 for Java
Författare: GroupDocs

Relaterade handledningar