ค้นหาหน้าตามบาร์โค้ดในเอกสารโดยใช้ Java

บทนำ

เคยใช้เวลาหลายชั่วโมงตรวจสอบลายเซ็นด้วยตนเองในเอกสารหลายร้อยฉบับหรือไม่? คุณไม่ได้อยู่คนเดียว ไม่ว่าคุณจะกำลังสร้างระบบจัดการสัญญา, ทำระบบอัตโนมัติการประมวลผลใบแจ้งหนี้, หรือรักษาความปลอดภัยของบันทึกสุขภาพ การติดตามและตรวจสอบลายเซ็นบาร์โค้ดด้วยมือเป็นงานที่น่าเบื่อและเสี่ยงต่อข้อผิดพลาด

ในคู่มือนี้เราจะแสดง วิธีการค้นหาหน้าตามบาร์โค้ด ในเอกสารของคุณโดยใช้ Java และ GroupDocs.Signature. เมื่อคุณทำตามจนจบแล้ว คุณจะสามารถตรวจจับลายเซ็นบนหน้าที่เลือก, ติดตามความคืบหน้าการค้นหาแบบเรียลไทม์, และจัดการกับรูปแบบบาร์โค้ดหลายประเภท—ทั้งหมดด้วยโค้ดที่สะอาดและดูแลได้ง่าย

สิ่งที่คุณจะได้เรียนรู้

  • การตั้งค่า GroupDocs.Signature ในโครงการ Java (≈5 นาที)
  • การสมัครรับเหตุการณ์การค้นหาเพื่อการติดตามความคืบหน้าแบบเรียลไทม์
  • การกำหนดค่าตัวเลือกการค้นอัจฉริยะเพื่อกำหนดเป้าหมายที่หน้าที่เฉพาะเจาะจง
  • การดำเนินการค้นหาและประมวลผลผลลัพธ์อย่างมีประสิทธิภาพ

คำตอบสั้น

  • ไลบรารีใดที่ช่วยคุณค้นหาหน้าตามบาร์โค้ด? GroupDocs.Signature for Java
  • เวลาในการตั้งค่าปกติ? ประมาณ 5 นาทีเพื่อเพิ่ม dependency ของ Maven/Gradle และใบอนุญาต
  • ฉันสามารถจำกัดการค้นหาให้เฉพาะหน้าแรกและหน้าสุดท้ายได้หรือไม่? ได้ – ใช้ PagesSetup เพื่อระบุหน้าที่ต้องการอย่างแม่นยำ
  • รูปแบบบาร์โค้ดที่รองรับมีอะไรบ้าง? QR Code, Code128, Code39, DataMatrix, EAN/UPC, และอื่น ๆ
  • ต้องใช้ใบอนุญาตแบบจ่ายเงินสำหรับการใช้งานจริงหรือไม่? จำเป็นต้องมีใบอนุญาตเต็มสำหรับการใช้งานจริง; เวอร์ชันทดลองใช้ได้สำหรับการประเมิน

“ค้นหาหน้าตามบาร์โค้ด” คืออะไร?

การค้นหาหน้าตามบาร์โค้ดหมายถึงการสั่งให้เอนจินลายเซ็นมองหาลายเซ็นบาร์โค้ดเฉพาะบนหน้าที่คุณสนใจ—เช่น หน้าแรก, หน้าสุดท้าย, หรือช่วงหน้าที่กำหนดเอง วิธีการที่มุ่งเน้นนี้ช่วยเร่งการประมวลผล, ลดการใช้หน่วยความจำ, และทำให้คุณสร้าง UI ที่ตอบสนองได้ดีขึ้น

ทำไมต้องใช้ GroupDocs.Signature สำหรับงานนี้?

GroupDocs.Signature มี API ระดับสูงที่ซ่อนการถอดรหัสบาร์โค้ดระดับล่าง, การเรนเดอร์หน้า, และการจัดการรูปแบบเอกสารต่าง ๆ ทำงานได้กับ PDF, DOCX, XLSX, และรูปแบบอื่น ๆ มากมายโดยไม่ต้องเขียนโค้ดเพิ่มเติม ช่วยให้คุณโฟกัสที่ตรรกะธุรกิจแทนการแยกวิเคราะห์ไฟล์

ข้อกำหนดเบื้องต้น

  • JDK 8+ ติดตั้งแล้ว
  • Maven หรือ Gradle สำหรับจัดการ dependency
  • ความคุ้นเคยพื้นฐานกับคลาส, เมธอด, และการจัดการข้อยกเว้นของ Java
  • มีใบอนุญาต GroupDocs.Signature (ทดลองหรือเต็ม)

การตั้งค่า GroupDocs.Signature สำหรับ Java

การตั้งค่า Maven

เพิ่ม dependency ลงใน pom.xml ของคุณ:

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

การตั้งค่า Gradle

หรือใส่ใน build.gradle:

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

