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 guiden visar vi dig hur du söker efter streckkodsspecifika sidor i dina dokument programatiskt med Java och GroupDocs.Signature. När du är klar kommer du kunna upptäcka signaturer på utvalda sidor, övervaka sökframsteg i realtid och hantera en mängd olika streckkodformat – allt med ren, underhållbar 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 resultaten 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
PagesSetupfö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 betyder “sök streckkodsspecifika sidor”?
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 någon anpassad 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 fungerar med PDF, DOCX, XLSX och många andra format direkt ur lådan, så att du kan koncentrera dig på affärslogik istället för fil‑parsing.
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‑installation
Lägg till beroendet i din pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle‑installation
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
- Gratis prov – starta omedelbart, ingen förpliktelse
- Tillfällig licens – full funktionalitet för utvärdering
- Full licens – 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‑tips: 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äsbara 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.
| Streckkodstyp | Bäst använd för | Typisk datalängd |
|---|---|---|
| QR‑kod | Högdensitetsdata, URL:er, flerradig text | Upp till 4 296 tecken |
| Code128 | Alfanumeriska spårningsnummer | Variabel |
| Code39 | Enkla äldre koder | Upp till 43 tecken |
| DataMatrix | Små etiketter, patientjournaler | Upp till 2 335 tecken |
| EAN/UPC | Produktidentifiering, detaljhandel | 8‑13 siffror |
Du använder ofta streckkoder när du behöver snabb maskinläsning, strukturerad data eller manipulering‑resistent signering.
Hur man söker streckkodsspecifika sidor
Vi delar upp implementeringen i tre fokuserade funktioner.
Funktion 1: Prenumerera på dokument‑sök‑händelser
Varför detta är viktigt
När du bearbetar stora satser ger realtids‑feedback (t.ex. progress‑bars) bättre UX och hjälper dig upptäcka stopp tidigt.
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 fin‑granulär kontroll är viktig
Att skanna varje sida i ett 200‑sidigt kontrakt slösar CPU‑cykler. Att rikta in sig på endast första och sista sidan kan minska körtiden med 80 %.
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‑typer låter dig finjustera textsökningen (
Contains,Exact,StartsWith,EndsWith). - Justera
setAllPagesochPagesSetupför att söka streckkodsspecifika sidor endast.
Funktion 3: Utföra sökningen och bearbeta resultaten
Varför detta steg är viktigt
Att hitta streckkoder är bara halva historien – du måste agera på data (t.ex. validera, lagra eller trigga arbetsflöden).
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 finnsgetEncodeType()– 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
| Scenario | Hur sökning på streckkodsspecifika sidor hjälper |
|---|---|
| Verifiering av juridiska kontrakt | Autovalidera QR‑kodade certifikat‑hashar på signatursidan |
| Spårning i leveranskedjan | Hitta Code128‑frakt‑ID:n på första/sista sidan av manifest |
| Samtyckesformulär inom vården | Extrahera DataMatrix‑patient‑ID:n från sista samtyckessidan |
| Faktura‑automation | Hitta “APPR‑”‑prefixade streckkoder var som helst på fakturan, och routa därefter |
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 raster‑bild, överväg att använda GroupDocs.Image för bild‑baserad detektion.
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.
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 disponerar 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 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 efter 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 (raster‑bilder)?
A: Endast om streckkoden lades till som ett digitalt signaturobjekt. För enbart raster‑streckkoder behövs en bild‑baserad 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å originaldata och jämför. Detta kräver den ursprungliga signeringsnyckeln eller certifikatet.
Senast uppdaterad: 2026-01-29
Testad med: GroupDocs.Signature 23.12 för Java
Författare: GroupDocs