Vyhledávání specifických 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, automatizujete zpracování faktur nebo zabezpečujete zdravotnické záznamy, ruční vyhledávání a ověřování čárových kódů je únavné a náchylné k chybám.
V tomto průvodci vám ukážeme jak vyhledávat specifické stránky s čárovým kódem ve vašich dokumentech programově pomocí Javy a GroupDocs.Signature. Na konci budete schopni detekovat podpisy na vybraných stránkách, sledovat průběh vyhledávání v reálném čase a pracovat s různými formáty čárových kódů – vše s čistým a udržovatelným kódem.
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 inteligentních možností vyhledávání pro cílení na konkrétní stránky
- Spuštění vyhledávání a efektivní zpracování výsledků
Rychlé odpovědi
- Která knihovna vám pomůže vyhledávat specifické 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; zkušební verze funguje pro hodnocení
Co je „vyhledávání specifických stránek s čárovým kódem“?
Vyhledávání specifických stránek s čárovým kódem znamená instruovat motor podpisů, aby hledal čárové kódy pouze na stránkách, které vás zajímají – např. na první stránce, poslední stránce 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í zpětnou vazbu uživatelského rozhraní.
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 zpracování formátů dokumentů. Funguje s PDF, DOCX, XLSX a mnoha dalšími formáty přímo z krabice, což vám umožní soustředit se na obchodní logiku místo parsování souborů.
Předpoklady
- 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 (zkušební nebo plná)
Nastavení GroupDocs.Signature pro Javu
Nastavení Maven
Add the dependency to your pom.xml:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Nastavení Gradle
Or include it in build.gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
Preferujete ruční stažení? Můžete si stáhnout nejnovější verzi přímo ze stránky ke stažení GroupDocs.
Získání licence
- Free Trial – začněte okamžitě, bez závazku
- Temporary License – plný přístup ke všem funkcím pro hodnocení
- Full License – připravená pro produkci, neomezené použití
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.");
}
}
Tip: Nahraďte
"YOUR_DOCUMENT_PATH"skutečnou PDF, DOCX nebo XLSX souborem. Pokud konzole vypíše zprávu o úspěchu, jste připraveni pokračovat.
Porozumění typům čárových kódů v podpisu
Barcodes embed machine‑readable data inside a document. Unlike handwritten signatures, they can store IDs, timestamps, URLs, or JSON payloads, making them ideal for automated verification.
| 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žijete, když potřebujete rychlé strojové čtení, strukturovaná data nebo podpis odolný proti manipulaci.
Jak vyhledávat specifické stránky s čárovým kódem
Rozdělíme implementaci do tří zaměřených funkcí.
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ší uživatelský zážitek a pomáhá včas odhalit zdržení.
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í, průběžný pokrok 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ého kontraktu plýtvá cykly CPU. Cílení pouze na první a poslední stránku může zkrátit dobu běhu o 80 %.
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 textové vyhledávání (
Contains,Exact,StartsWith,EndsWith). - Upravte
setAllPagesaPagesSetuppro vyhledávání specifických stránek s čárovým kódem pouze.
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ř. ověřit, uložit nebo spustit workflow).
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()– QR, Code128, atd.getText()– dekódovaný payload- Pozice (
getLeft(),getTop()) a velikost (getWidth(),getHeight())
Příklad: Zpracovat pouze 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 pomáhá vyhledávání specifických stránek s čárovým kódem |
|---|---|
| Ověření právních smluv | Automatické ověření QR‑kódovaných hashů certifikátů na stránce s podpisem |
| Sledování dodavatelského řetězce | Vyhledání Code128 ID zásilek na první/poslední stránce manifestů |
| Zdravotnické souhlasné formuláře | Extrahování DataMatrix ID pacientů z poslední stránky souhlasu |
| Automatizace faktur | Najít čárové kódy s předponou „APPR‑“ kdekoliv na faktuře a poté 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 – Pomalejší 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 výrazně snižují dobu zpracování.
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 průběhu 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 jsou potřeba pro vykreslování)
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ů v jednom volání?
A: Ano. BarcodeSearchOptions vyhledává ve výchozím nastavení 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é podle potřeby kombinujte výsledky.
Q: Jaký je dopad na výkon při vyhledávání na všech stránkách oproti specifický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ánky 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 objekt digitálního podpisu. Pro čárové kódy pouze v rastrovém formátu budete potřebovat rozpoznávač čárových kódů založený na obrázcích (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í podpisový klíč nebo certifikát.
Poslední aktualizace: 2026-01-29
Testováno s: GroupDocs.Signature 23.12 pro Javu
Autor: GroupDocs