ต้องการดาวน์โหลดด้วยตนเอง? คุณสามารถรับเวอร์ชันล่าสุดได้โดยตรงจาก หน้าดาวน์โหลด GroupDocs

การรับใบอนุญาตของคุณ

  • Free Trial – เริ่มใช้งานได้ทันที, ไม่มีข้อผูกมัด
  • Temporary License – เข้าถึงฟีเจอร์เต็มสำหรับการประเมิน
  • Full License – พร้อมใช้งานในผลิตภัณฑ์, ไม่จำกัดการใช้

ตรวจสอบการติดตั้งด้วยโค้ดสั้น ๆ ด้านล่าง:

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

เคล็ดลับระดับมืออาชีพ: แทนที่ "YOUR_DOCUMENT_PATH" ด้วยไฟล์ PDF, DOCX, หรือ XLSX จริง หากคอนโซลแสดงข้อความสำเร็จ คุณก็พร้อมเริ่มทำงานแล้ว

ทำความเข้าใจประเภทลายเซ็นบาร์โค้ด

บาร์โค้ดฝังข้อมูลที่เครื่องอ่านได้ภายในเอกสาร ไม่เหมือนลายเซ็นที่เขียนด้วยมือที่เก็บเพียงภาพลายเซ็นเท่านั้น บาร์โค้ดสามารถเก็บ ID, timestamp, URL, หรือ payload แบบ JSON ทำให้เหมาะกับการตรวจสอบอัตโนมัติ

ประเภทบาร์โค้ดการใช้งานที่เหมาะความยาวข้อมูลโดยทั่วไป
QR Codeข้อมูลความหนาแน่นสูง, URL, ข้อความหลายบรรทัดสูงสุด 4,296 ตัวอักษร
Code128หมายเลขติดตามแบบอัลฟานูเมอริกความยาวเปลี่ยนแปลงได้
Code39โค้ดแบบดั้งเดิมที่เรียบง่ายสูงสุด 43 ตัวอักษร
DataMatrixป้ายเล็ก, บันทึกสุขภาพสูงสุด 2,335 ตัวอักษร
EAN/UPCรหัสสินค้า, การค้าปลีก8‑13 หลัก

คุณมักจะใช้บาร์โค้ดเมื่อจำเป็นต้องอ่านข้อมูลด้วยเครื่องเร็ว, มีโครงสร้าง, หรือต้องการลายเซ็นที่ตรวจสอบการปลอมแปลงได้

วิธีการค้นหาหน้าตามบาร์โค้ด

เราจะแบ่งการทำงานออกเป็นสามฟีเจอร์หลัก

ฟีเจอร์ 1: สมัครรับเหตุการณ์การค้นหาเอกสาร

ทำไมต้องสนใจ

เมื่อประมวลผลชุดข้อมูลขนาดใหญ่ การให้ฟีดแบ็กแบบเรียลไทม์ (เช่น แถบความคืบหน้า) ช่วยปรับปรุง UX และทำให้คุณตรวจจับการหยุดชะงักได้เร็วขึ้น

การนำไปใช้

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

ตัวจัดการทั้งสามนี้ให้ข้อมูลเวลาเริ่มต้น, ความคืบหน้าแบบสด, และสถิติสุดท้าย—เหมาะสำหรับการบันทึกหรืออัปเดต UI

ฟีเจอร์ 2: กำหนดค่าตัวเลือกการค้นหาบาร์โค้ดสำหรับหน้าที่เฉพาะเจาะจง

ทำไมต้องควบคุมอย่างละเอียด

การสแกนทุกหน้าของสัญญา 200 หน้าใช้ทรัพยากร CPU มากเกินจำเป็น การกำหนดเป้าหมายเฉพาะหน้าแรกและหน้าสุดท้ายสามารถลดเวลาในการทำงานได้ถึง 80 %

การนำไปใช้

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 ช่วยปรับการค้นหาข้อความ (Contains, Exact, StartsWith, EndsWith)
  • ปรับ setAllPages และ PagesSetup เพื่อ ค้นหาหน้าตามบาร์โค้ด เท่านั้น

ฟีเจอร์ 3: ดำเนินการค้นหาและประมวลผลผลลัพธ์

ทำไมขั้นตอนนี้สำคัญ

การค้นหาบาร์โค้ดเป็นเพียงครึ่งหนึ่งของเรื่อง—you need to act on the data (e.g., validate, store, or trigger workflows).

การนำไปใช้

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

ตอนนี้คุณจะได้รายการอ็อบเจกต์ BarcodeSignature ที่ให้ข้อมูล:

  • getPageNumber() – หน้าที่บาร์โค้ดอยู่
  • getEncodeType() – QR, Code128, ฯลฯ
  • getText() – payload ที่ถอดรหัสแล้ว
  • ตำแหน่ง (getLeft(), getTop()) และขนาด (getWidth(), getHeight())

ตัวอย่าง: ประมวลผลเฉพาะ QR code บนหน้าสุดท้าย

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

