Vyhledávání stránek s čárovým kódem v dokumentech pomocí Javy
Úvod
Už jste někdy strávili hodiny ručním ověřováním podpisů ve stovkách dokumentů? Nejste v tom sami. Ať už budujete systém pro správu smluv, automatizaci zpracování faktur nebo zabezpečujete zdravotnické záznamy, ruční vyhledávání a validace čárových kódů je únavné a náchylné k chybám. V tomto tutoriálu se naučíte, jak vyhledávat stránky s čárovým kódem v Javě pomocí GroupDocs.Signature, takže můžete programově cílit jen na relevantní stránky, sledovat průběh v reálném čase a zpracovávat různé formáty čárových kódů pomocí několika řádků Java kódu.
Co se naučíte
- Nastavení GroupDocs.Signature v Java projektu (≈5 minut)
- Přihlášení k událostem vyhledávání pro sledování průběhu v reálném čase
- Konfigurace chytrých možností vyhledávání pro cílení konkrétních stránek
- Efektivní spuštění vyhledávání a zpracování výsledků
Rychlé odpovědi
- Která knihovna vám pomůže vyhledávat konkrétní stránky s čárovým kódem? GroupDocs.Signature pro Javu
- Typický čas nastavení? Přibližně 5 minut na přidání Maven/Gradle závislosti a licence
- Mohu omezit vyhledávání na první a poslední stránku? Ano – použijte
PagesSetupk určení konkrétních stránek - Jaké formáty čárových kódů jsou podporovány? QR Code, Code128, Code39, DataMatrix, EAN/UPC a další
- Potřebuji placenou licenci pro produkci? Pro produkci je vyžadována plná licence; pro hodnocení stačí trial
Co je „vyhledávání stránek s čárovým kódem“?
Vyhledávání stránek s čárovým kódem znamená instruovat motor podpisu, aby hledal čárové kódy pouze na stránkách, které vás zajímají – např. na první, poslední nebo v libovolném vlastním rozsahu. Tento zaměřený přístup urychluje zpracování, snižuje využití paměti a umožňuje vytvořit responzivní UI zpětnou vazbu.
Proč použít GroupDocs.Signature pro tento úkol?
GroupDocs.Signature poskytuje vysoceúrovňové API, které abstrahuje nízkoúrovňové dekódování čárových kódů, vykreslování stránek a manipulaci s formáty dokumentů. Podporuje více než 20 formátů čárových kódů a dokáže zpracovat dokumenty s více než stovkou stran bez načítání celého souboru do paměti, což vám umožní soustředit se na obchodní logiku místo parsování souborů.
Požadavky
- JDK 8+ nainstalováno
- Maven nebo Gradle pro správu závislostí
- Základní znalost Java tříd, metod a zpracování výjimek
- Přístup k licenci GroupDocs.Signature (trial nebo plná)
Nastavení GroupDocs.Signature pro Javu
Nastavení Maven
Přidejte závislost do svého pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Nastavení Gradle
Nebo ji zahrňte do build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Preferujete ruční stažení? Nejnovější verzi můžete získat přímo ze GroupDocs download page.
Získání licence
- Free Trial – začněte okamžitě, bez závazků
- Temporary License – plný přístup k funkcím pro hodnocení
- Full License – připravená pro produkci, neomezené použití
Ověřte instalaci pomocí rychlého inicializačního úryvku:
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: Nahraďte
"YOUR_DOCUMENT_PATH"skutečnou cestou k PDF, DOCX nebo XLSX souboru. Pokud konzole vypíše zprávu o úspěchu, jste připraveni.
Porozumění typům čárových kódů v podpisu
Čárové kódy vkládají strojově čitelná data do dokumentu. Na rozdíl od ručně psaných podpisů mohou ukládat ID, časové razítka, URL nebo JSON payloady, což je činí ideálními pro automatizované ověřování.
| Typ čárového kódu | Nejvhodnější použití | Typická délka dat |
|---|---|---|
| QR Code | Data s vysokou hustotou, URL, víceřádkový text | Až 4 296 znaků |
| Code128 | Alfanumerické sledovací čísla | Proměnná |
| Code39 | Jednoduché starší kódy | Až 43 znaků |
| DataMatrix | Malé štítky, zdravotnické záznamy | Až 2 335 znaků |
| EAN/UPC | Identifikace produktů, maloobchod | 8‑13 číslic |
Čárové kódy často používáte, když potřebujete rychlé strojové čtení, strukturovaná data nebo nefalšovatelný podpis.
Jak vyhledávat stránky s čárovým kódem v Javě?
Signature je hlavní třída představující dokument k zpracování. Načtěte dokument pomocí new Signature("file.pdf"), BarcodeSearchOptions definuje parametry pro vyhledávání čárových kódů a nastavte jej tak, aby cílil na požadované stránky, a zavolejte signature.search(options). Metoda search spustí operaci vyhledávání s poskytnutými možnostmi. Engine vrátí seznam objektů BarcodeSignature, které obsahují čísla stránek, dekódovaný text a geometrické souřadnice – vše v jednom volání. Tento jednoprostorový vzor eliminuje potřebu samostatného extrahování obrázků nebo vlastního dekódování.
Nyní, když rozumíte celkovému toku, pojďme se ponořit do tří hlavních funkcí, které implementujete.
Funkce 1: Přihlášení k událostem vyhledávání dokumentu
Proč je to důležité
Při zpracování velkých dávek poskytuje zpětná vazba v reálném čase (např. ukazatele průběhu) lepší UX a pomáhá včas odhalit zdržení.
Definiční kotva
Signature představuje dokument a poskytuje možnosti přihlášení k událostem.
Implementace
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");
}
});
Tyto tři obslužné rutiny vám poskytují čas zahájení, živý průběh a konečnou statistiku – ideální pro logování nebo aktualizace UI.
Funkce 2: Konfigurace možností vyhledávání čárových kódů pro konkrétní stránky
Proč je důležitá jemná kontrola
Prohledávání každé stránky 200‑stránkové smlouvy plýtvá CPU cykly. Cílení jen na první a poslední stránku může zkrátit dobu běhu až o 80 %.
Definiční kotva
PagesSetup určuje, které stránky jsou zahrnuty do operace vyhledávání.
Implementace
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");
- Typy shody vám umožňují jemně ladit vyhledávání textu (
Contains,Exact,StartsWith,EndsWith). - Upravit
setAllPagesaPagesSetuptak, aby vyhledával pouze konkrétní stránky s čárovým kódem.
Funkce 3: Spuštění vyhledávání a zpracování výsledků
Proč je tento krok důležitý
Nalezení čárových kódů je jen polovina příběhu – musíte s daty něco udělat (např. validovat, uložit nebo spustit workflow).
Definiční kotva
BarcodeSignature představuje detekovaný čárový kód a obsahuje jeho vlastnosti, jako je číslo stránky a dekódovaný text.
Implementace
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);
}
Nyní máte seznam objektů BarcodeSignature, z nichž každý poskytuje:
getPageNumber()– kde se čárový kód nacházígetEncodeType()– typ kódování (QR, Code128 atd.)getText()– dekódované údaje- Pozice (
getLeft(),getTop()) a velikost (getWidth(),getHeight())
Příklad: Zpracovat jen QR kódy na poslední stránce
for (BarcodeSignature barcodeSignature : signatures) {
if (barcodeSignature.getPageNumber() == lastPageNumber
&& barcodeSignature.getEncodeType().equals("QRCode")) {
// Process only QR codes from the final page
processApprovalCode(barcodeSignature.getText());
}
}
Praktické aplikace
| Scénář | Jak vyhledávání stránek s čárovým kódem pomáhá |
|---|---|
| Ověřování právních smluv | Automatické ověření QR‑kódem zakódovaných hashů certifikátů na stránce s podpisem |
| Sledování dodavatelského řetězce | Najít Code128 ID zásilek na první/poslední stránce manifestů |
| Zdravotnické souhlasné formuláře | Extrahovat DataMatrix ID pacientů z poslední stránky souhlasu |
| Automatizace faktur | Najít čárové kódy s předponou „APPR‑“ kdekoliv na faktuře a následně směrovat |
Časté problémy a řešení
Problém 1 – Žádné výsledky i přes viditelné čárové kódy
// Ensure you are not limiting pages too aggressively
options.setAllPages(true);
Pokud je čárový kód vložen jako rastrový obrázek, zvažte použití GroupDocs.Image pro detekci založenou na obrázcích.
Problém 2 – Pomalý výkon u velkých souborů
PagesSetup pagesSetup = new PagesSetup();
pagesSetup.setLastPage(true); // Most signatures are on the last page
pagesSetup.setFirstPage(true);
options.setPagesSetup(pagesSetup);
Cílené stránky dramaticky snižují dobu zpracování; 150‑stránkový PDF se zhruba 4 sekund zkrátí na <1 sekundu, když omezíte vyhledávání na dvě stránky.
Problém 3 – TextMatchType nenachází očekávané čárové kódy
String searchText = "12345".trim().toLowerCase();
options.setText(searchText);
options.setMatchType(TextMatchType.StartsWith); // Try a more permissive mode
Problém 4 – Úniky paměti v dlouho běžících smyčkách
try (Signature signature = new Signature("document.pdf")) {
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Process signatures
}
Blok try‑with‑resources automaticky uvolní instanci Signature.
Nejlepší postupy pro produkci
Robustní zpracování chyb
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);
}
Ukládejte výsledky do cache, pokud jsou dokumenty neměnné
Map<String, List<BarcodeSignature>> cache = new ConcurrentHashMap<>();
public List<BarcodeSignature> getCachedSignatures(String docId) {
return cache.computeIfAbsent(docId, id -> performSearch(id));
}
Používejte události postupu pro zpětnou vazbu UI
signature.SearchProgress.add(new ProcessProgressEventHandler() {
public void invoke(Signature sender, ProcessProgressEventArgs args) {
int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
updateProgressBar(percent);
}
});
Ověřujte payloady čárových kódů
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);
}
}
Optimalizujte výběr stránek podle typu dokumentu
PagesSetup contractsSetup = new PagesSetup();
contractsSetup.setLastPage(true); // Contracts usually signed on last page
options.setPagesSetup(contractsSetup);
Filtrovat podle typu čárového kódu po vyhledávání (pokud potřebujete jen QR kódy)
for (BarcodeSignature sig : signatures) {
if ("QRCode".equals(sig.getEncodeType())) {
// Process QR code
}
}
Extrahujte rozměry obrázku čárového kódu (pokud je potřeba pro vykreslení)
for (BarcodeSignature sig : signatures) {
int width = sig.getWidth();
int height = sig.getHeight();
// Use dimensions for overlay or thumbnail generation
}
Často kladené otázky
Q: Mohu vyhledávat více formátů čárových kódů najednou?
A: Ano. BarcodeSearchOptions ve výchozím nastavení prohledává všechny podporované formáty. Výsledky můžete filtrovat pomocí getEncodeType(), pokud potřebujete jen konkrétní typy.
Q: Jak zacházet s dokumenty, které obsahují jak čárové kódy, tak obrázkové podpisy?
A: Proveďte samostatná vyhledávání – použijte BarcodeSignature.class pro čárové kódy a ImageSignature.class pro obrázkové podpisy, poté výsledky podle potřeby sloučte.
Q: Jaký je dopad výkonu při vyhledávání všech stránek oproti konkrétním stránkám?
A: Prohledání každé stránky 50‑stránkového PDF může trvat 3–5 sekund. Omezení na první + poslední stránku obvykle skončí pod 1 sekundou.
Q: Funguje to se skenovanými PDF (rastrové obrázky)?
A: Pouze pokud byl čárový kód přidán jako digitální objekt podpisu. Pro čistě rastrové čárové kódy budete potřebovat rozpoznávač založený na obraze (např. GroupDocs.Barcode).
Q: Jak mohu ověřit, že podpis čárového kódu nebyl pozměněn?
A: Vložte hash nebo digitální podpis do payloadu čárového kódu, poté přepočítejte hash na původních datech a porovnejte. To vyžaduje původní podepisovací klíč nebo certifikát.
Last Updated: 2026-06-21
Tested With: GroupDocs.Signature 23.12 for Java
Author: GroupDocs