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 PagesSetup k 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óduNejvhodnější použitíTypická délka dat
QR CodeData s vysokou hustotou, URL, víceřádkový textAž 4 296 znaků
Code128Alfanumerické sledovací číslaProměnná
Code39Jednoduché starší kódyAž 43 znaků
DataMatrixMalé štítky, zdravotnické záznamyAž 2 335 znaků
EAN/UPCIdentifikace produktů, maloobchod8‑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 setAllPages a PagesSetup pro 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 smluvAutomatické ověření QR‑kódovaných hashů certifikátů na stránce s podpisem
Sledování dodavatelského řetězceVyhledání Code128 ID zásilek na první/poslední stránce manifestů
Zdravotnické souhlasné formulářeExtrahování DataMatrix ID pacientů z poslední stránky souhlasu
Automatizace fakturNají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