Cari Halaman Spesifik Barcode dalam Dokumen Menggunakan Java

Pendahuluan

Pernah menghabiskan berjam‑jam memverifikasi tanda tangan secara manual di ratusan dokumen? Anda tidak sendirian. Baik Anda membangun sistem manajemen kontrak, mengotomatisasi pemrosesan faktur, atau mengamankan catatan kesehatan, melacak dan memvalidasi tanda tangan barcode secara manual itu melelahkan dan rawan kesalahan. Dalam tutorial ini Anda akan belajar cara mencari halaman barcode java dengan GroupDocs.Signature, sehingga Anda dapat secara programatis menargetkan hanya halaman yang penting, memantau kemajuan secara real time, dan menangani berbagai format barcode dengan hanya beberapa baris kode Java.

Apa yang akan Anda pelajari

  • Menyiapkan GroupDocs.Signature dalam proyek Java (≈5 menit)
  • Berlangganan ke event pencarian untuk pelacakan kemajuan real‑time
  • Mengonfigurasi opsi pencarian pintar untuk menargetkan halaman tertentu
  • Menjalankan pencarian dan memproses hasil secara efisien

Jawaban Cepat

  • Perpustakaan mana yang membantu Anda mencari halaman spesifik barcode? GroupDocs.Signature for Java
  • Waktu penyiapan tipikal? Sekitar 5 menit untuk menambahkan dependensi Maven/Gradle dan lisensi
  • Bisakah saya membatasi pencarian hanya pada halaman pertama dan terakhir? Ya – gunakan PagesSetup untuk menentukan halaman yang tepat
  • Format barcode apa yang didukung? QR Code, Code128, Code39, DataMatrix, EAN/UPC, dan lainnya
  • Apakah saya memerlukan lisensi berbayar untuk produksi? Lisensi penuh diperlukan untuk produksi; versi percobaan dapat digunakan untuk evaluasi

Apa itu “pencarian halaman spesifik barcode”?

Mencari halaman spesifik barcode berarti memberi instruksi pada mesin tanda tangan untuk mencari tanda tangan barcode hanya pada halaman yang Anda inginkan—misalnya, halaman pertama, halaman terakhir, atau rentang khusus apa pun. Pendekatan terfokus ini mempercepat pemrosesan, mengurangi penggunaan memori, dan memungkinkan Anda membangun umpan balik UI yang responsif.

Mengapa menggunakan GroupDocs.Signature untuk tugas ini?

GroupDocs.Signature menyediakan API tingkat tinggi yang mengabstraksi decoding barcode tingkat rendah, rendering halaman, dan penanganan format dokumen. Ia mendukung lebih dari 20 format barcode dan dapat memproses dokumen ratusan halaman tanpa memuat seluruh file ke memori, memungkinkan Anda fokus pada logika bisnis alih‑alih parsing file.

Prasyarat

  • JDK 8+ terpasang
  • Maven atau Gradle untuk manajemen dependensi
  • Pemahaman dasar tentang kelas Java, metode, dan penanganan pengecualian
  • Akses ke lisensi GroupDocs.Signature (percobaan atau penuh)

Menyiapkan GroupDocs.Signature untuk Java

Pengaturan Maven

Add the dependency to your pom.xml:

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

Pengaturan Gradle

Or include it in build.gradle:

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

Lebih suka unduhan manual? Anda dapat mengambil rilis terbaru langsung dari halaman unduhan GroupDocs.

Mendapatkan Lisensi Anda

  • Free Trial – mulai segera, tanpa komitmen
  • Temporary License – akses penuh fitur untuk evaluasi
  • Full License – siap produksi, penggunaan tak terbatas

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

Pro tip: Ganti "YOUR_DOCUMENT_PATH" dengan file PDF, DOCX, atau XLSX yang sebenarnya. Jika konsol mencetak pesan sukses, Anda siap melanjutkan.

Memahami Tipe Tanda Tangan Barcode

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.

Tipe BarcodePenggunaan TerbaikPanjang Data Tipikal
QR CodeData berkapasitas tinggi, URL, teks multi‑barisUp to 4,296 characters
Code128Nomor pelacakan alfanumerikVariable
Code39Kode warisan sederhanaUp to 43 characters
DataMatrixLabel kecil, catatan kesehatanUp to 2,335 characters
EAN/UPCIdentifikasi produk, ritel8‑13 digits

Anda sering akan menggunakan barcode ketika Anda membutuhkan pembacaan mesin yang cepat, data terstruktur, atau penandatanganan yang tahan manipulasi.

Cara mencari halaman barcode java?

Signature adalah kelas utama yang mewakili dokumen yang akan diproses. Muat dokumen Anda dengan new Signature("file.pdf"), BarcodeSearchOptions mendefinisikan parameter untuk mencari tanda tangan barcode, dan konfigurasikan untuk menargetkan halaman yang diinginkan, lalu panggil signature.search(options). Metode search menjalankan operasi pencarian menggunakan opsi yang diberikan. Mesin mengembalikan daftar objek BarcodeSignature yang berisi nomor halaman, teks yang didekode, dan koordinat geometris—semua dalam satu panggilan. Pola satu‑langkah ini menghilangkan kebutuhan akan ekstraksi gambar terpisah atau logika decoding khusus.

Sekarang Anda memahami alur keseluruhan, mari selami tiga fitur inti yang akan Anda implementasikan.

Fitur 1: Berlangganan ke Event Pencarian Dokumen

Mengapa ini penting

Saat memproses batch besar, umpan balik real‑time (misalnya, bar progres) meningkatkan UX dan membantu Anda mendeteksi kemacetan lebih awal.

