วิธีอ่าน QR code PDF ด้วย Java
บทนำ
เคยต้องดึงข้อมูลบาร์โค้ดจากใบแจ้งหนี้ PDF จำนวนหลายร้อยใบ, ป้ายจัดส่ง, หรือเอกสารสินค้าคงคลังหรือไม่? การสแกนด้วยตนเองผ่านหน้าเอกสารนั้นน่าเบื่อและเกิดข้อผิดพลาดได้ง่าย ไม่ว่าคุณจะสร้างระบบประมวลผลเอกสารอัตโนมัติหรือยืนยันความถูกต้องของสินค้า การค้นหาบาร์โค้ดใน PDF อย่างมีประสิทธิภาพอาจเป็นเรื่องท้าทาย Read QR code PDF อย่างรวดเร็วด้วย GroupDocs.Signature แล้วคุณจะเปลี่ยนชั่วโมงของงานมือเป็นเพียงไม่กี่บรรทัดของโค้ด Java
ในคู่มือนี้คุณจะได้เรียนรู้วิธี read QR code PDF เอกสารอย่างมีประสิทธิภาพโดยใช้ GroupDocs.Signature API คุณจะเห็นวิธีตั้งค่าห้องสมุด, กำหนดตัวเลือกการค้นหา, กรองตามประเภทบาร์โค้ด, และจัดการผลลัพธ์ในรูปแบบที่สามารถขยายจากไฟล์เดียวไปจนถึงชุดไฟล์หลายพันไฟล์ได้
คำตอบสั้น
- GroupDocs.Signature สามารถอ่าน QR code จาก PDF ได้หรือไม่? ใช่ – มันตรวจจับ QR, Data Matrix, PDF417, และบาร์โค้ดรูปแบบอื่นกว่า 45 แบบ
- ต้องมีลิขสิทธิ์สำหรับการใช้งานในผลิตภัณฑ์หรือไม่? จำเป็นต้องมีลิขสิทธิ์เชิงพาณิชย์; มีรุ่นทดลองฟรีสำหรับการประเมินผล
- ต้องใช้ Java เวอร์ชันใด? Java 8+ (แนะนำ Java 11+ เพื่อประสิทธิภาพที่ดีกว่า)
- จะจำกัดการค้นหาให้เฉพาะหน้าที่ต้องการได้อย่างไร? ใช้
BarcodeSearchOptions.setAllPages(false)แล้วตั้งค่าsetPageNumber() - API ปลอดภัยต่อการทำงานหลายเธรดสำหรับการประมวลผลเป็นชุดหรือไม่? ใช่, เมื่อคุณสร้างอินสแตนซ์
Signatureแยกต่างหากสำหรับแต่ละเธรด
read QR code PDF คืออะไร?
Read QR code PDF หมายถึงการค้นหาและถอดรหัสบาร์โค้ดประเภท QR ที่ฝังอยู่ในหน้า PDF อย่างโปรแกรมเมติก โดยใช้ GroupDocs.Signature คุณสามารถดึงข้อความที่เข้ารหัส, ระบุหมายเลขหน้า, และรับขนาดเชิงเรขาคณิตของแต่ละบาร์โค้ดได้ทั้งหมดโดยไม่ต้องแปลง PDF เป็นภาพก่อน ซึ่งทำให้การประมวลผลเร็วขึ้นอย่างมหาศาล
ทำไมต้องค้นหาบาร์โค้ดใน PDF?
การค้นหาบาร์โค้ดใน PDF ช่วยให้ธุรกิจอัตโนมัติการดึงข้อมูล, ลดข้อผิดพลาดจากการป้อนข้อมูลด้วยมือ, และเร่งกระบวนการทำงานในด้านการเงิน, โลจิสติกส์, และสุขภาพ ด้วยการอ่านบาร์โค้ดที่ฝังอยู่โดยอัตโนมัติ องค์กรสามารถดึงตัวระบุได้ทันที, ติดตามการจัดส่ง, ตรวจสอบความถูกต้องของเอกสาร, และผสานข้อมูลเข้าสู่ระบบ downstream ทำให้การดำเนินงานเร็วขึ้นและเชื่อถือได้มากขึ้น
สถานการณ์ธุรกิจทั่วไป
- การประมวลผลใบแจ้งหนี้ – ดึงหมายเลขคำสั่งซื้อหรือรหัสติดตามจากใบแจ้งหนี้ของผู้ขายโดยอัตโนมัติ
- การจัดการสินค้าคงคลัง – สแกนแคตาล็อกสินค้าและดึงบาร์โค้ด SKU เพื่ออัปเดตฐานข้อมูล
- การขนส่งและโลจิสติกส์ – ตรวจสอบรหัสติดตามพัสดุในรายการจัดส่ง
- การตรวจสอบความถูกต้องของเอกสาร – ยืนยันเอกสารที่ลงนามโดยตรวจสอบบาร์โค้ดความปลอดภัยที่ฝังอยู่
- บันทึกสุขภาพ – ดึงรหัสผู้ป่วยหรือรหัสใบสั่งยาจาก PDF ทางการแพทย์
GroupDocs.Signature ทำหน้าที่หนักให้คุณ – ไม่ต้องเขียนโค้ดประมวลผลภาพหรือกังวลเรื่องการแปลง PDF เป็นภาพ ห้องสมุดสามารถตรวจจับ 50+ รูปแบบบาร์โค้ด และประมวลผล PDF 300 หน้าในเวลาไม่ถึง 5 วินาทีบนเซิร์ฟเวอร์ 8‑core ปกติ
ข้อกำหนดเบื้องต้น
ก่อนเริ่มทำตามบทเรียนนี้ ให้ตรวจสอบว่าคุณมีสิ่งต่อไปนี้พร้อมใช้งาน:
ไลบรารีและการพึ่งพาที่จำเป็น
คุณต้องเพิ่ม GroupDocs.Signature library ลงในโปรเจกต์ Java ของคุณ นี่คือตัวอย่างการเพิ่มด้วย Maven หรือ Gradle:
Maven:
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-signature</artifactId>
<version>23.12</version>
</dependency>
Gradle:
implementation 'com.groupdocs:groupdocs-signature:23.12'
หมายเหตุ: ตรวจสอบเวอร์ชันล่าสุดได้ที่ GroupDocs.Signature for Java releases. การใช้เวอร์ชันล่าสุดจะทำให้คุณได้รับการแก้ไขบั๊กและฟีเจอร์ใหม่ ๆ
การตั้งค่าสภาพแวดล้อม
- JDK 8 หรือสูงกว่า – GroupDocs.Signature ต้องการ Java 8 ขั้นต่ำ (แนะนำ Java 11+ เพื่อประสิทธิภาพที่ดีกว่า)
- IDE – IntelliJ IDEA หรือ Eclipse จะช่วยให้คุณทำงานได้ง่ายขึ้นด้วย autocomplete และ debugging
- PDF Document – เตรียม PDF ตัวอย่างที่มีบาร์โค้ดพร้อม (ใบแจ้งหนี้, ป้ายจัดส่ง, หรือแคตาล็อกสินค้าเป็นตัวเลือกที่ดี)
ความรู้พื้นฐานที่ต้องมี
คุณควรคุ้นเคยกับ:
- ไวยากรณ์พื้นฐานของ Java และแนวคิดเชิงวัตถุ
- การจัดการข้อยกเว้นด้วยบล็อก
try‑catch - การทำงานกับไลบรารีภายนอกใน IDE ของคุณ
หากคุณใหม่กับไลบรารี Java ของบุคคลที่สาม ไม่ต้องกังวล – เราจะอธิบายทุกขั้นตอนอย่างละเอียด
การตั้งค่า GroupDocs.Signature สำหรับ Java
การเริ่มต้นใช้งาน GroupDocs.Signature ใช้เวลาเพียงไม่กี่นาที นี่คือขั้นตอนครบถ้วน:
ขั้นตอนที่ 1: เพิ่ม Dependency
ใช้ Maven หรือ Gradle เพื่อรวมไลบรารี (ดูโค้ดข้างบน) หลังจากเพิ่ม dependency แล้วรีเฟรชโปรเจกต์เพื่อดาวน์โหลดไฟล์ JAR
ขั้นตอนที่ 2: การรับลิขสิทธิ์
GroupDocs มีตัวเลือกลิขสิทธิ์หลายแบบ:
- Free Trial – เหมาะสำหรับการทดสอบ ดาวน์โหลดจาก GroupDocs releases
- Temporary License – รับสิทธิ์เต็ม 30 วันผ่าน Temporary License Page
- Commercial License – สำหรับการใช้งานในผลิตภัณฑ์ ให้ซื้อที่ GroupDocs Purchase
เคล็ดลับ: เริ่มต้นด้วยรุ่นทดลองฟรีเพื่อสร้าง proof‑of‑concept แล้วอัปเกรดหาก API ตอบโจทย์ความต้องการของคุณ
ขั้นตอนที่ 3: การเริ่มต้นพื้นฐาน
คลาส Signature เป็นจุดเริ่มต้นที่โหลด PDF เข้าเมโมรีและเปิดเผยเมธอดการค้นหา, ตรวจสอบ, และดึงข้อมูล
import com.groupdocs.signature.Signature;
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample_signed.pdf"; // Replace with your PDF path
Signature signature = new Signature(filePath);
สำคัญ: ตรวจสอบให้แน่ใจว่าเส้นทางไฟล์ใช้ backslash คู่บน Windows (C:\\Documents\\file.pdf) เพื่อหลีกเลี่ยงปัญหา escape
คู่มือการทำงาน
ตอนนี้มาลองเขียนโค้ดเพื่อค้นหาบาร์โค้ดใน PDF ของคุณกัน
การค้นหา Barcode Signatures ในเอกสาร
เราจะแบ่งการทำงานออกเป็นสามขั้นตอนชัดเจน
ขั้นตอนที่ 1: เริ่มต้นอ็อบเจกต์ Signature
Signature คือคลาสหลักที่แทนเอกสาร PDF ในเมโมรี
import com.groupdocs.signature.Signature;
String filePath = "YOUR_DOCUMENT_DIRECTORY/sample_signed.pdf"; // Replace with actual file path
Signature signature = new Signature(filePath);
สิ่งที่เกิดขึ้น – อ็อบเจกต์ Signature เปิด PDF ของคุณและเตรียมพร้อมสำหรับการประมวลผล เหมือนกับการเปิดไฟล์ในโปรแกรมแก้ไขข้อความ; คุณกำลังโหลดเอกสารเพื่อให้สามารถสอบถามได้
หมายเหตุในโลกจริง – เมื่อประมวลผล PDF ที่ผู้ใช้อัปโหลด ควรตรวจสอบเส้นทางไฟล์และความมีอยู่ของไฟล์ก่อนสร้างอ็อบเจกต์ Signature เพื่อป้องกันข้อผิดพลาด “file not found” ที่ไม่ชัดเจนในภายหลัง
ขั้นตอนที่ 2: สร้าง BarcodeSearchOptions
BarcodeSearchOptions บอกเครื่องมือว่าต้องการค้นหาอะไรและที่ไหน
import com.groupdocs.signature.options.search.BarcodeSearchOptions;
// Configure options for searching barcodes
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setAllPages(true); // Search every page in the document
คำอธิบาย: BarcodeSearchOptions กำหนดพารามิเตอร์การค้นหาบาร์โค้ด เช่น ช่วงหน้า, ประเภทบาร์โค้ด, และความแม่นยำของการตรวจจับ
ตัวเลือกสำคัญ
setAllPages(true): สแกนทุกหน้า ตั้งเป็นfalseแล้วระบุsetPageNumber()หากคุณรู้หน้าที่ต้องการsetEncodeType(BarcodeEncodeType.QR): จำกัดการค้นหาให้เฉพาะ QR code ลดเวลาในการประมวลผลได้ถึง 60 % สำหรับ PDF ขนาดใหญ่
ทำไมต้องทำเช่นนี้ – หากใบแจ้งหนี้ของคุณวาง QR code ที่หน้า 1 เสมอ การสแกนทั้งเอกสารทั้งหมดจะเสีย CPU ไปโดยเปล่าประโยชน์
ขั้นตอนที่ 3: เรียกค้นและจัดการผลลัพธ์
รันการค้นหาแล้ววนลูปผลลัพธ์
import com.groupdocs.signature.domain.signatures.BarcodeSignature;
import java.util.List;
try {
// Execute the barcode search
List<BarcodeSignature> signatures = signature.search(BarcodeSignature.class, options);
// Check if any barcodes were found
if (signatures.isEmpty()) {
System.out.println("No barcode signatures found in the document.");
} else {
System.out.println("Found " + signatures.size() + " barcode signature(s):\n");
// Loop through each barcode and display details
for (BarcodeSignature barcodeSignature : signatures) {
System.out.println("----------------------------------------");
System.out.println("Barcode Type: " + barcodeSignature.getEncodeType().getTypeName());
System.out.println("Barcode Text: " + barcodeSignature.getText());
System.out.println("Page Number: " + barcodeSignature.getPageNumber());
System.out.println("Position: X=" + barcodeSignature.getLeft() +
", Y=" + barcodeSignature.getTop());
System.out.println("Size: Width=" + barcodeSignature.getWidth() +
", Height=" + barcodeSignature.getHeight());
System.out.println("----------------------------------------\n");
}
}
} catch (Exception e) {
System.err.println("Error searching for barcodes: " + e.getMessage());
e.printStackTrace();
} finally {
// Always dispose of the signature object to free resources
if (signature != null) {
signature.dispose();
}
}
คำอธิบาย: BarcodeSignature แทนบาร์โค้ดที่ตรวจพบ ให้ข้อมูลประเภท, ข้อความที่ถอดรหัส, หมายเลขหน้า, และขอบเขตเชิงเรขาคณิต
สิ่งที่โค้ดทำ
- เรียก
signature.search()เพื่อรับรายการอ็อบเจกต์BarcodeSignature - ตรวจสอบว่าพบบาร์โค้ดหรือไม่เพื่อหลีกเลี่ยง NullPointerException
- ดึงประเภท, ข้อความ, หมายเลขหน้า, และขนาดของแต่ละผลลัพธ์
- ห่อการทำงานทั้งหมดในบล็อก
try‑catchเพื่อจัดการ PDF ที่เสียหายหรือไฟล์หายอย่างราบรื่น - ปิดอ็อบเจกต์
Signatureในบล็อกfinallyเพื่อคืนเมโมรี
การใช้งานจริง – ในกระบวนการจัดการป้ายจัดส่ง คุณอาจบันทึก getText() (หมายเลขติดตาม) ลงฐานข้อมูล และใช้ getPageNumber() เพื่อแมปป้ายกลับไปยังไฟล์ชุดต้นฉบับ
การกรองตามประเภทบาร์โค้ด
หากคุณรู้รูปแบบบาร์โค้ดที่ต้องการ ให้กรองเพื่อเพิ่มความเร็ว:
import com.groupdocs.signature.domain.barcodes.BarcodeTypes;
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setEncodeType(BarcodeTypes.QR); // Only search for QR codes
options.setAllPages(true);
เมื่อใดควรกรอง – การจำกัดการค้นหาให้เป็นประเภทเดียว (เช่น QR) สามารถลดการใช้ CPU ได้ 30‑50 % สำหรับเอกสารที่มีองค์ประกอบกราฟิกหลายอย่าง
ประเภทบาร์โค้ดที่รองรับ
GroupDocs.Signature สามารถตรวจจับรูปแบบบาร์โค้ดได้หลากหลาย รายการสรุปสั้น ๆ ดังนี้:
บาร์โค้ด 1D (เชิงเส้น)
- Code128 – นิยมในโลจิสติกส์และบรรจุภัณฑ์
- Code39 – ใช้ในอุตสาหกรรมยานยนต์และการป้องกัน
- EAN13/EAN8 – บาร์โค้ดสินค้าในร้านค้า
- UPC‑A/UPC‑E – มาตรฐานอเมริกาเหนือ
- Interleaved2of5 – คลังสินค้าและการกระจาย
บาร์โค้ด 2D (เมทริกซ์)
- QR Code – ที่นิยมที่สุด เก็บ URL, ข้อมูล Wi‑Fi ฯลฯ
- Data Matrix – กะทัดรัด เหมาะกับชิ้นส่วนขนาดเล็ก
- PDF417 – ใช้ในบัตรประชาชน, ตั๋วเครื่องบิน, ใบขับขี่
- Aztec Code – ตั๋วการเดินทาง
การกรองตามประเภท (ตามที่แสดงข้างต้น) จะช่วยให้คุณโฟกัสที่รูปแบบที่ต้องการได้อย่างแม่นยำ
กรณีใช้งานจริง
1. การประมวลผลใบแจ้งหนี้อัตโนมัติ
สถานการณ์: ฝ่ายบัญชีได้รับใบแจ้งหนี้จากผู้ขายกว่า 500 ใบต่อวันในรูปแบบ PDF
วิธีแก้: สแกน PDF แต่ละไฟล์เพื่อค้นหา Barcode Code39 ที่บรรจุหมายเลขใบแจ้งหนี้ แล้วแมปกับใบสั่งซื้อในระบบ ERP การทำเช่นนี้ทำให้การป้อนข้อมูลด้วยมือหายไปและลดข้อผิดพลาดได้ 85 %
// Pseudo-code workflow
for (PDF invoice : invoiceBatch) {
List<BarcodeSignature> barcodes = searchBarcodes(invoice);
String invoiceNumber = barcodes.get(0).getText();
updateERPSystem(invoiceNumber, invoice);
}
2. การอัปเดตสินค้าคงคลังในคลัง
สถานการณ์: คลังสินค้ารับการจัดส่งพร้อมรายการบรรจุภัณฑ์ PDF ที่ฝัง SKU เป็นบาร์โค้ด EAN13
วิธีแก้: ดึงบาร์โค้ดทั้งหมดจากรายการบรรจุภัณฑ์, อัปเดตจำนวนสินค้าผ่านระบบอัตโนมัติ, และแจ้งเตือนกรณีที่ข้อมูลไม่ตรงกัน
3. การตรวจสอบความถูกต้องของเอกสาร
สถานการณ์: สัญญากฎหมายมี QR code ที่บรรจุลายเซ็นต์เชิงคริปโตเพื่อยืนยันความถูกต้อง
วิธีแก้: ค้นหา QR code ในสัญญาที่ลงนาม, ถอดรหัสข้อมูลลายเซ็นต์, และตรวจสอบกับผู้ให้การรับรองที่เชื่อถือได้ เพื่อให้มั่นใจว่าเอกสารไม่ถูกแก้ไข
4. การจัดการบันทึกสุขภาพ
สถานการณ์: รายงานผลแลบของผู้ป่วยมี Barcode Code128 สำหรับรหัสตัวอย่าง
วิธีแก้: ดึงรหัสตัวอย่างอัตโนมัติและเชื่อมผลแลบกับบันทึกผู้ป่วยในระบบ HIS ลดเวลาค้นหาจากหลายนาทีเป็นไม่กี่วินาที
ปัญหาที่พบบ่อยและวิธีแก้
ปัญหา 1: “ไม่พบบาร์โค้ด” (แม้ว่าจะมีอยู่)
สาเหตุที่เป็นไปได้
- ความละเอียดภาพต่ำ (< 200 DPI)
- บาร์โค้ดเล็กเกินกว่าที่เครื่องตรวจจับจะรับรู้
- กำหนดตัวกรองประเภทบาร์โค้ดผิด
วิธีแก้
- เพิ่ม DPI – สแกนที่ 300 DPI หรือสูงกว่า
- ลบตัวกรองประเภท – ค้นหาทุกประเภทก่อนแล้วค่อยกรองภายหลัง
- ตรวจสอบคุณภาพภาพ – เปิด PDF ด้วย Adobe Acrobat, ซูมที่ 200 % และตรวจสอบว่าบาร์โค้ดคมชัด
ปัญหา 2: OutOfMemoryError กับ PDF ขนาดใหญ่
สาเหตุ – โหลด PDF 500 หน้า พร้อมภาพความละเอียดสูงทำให้ใช้ heap มาก
วิธีแก้ – ประมวลผลหน้าเป็นชุดแทนการโหลดไฟล์ทั้งหมด:
for (int startPage = 1; startPage <= totalPages; startPage += 50) {
BarcodeSearchOptions options = new BarcodeSearchOptions();
options.setPageNumber(startPage);
options.setPagesSetup(new PagesSetup());
options.getPagesSetup().setLastPage(Math.min(startPage + 49, totalPages));
List<BarcodeSignature> batchResults = signature.search(BarcodeSignature.class, options);
// Process results...
}
นอกจากนี้อาจเพิ่ม heap ของ JVM (-Xmx4g) สำหรับชุดข้อมูลขนาดใหญ่มาก
ปัญหา 3: ประสิทธิภาพช้าในเอกสารหลายหน้า
สาเหตุ – การสแกนทุกหน้าตามลำดับใช้เวลานาน
วิธีแก้
- กำหนดหน้าที่ต้องการ – หากบาร์โค้ดอยู่ที่หน้า 1 เท่านั้น ให้ตั้ง
setAllPages(false)และsetPageNumber(1) - แคชผลลัพธ์ – เก็บข้อมูลบาร์โค้ดหลังการสแกนครั้งแรกเพื่อหลีกเลี่ยงการประมวลผลซ้ำ
- ใช้ SSD – การอ่าน/เขียนที่เร็วขึ้นสามารถลดเวลาโหลดได้ 60‑70 % เมื่อเทียบกับ HDD
ปัญหา 4: ผลลัพธ์เป็น False Positives (รูปแบบสุ่มถูกตีเป็นบาร์โค้ด)
สาเหตุ – ตารางหรือเส้นกริดอาจถูกมองว่าเป็นบาร์โค้ด
วิธีแก้ – ตรวจสอบความยาวและรูปแบบของข้อความที่ถอดรหัสก่อนยอมรับ:
for (BarcodeSignature barcode : signatures) {
String text = barcode.getText();
// Example: Invoice numbers are always 10 digits
if (text.matches("\\d{10}")) {
// Valid invoice number
processBarcode(barcode);
} else {
System.out.println("Skipping invalid barcode: " + text);
}
}
เคล็ดลับประสิทธิภาพสำหรับเอกสารขนาดใหญ่
1. กลยุทธ์การประมวลผลเป็นชุด
ใช้ thread pool เพื่อจัดการ PDF หลายไฟล์พร้อมกัน:
ExecutorService executor = Executors.newFixedThreadPool(4); // 4 parallel threads
for (String pdfPath : pdfFiles) {
executor.submit(() -> {
try (Signature sig = new Signature(pdfPath)) {
List<BarcodeSignature> results = sig.search(BarcodeSignature.class, options);
// Process results...
} catch (Exception e) {
e.printStackTrace();
}
});
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.HOURS);
ผลลัพธ์: การประมวลผล 1 000 ไฟล์ลดจาก ~2 ชม. เหลือ ~30 นาทีบนเครื่อง 4‑core
2. ลดขอบเขตการค้นหา
หากบาร์โค้ดอยู่ในตำแหน่งคงที่ ให้จำกัดพื้นที่ค้นหา:
// Only search the top‑right corner where barcodes are typically placed
options.setRectangle(new Rectangle(400, 50, 150, 150)); // X, Y, Width, Height
ผลลัพธ์: เร็วขึ้น 40‑60 % ในเอกสารที่มีเลเอาต์สม่ำเสมอ
3. ตรวจสอบการใช้หน่วยความจำ
สำหรับงานประมวลผลเป็นชุดระยะยาว ให้เรียก garbage collection เป็นระยะ:
Runtime runtime = Runtime.getRuntime();
long usedMemory = runtime.totalMemory() - runtime.freeMemory();
if (usedMemory > (runtime.maxMemory() * 0.8)) {
System.gc(); // Suggest garbage collection
}
แนวทางปฏิบัติที่ดีที่สุด
1. ปิดอ็อบเจกต์ Signature เสมอ
Signature implements AutoCloseable; การใช้ try‑with‑resources จะรับประกันการทำความสะอาด:
try (Signature signature = new Signature(filePath)) {
// Your search code here...
} // Automatically disposed
2. ตรวจสอบไฟล์อินพุต
อย่าเชื่อเส้นทางภายนอกโดยไม่มีการตรวจสอบ ตรวจสอบความมีอยู่และความเป็น PDF ก่อนสร้างอ็อบเจกต์ Signature:
File pdfFile = new File(filePath);
if (!pdfFile.exists() || !pdfFile.canRead()) {
throw new FileNotFoundException("PDF not found or not readable: " + filePath);
}
// Optional: Verify it's actually a PDF (check magic bytes)
3. บันทึกผลการตรวจจับบาร์โค้ด
เก็บบันทึกการตรวจจับเพื่อการตรวจสอบและดีบัก:
Logger logger = Logger.getLogger(BarcodeSearcher.class.getName());
for (BarcodeSignature barcode : signatures) {
logger.info(String.format("Detected %s barcode '%s' on page %d at (%.2f, %.2f)",
barcode.getEncodeType().getTypeName(),
barcode.getText(),
barcode.getPageNumber(),
barcode.getLeft(),
barcode.getTop()));
}
4. รองรับหลายรูปแบบบาร์โค้ด
สร้างเมธอดยืดหยุ่นที่รับรายการ BarcodeEncodeType เพื่อให้คุณปรับเปลี่ยนตามมาตรฐานใหม่โดยไม่ต้องแก้โค้ด:
switch (barcode.getEncodeType().getTypeName()) {
case "QR":
// QR codes might contain URLs or JSON data
processQRCode(barcode.getText());
break;
case "Code128":
// Code128 typically contains alphanumeric order/tracking numbers
processTrackingNumber(barcode.getText());
break;
default:
logger.warning("Unexpected barcode type: " + barcode.getEncodeType());
}
5. ทดสอบกับเอกสารจริง
ใช้ใบแจ้งหนี้ที่สแกนแล้วมีคราบกาแฟ, ป้ายจัดส่งที่แฟกซ์แล้วมีสัญญาณรบกวน, และภาพถ่ายมือถือความละเอียดต่ำที่แปลงเป็น PDF การทดสอบเหล่านี้จะเปิดเผยกรณีขอบที่ไฟล์ตัวอย่างที่สะอาดอาจไม่แสดง
GroupDocs.Signature ตรวจจับ QR code ใน PDF อย่างไร?
โหลด PDF ด้วยอินสแตนซ์ Signature, ตั้งค่า BarcodeSearchOptions ให้มุ่งเป้าไปที่ QR code, แล้วเรียก search() เอนจินจะเรนเดอร์แต่ละหน้าเป็น bitmap ที่ 150 DPI, ใช้ตัวถอดรหัส Z‑Bar ที่เร็ว แล้วคืนอ็อบเจกต์ BarcodeSignature พร้อมข้อความที่ถอดรหัสและข้อมูลเชิงเรขาคณิต กระบวนการนี้เสร็จในไม่ถึง 5 วินาทีสำหรับเอกสาร 300 หน้า บนเซิร์ฟเวอร์ 8‑core ปกติ
คำถามที่พบบ่อย
ถาม: สามารถอ่าน QR code PDF ได้โดยไม่ต้องมีลิขสิทธิ์หรือไม่?
ตอบ: รุ่นทดลองฟรีให้คุณอ่าน QR code PDF เพื่อประเมินผลได้, แต่ต้องมีลิขสิทธิ์เชิงพาณิชย์สำหรับการใช้งานในผลิตภัณฑ์
ถาม: API รองรับ PDF ที่มีรหัสผ่านหรือไม่?
ตอบ: รองรับ. ส่งรหัสผ่านเมื่อสร้างอ็อบเจกต์ Signature, เช่น new Signature(filePath, "password")
ถาม: จะปรับปรุงการตรวจจับในสแกนความละเอียดต่ำได้อย่างไร?
ตอบ: สแกนที่ความละเอียดอย่างน้อย 200 DPI, เปิดใช้ setEncodeType(BarcodeEncodeType.QR), และพิจารณาใช้ฟิลเตอร์ลดสัญญาณรบกวนก่อนประมวลผล
ถาม: การค้นหาปลอดภัยต่อการทำงานหลายเธรดหรือไม่?
ตอบ: ให้แต่ละเธรดสร้างอินสแตนซ์ Signature ของตนเอง API จะปลอดภัยต่อการทำงานหลายเธรดในลักษณะนี้
ถาม: รุ่นของ GroupDocs.Signature ที่ใช้ในบทเรียนนี้คืออะไร?
ตอบ: โค้ดตรวจสอบกับ GroupDocs.Signature 23.12, รองรับบาร์โค้ดกว่า 50 รูปแบบและสามารถประมวลผล PDF หลายร้อยหน้าโดยไม่ต้องโหลดไฟล์ทั้งหมดเข้าสู่เมโมรี
สรุป
คุณได้เรียนรู้วิธี read QR code PDF ด้วย Java และ GroupDocs.Signature API แล้ว นี่คือสรุปสั้น ๆ:
- การตั้งค่า – เพิ่ม dependency Maven/Gradle, รับลิขสิทธิ์, และสร้างอ็อบเจกต์
Signature - การทำงาน – ตั้งค่า
BarcodeSearchOptions, เรียกsearch(), และประมวลผลผลลัพธ์BarcodeSignature - รูปแบบที่รองรับ – มากกว่า 50 รูปแบบบาร์โค้ด รวม QR, Data Matrix, PDF417, Code128, และ EAN13
- กรณีใช้งานจริง – การอัตโนมัติใบแจ้งหนี้, การอัปเดตสินค้าคงคลัง, การตรวจสอบความถูกต้องของเอกสาร, และการจัดการบันทึกสุขภาพ
- การแก้ไขปัญหา – วิธีจัดการบาร์โค้ดที่ไม่พบ, ข้อผิดพลาดหน่วยความจำ, คอขวดประสิทธิภาพ, และผลลัพธ์เท็จ
- ประสิทธิภาพ – การประมวลผลเป็นชุด, การจำกัดช่วงหน้า, และการใช้ SSD ทำให้ throughput สูงขึ้นอย่างมาก
GroupDocs.Signature ทำให้ขั้นตอนการเรนเดอร์ PDF และถอดรหัสบาร์โค้ดเป็นเรื่องง่าย คุณจึงสามารถมุ่งเน้นที่ตรรกะธุรกิจที่สำคัญ ไม่ว่าจะเป็นยูทิลิตี้ขนาดเล็กหรือระบบประมวลผลเอกสารระดับองค์กร คุณมีโซลูชันที่เชื่อถือได้และมีประสิทธิภาพแล้ว
อัปเดตล่าสุด: 2026-07-15
ทดสอบด้วย: GroupDocs.Signature 23.12
ผู้เขียน: GroupDocs