การใช้งานในโลกจริง

สถานการณ์วิธีที่การค้นหาหน้าตามบาร์โค้ดช่วย
ตรวจสอบสัญญากฎหมายตรวจสอบแฮชใบรับรองที่เข้ารหัสด้วย QR บนหน้าลายเซ็น
ติดตามห่วงโซ่อุปทานค้นหา Code128 ของหมายเลขการจัดส่งบนหน้าแรก/สุดท้ายของใบส่งของ
แบบฟอร์มยินยอมสุขภาพดึง DataMatrix ของรหัสผู้ป่วยจากหน้ายินยอมสุดท้าย
ระบบอัตโนมัติใบแจ้งหนี้ค้นหาบาร์โค้ดที่ขึ้นต้นด้วย “APPR‑” ใด ๆ บนใบแจ้งหนี้ แล้วส่งต่อ

ปัญหาที่พบบ่อยและวิธีแก้

ปัญหา 1 – ไม่พบผลลัพธ์แม้จะเห็นบาร์โค้ด

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

หากบาร์โค้ดฝังเป็นภาพ raster ให้พิจารณาใช้ GroupDocs.Image สำหรับการตรวจจับแบบภาพ

ปัญหา 2 – ประสิทธิภาพช้าในไฟล์ขนาดใหญ่

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

การกำหนดเป้าหน้าช่วยลดเวลาในการประมวลผลอย่างมาก

ปัญหา 3 – TextMatchType ไม่พบบาร์โค้ดที่คาดหวัง

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

ปัญหา 4 – การรั่วไหลของหน่วยความจำในลูปที่ทำงานต่อเนื่อง

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

บล็อก try‑with‑resources จะทำการปิดอ็อบเจกต์ Signature โดยอัตโนมัติ

แนวทางปฏิบัติที่ดีที่สุดสำหรับการผลิต

การจัดการข้อผิดพลาดอย่างแข็งแรง

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

แคชผลลัพธ์เมื่อเอกสารไม่เปลี่ยนแปลง

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

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

ใช้เหตุการณ์ความคืบหน้าเพื่อฟีดแบ็ก UI

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

ตรวจสอบ payload ของบาร์โค้ด

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

ปรับแต่งการเลือกหน้าให้เหมาะกับประเภทเอกสาร

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

กรองตามประเภทบาร์โค้ดหลังการค้นหา (หากต้องการเฉพาะ QR code)

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

ดึงขนาดภาพบาร์โค้ด (หากต้องการใช้ในการเรนเดอร์)

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

คำถามที่พบบ่อย

ถาม: ฉันสามารถค้นหาหลายรูปแบบบาร์โค้ดในคำสั่งเดียวได้หรือไม่?
ตอบ: ได้. BarcodeSearchOptions จะค้นหาทุกรูปแบบที่รองรับโดยค่าเริ่มต้น สามารถกรองผลลัพธ์ด้วย getEncodeType() หากต้องการเฉพาะประเภทบางอย่าง

ถาม: จะจัดการกับเอกสารที่มีบาร์โค้ดและลายเซ็นภาพพร้อมกันอย่างไร?
ตอบ: ทำการค้นหาแยกกัน—ใช้ BarcodeSignature.class สำหรับบาร์โค้ดและ ImageSignature.class สำหรับลายเซ็นภาพ แล้วรวมผลลัพธ์ตามต้องการ

ถาม: ผลกระทบต่อประสิทธิภาพของการค้นหาทุกหน้ากับการค้นหาเฉพาะหน้ามีเท่าไหร่?
ตอบ: การสแกนทุกหน้าของ PDF 50 หน้าอาจใช้เวลา 3–5 วินาที การจำกัดให้เฉพาะหน้าแรก + สุดท้ายมักเสร็จภายใน 1 วินาที

ถาม: วิธีนี้ทำงานกับ PDF ที่สแกนเป็นภาพ (raster) หรือไม่?
ตอบ: ทำได้เฉพาะบาร์โค้ดที่เพิ่มเป็นอ็อบเจกต์ดิจิทัล หากเป็นบาร์โค้ดที่เป็นภาพ raster เท่านั้น คุณต้องใช้ตัวตรวจจับบาร์โค้ดแบบภาพ (เช่น GroupDocs.Barcode)

ถาม: ฉันจะตรวจสอบว่าลายเซ็นบาร์โค้ดไม่ได้ถูกดัดแปลงได้อย่างไร?
ตอบ: ฝังแฮชหรือดิจิทัลซิกเนเจอร์ไว้ใน payload ของบาร์โค้ด แล้วคำนวณแฮชของข้อมูลต้นฉบับและเปรียบเทียบ ซึ่งต้องใช้คีย์หรือใบรับรองที่ใช้ลงนามเดิม


อัปเดตล่าสุด: 2026-01-29
ทดสอบด้วย: GroupDocs.Signature 23.12 for Java
ผู้เขียน: GroupDocs