Definisi anchor

Signature mewakili dokumen dan menyediakan kemampuan berlangganan event.

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

Ketiga handler ini memberi Anda waktu mulai, progres langsung, dan statistik akhir—sempurna untuk pencatatan atau pembaruan UI.

Fitur 2: Mengonfigurasi Opsi Pencarian Barcode untuk Halaman Tertentu

Mengapa kontrol granular penting

Memindai setiap halaman dari kontrak 200‑halaman membuang siklus CPU. Menargetkan hanya halaman pertama dan terakhir dapat memotong waktu proses hingga 80 %.

Definisi anchor

PagesSetup menentukan halaman mana yang termasuk dalam operasi pencarian.

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 memungkinkan Anda menyesuaikan pencarian teks (Contains, Exact, StartsWith, EndsWith).
  • Sesuaikan setAllPages dan PagesSetup untuk mencari halaman spesifik barcode saja.

Fitur 3: Menjalankan Pencarian dan Memproses Hasil

Mengapa langkah ini penting

Menemukan barcode hanyalah setengah cerita—Anda perlu bertindak pada data (misalnya, memvalidasi, menyimpan, atau memicu alur kerja).

Definisi anchor

BarcodeSignature mewakili barcode yang terdeteksi dan berisi properti seperti nomor halaman dan teks yang didekode.

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

Anda sekarang memiliki daftar objek BarcodeSignature, masing‑masing mengekspos:

  • getPageNumber() – di mana barcode berada
  • getEncodeType() – QR, Code128, dll.
  • getText() – payload yang didekode
  • Posisi (getLeft(), getTop()) dan ukuran (getWidth(), getHeight())

Contoh: Proses hanya QR code pada halaman terakhir

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

Aplikasi Dunia Nyata

SkenarioBagaimana pencarian halaman‑spesifik barcode membantu
Verifikasi kontrak hukumOtomatis memvalidasi hash sertifikat yang dienkode QR pada halaman tanda tangan
Pelacakan rantai pasokanTemukan ID pengiriman Code128 pada halaman pertama/terakhir manifest
Formulir persetujuan layanan kesehatanEkstrak ID pasien DataMatrix dari halaman persetujuan akhir
Otomatisasi fakturTemukan barcode berawalan “APPR‑” di mana saja pada faktur, lalu alihkan

Masalah Umum dan Solusinya

Masalah 1 – Tidak ada hasil meskipun barcode terlihat

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

Jika barcode tertanam sebagai gambar raster, pertimbangkan menggunakan GroupDocs.Image untuk deteksi berbasis gambar.

Masalah 2 – Performa lambat pada file besar

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

Halaman yang ditargetkan secara dramatis mengurangi waktu pemrosesan; PDF 150‑halaman turun dari ~4 detik menjadi <1 detik ketika Anda membatasi pencarian ke dua halaman.

Masalah 3 – TextMatchType tidak menemukan barcode yang diharapkan

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

Masalah 4 – Kebocoran memori dalam loop yang berjalan lama

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

Blok try‑with‑resources secara otomatis membuang instance Signature.

Praktik Terbaik untuk Produksi

Penanganan error yang kuat

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

Cache hasil ketika dokumen tidak dapat diubah

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

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

Gunakan event progres untuk umpan balik UI

signature.SearchProgress.add(new ProcessProgressEventHandler() {
    public void invoke(Signature sender, ProcessProgressEventArgs args) {
        int percent = (args.getProcessedSignatures() * 100) / args.getTotalSignatures();
        updateProgressBar(percent);
    }
});

Validasi payload barcode

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

Optimalkan pemilihan halaman per tipe dokumen

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

Filter berdasarkan tipe barcode setelah pencarian (jika Anda hanya membutuhkan QR code)

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

Ekstrak dimensi gambar barcode (jika diperlukan untuk rendering)

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

Pertanyaan yang Sering Diajukan

Q: Bisakah saya mencari beberapa format barcode dalam satu panggilan?
A: Ya. BarcodeSearchOptions mencari semua format yang didukung secara default. Filter hasil dengan getEncodeType() jika Anda hanya membutuhkan tipe tertentu.

Q: Bagaimana saya menangani dokumen yang berisi tanda tangan barcode dan gambar?
A: Jalankan pencarian terpisah—gunakan BarcodeSignature.class untuk barcode dan ImageSignature.class untuk tanda tangan gambar, lalu gabungkan hasilnya sesuai kebutuhan.

Q: Apa dampak performa dari mencari semua halaman dibandingkan halaman spesifik?
A: Memindai setiap halaman PDF 50‑halaman dapat memakan 3–5 detik. Membatasi ke halaman pertama + terakhir biasanya selesai dalam kurang dari 1 detik.

Q: Apakah ini bekerja dengan PDF yang dipindai (gambar raster)?
A: Hanya jika barcode ditambahkan sebagai objek tanda tangan digital. Untuk barcode yang hanya berupa raster, Anda memerlukan pengenalan barcode berbasis gambar (misalnya, GroupDocs.Barcode).

Q: Bagaimana saya dapat memverifikasi bahwa tanda tangan barcode tidak telah dimanipulasi?
A: Sematkan hash atau tanda tangan digital di dalam payload barcode, lalu hitung ulang hash pada data asli dan bandingkan. Ini memerlukan kunci penandatanganan asli atau sertifikat.

Terakhir Diperbarui: 2026-06-21
Diuji Dengan: GroupDocs.Signature 23.12 untuk Java
Penulis: GroupDocs

Tutorial Terkait