PDF các tài liệu như hóa đơn, biên lai hoặc báo cáo có thể chứa thông tin được mã hóa ở dạng mã vạch. Chúng tôi có thể phát hiện, xác định và đọc mã vạch được nhúng vào tài liệu PDF theo chương trình. Trong bài viết này, chúng ta sẽ học cách đọc mã vạch từ tài liệu PDF bằng Java. Hơn nữa, chúng ta sẽ học cách trích xuất hình ảnh mã vạch từ tài liệu PDF bằng Java.
Bài viết này sẽ bao gồm các chủ đề sau:
- Java API để đọc mã vạch từ PDF
- Đọc mã vạch từ PDF
- Chuyển đổi PDF sang hình ảnh và đọc mã vạch
- Trích xuất và đọc mã vạch từ PDF
- Đọc mã vạch từ PDF bằng PngDevice
- Tìm và đọc hình ảnh mã vạch từ PDF
API Java để đọc mã vạch từ PDF
Để đọc mã vạch từ tài liệu PDF, chúng tôi sẽ thực hiện theo quy trình gồm hai bước. Đầu tiên, chúng tôi sẽ sử dụng API Aspose.PDF for Java để tải tài liệu PDF và hiển thị các trang của tài liệu đó thành hình ảnh raster. Sau đó, chúng tôi sẽ đọc mã vạch từ các hình ảnh được hiển thị bằng cách sử dụng API Aspose.BarCode cho Java.
Vui lòng tải xuống JAR của các API hoặc thêm cấu hình pom.xml sau vào ứng dụng Java dựa trên Maven.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-barcode</artifactId>
<version>22.8</version>
</dependency>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-pdf</artifactId>
<version>22.8</version>
</dependency>
Đọc mã vạch từ PDF bằng Java
API Aspose.PDF cung cấp lớp Tài liệu đại diện cho một tài liệu PDF. Phương thức convertToPNGMemoryStream() của API hiển thị trang PDF thành luồng hình ảnh trong mảng byte []. API Aspose.BarCode cung cấp lớp BarCodeReader cho phép chúng tôi thực hiện các hoạt động readBarCodes để phát hiện mã vạch. Lớp BarCodeResult lưu trữ thông tin mã vạch được phát hiện như loại mã vạch, văn bản mã, khu vực và các thông số khác.
Chúng tôi có thể đọc hình ảnh mã vạch được nhúng trên bất kỳ trang nào của tài liệu PDF bằng cách thực hiện theo các bước dưới đây:
- Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
- Tiếp theo, lặp qua tất cả các trang và hiển thị vào luồng.
- Sau đó, tạo một thể hiện của lớp BarCodeReader với một đối tượng luồng.
- Sau đó, gọi phương thức readBarCodes() để lấy đối tượng BarCodeResult.
- Cuối cùng, hiển thị thông tin mã vạch.
Ví dụ mã sau đây cho thấy cách đọc mã vạch từ tài liệu PDF bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch từ tài liệu PDF bằng Java.
// Đường dẫn đến tài liệu
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// Tải tài liệu PDF
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// Tiếp tục tất cả các trang PDF bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// Hiển thị trang PDF sang luồng
byte[] ms = pdfDoc.getPages().get_Item(i).convertToPNGMemoryStream();
InputStream stream = new ByteArrayInputStream(ms);
// Nhận dạng mã vạch từ luồng trang
BarCodeReader reader = new BarCodeReader(stream);
// Hiển thị kết quả
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
CodeText: Aspose.Barcode Pdf417 Example
Symbology type: Pdf417
-------------------------------
CodeText: Aspose.Barcode QR Example
Symbology type: QR
-------------------------------
CodeText: Aspose.Barcode DataMatrix Example
Symbology type: DataMatrix
Vui lòng tải xuống tài liệu PDF đầu vào có Mã vạch được sử dụng trong bài đăng blog này.
Chuyển đổi PDF sang hình ảnh và đọc mã vạch bằng Java
Chúng tôi cũng có thể đọc mã vạch từ tài liệu PDF bằng cách chuyển đổi các trang PDF thành hình ảnh. Lớp PdfConverter của API cho phép chuyển đổi từng trang của tệp PDF thành hình ảnh. Sau đó, chúng tôi sẽ đọc thông tin mã vạch từ hình ảnh được chuyển đổi.
Chúng tôi có thể đọc mã vạch từ các trang PDF được chuyển đổi bằng cách làm theo các bước dưới đây:
- Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
- Tiếp theo, tạo một thể hiện của lớp PdfConverter.
- Theo tùy chọn, đặt các tùy chọn kết xuất bằng cách sử dụng setBarcodeOptimization().
- Sau đó, đặt độ phân giải hình ảnh.
- Tiếp theo, chỉ định một loạt các trang để hiển thị thành hình ảnh bằng cách sử dụng setStartPage() và setEndPage().
- Sau đó, gọi phương thức doConvert() để hiển thị các trang đã chọn thành hình ảnh.
- Tiếp theo, lưu các hình ảnh trong một vòng lặp.
- Sau đó, tạo một phiên bản của lớp BarCodeReader với đường dẫn tệp hình ảnh đã lưu.
- Sau đó, gọi phương thức readBarCodes() để lấy đối tượng BarCodeResult.
- Cuối cùng, hiển thị thông tin mã vạch.
Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh và đọc mã vạch bằng Java.
// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh bằng PDF Convertor và đọc mã vạch.
// Đường dẫn đến tài liệu
String folderPath = "C:\\Files\\BarCode\\";
// Đường dẫn tệp đầu vào
String file = folderPath + "sample-PDF-with-Barcodes.pdf";
// Tải tài liệu PDF
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// Khởi tạo PdfConvertor
com.aspose.pdf.facades.PdfConverter pdfConverter = new com.aspose.pdf.facades.PdfConverter(pdfDoc);
// Đặt tối ưu hóa mã vạch
pdfConverter.getRenderingOptions().setBarcodeOptimization(true);
// Đặt độ phân giải trang
// 300 dpi là độ phân giải tiêu chuẩn
pdfConverter.setResolution(new com.aspose.pdf.devices.Resolution(300));
// Đặt tất cả các trang để hiển thị thành hình ảnh
pdfConverter.setStartPage(1); //starts from page 1
pdfConverter.setEndPage(pdfConverter.getDocument().getPages().size());
// Hiển thị các trang đã chọn vào hình ảnh
pdfConverter.doConvert();
int imageCount = 1;
while (pdfConverter.hasNextImage())
{
// Kết xuất trang hiện tại thành hình ảnh
String strBarCodeImage = folderPath + imageCount + ".jpg";
pdfConverter.getNextImage(strBarCodeImage);
// Nhận dạng mã vạch từ hình ảnh được hiển thị của trang
BarCodeReader reader = new BarCodeReader(strBarCodeImage);
// Hiển thị kết quả
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
Trích xuất và đọc mã vạch từ PDF bằng Java
Tương tự, chúng ta cũng có thể nhận dạng hình ảnh mã vạch được nhúng trên các trang PDF bằng cách sử dụng lớp PdfExtractor. Nó cho phép trích xuất hình ảnh từ PDF, và sau đó chúng ta sẽ đọc thông tin mã vạch từ hình ảnh được trích xuất.
Chúng tôi có thể đọc mã vạch từ các hình ảnh được trích xuất bằng cách làm theo các bước dưới đây:
- Đầu tiên, tạo một thể hiện của lớp PdfExtractor.
- Tiếp theo, liên kết tài liệu PDF đầu vào bằng phương thức bindPdf().
- Sau đó, đặt phạm vi trang để trích xuất hình ảnh.
- Tiếp theo, gọi phương thức extractImage() để trích xuất các hình ảnh.
- Sau đó, lưu hình ảnh trong một vòng lặp.
- Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đường dẫn hình ảnh.
- Sau đó, gọi phương thức readBarCodes() để lấy đối tượng BarCodeResult.
- Cuối cùng, hiển thị thông tin mã vạch.
Ví dụ mã sau đây cho thấy cách trích xuất và đọc hình ảnh mã vạch từ tài liệu PDF bằng Java.
// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh bằng PdfExtractor và đọc mã vạch.
// Đường dẫn đến tài liệu
String folderPath = "C:\\Files\\BarCode\\";
// Tệp đầu vào
String file = folderPath + "sample-PDF-with-Barcodes.pdf";
// Ràng buộc tài liệu PDF
com.aspose.pdf.facades.PdfExtractor pdfExtractor = new com.aspose.pdf.facades.PdfExtractor();
pdfExtractor.bindPdf(file);
// Đặt phạm vi trang để trích xuất hình ảnh
pdfExtractor.setStartPage(1);
pdfExtractor.setEndPage(3);
// Trích xuất hình ảnh
pdfExtractor.extractImage();
int imageCount = 1;
// Lưu hình ảnh để phát trực tiếp trong một vòng lặp
while (pdfExtractor.hasNextImage())
{
// Lưu hình ảnh
String strBarCodeImage = folderPath + imageCount + ".jpg";
pdfExtractor.getNextImage(strBarCodeImage);
// Nhận dạng mã vạch từ hình ảnh
BarCodeReader reader = new BarCodeReader(strBarCodeImage);
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
Đọc mã vạch từ PDF bằng PngDevice trong Java
Chúng tôi cũng có thể đọc mã vạch bằng cách chuyển đổi các trang của tài liệu PDF thành hình ảnh PNG bằng cách sử dụng lớp PngDevice của API. Nó cung cấp phương thức process (Trang trang, đầu ra OutputStream) để chuyển đổi trang thành PNG và lưu nó trong luồng đầu ra. Phương thức processToBufferedImage (Page page) của lớp này chuyển đổi trang thành BufferedImage.
Chúng tôi có thể đọc mã vạch từ các trang PDF được chuyển đổi dưới dạng hình ảnh PNG bằng cách làm theo các bước dưới đây:
- Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
- Tiếp theo, tạo một thể hiện của lớp PngDevice.
- Sau đó, lặp qua tất cả các trang và gọi phương thức processToBufferedImage() để hiển thị hình ảnh.
- Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng BufferedImage.
- Sau đó, gọi phương thức readBarCodes() để lấy đối tượng BarCodeResult.
- Cuối cùng, hiển thị thông tin mã vạch.
Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF và đọc mã vạch bằng Java.
// Ví dụ mã sau đây cho thấy cách chuyển đổi các trang PDF thành hình ảnh với PngDevice và đọc mã vạch.
// Đường dẫn đến tài liệu
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// Tải tài liệu PDF
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// Tạo thiết bị PNG với độ phân giải chuẩn 300 dpi
com.aspose.pdf.devices.PngDevice pngDevice = new com.aspose.pdf.devices.PngDevice(new com.aspose.pdf.devices.Resolution(300));
// Tiếp tục tất cả các trang PDF bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// Kết xuất trang PDF sang hình ảnh được lưu trong bộ đệm
BufferedImage img = pngDevice.processToBufferedImage(pdfDoc.getPages().get_Item(i));
// Nhận dạng mã vạch từ hình ảnh được hiển thị của trang
BarCodeReader reader = new BarCodeReader(img);
// Hiển thị kết quả
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
Tìm và đọc hình ảnh mã vạch từ PDF bằng Java
Chúng tôi có thể tìm và trích xuất hình ảnh mã vạch từ tài liệu PDF bằng lớp ImagePlacementAbsorber. Nó thực hiện tìm kiếm việc sử dụng hình ảnh và cung cấp quyền truy cập vào kết quả tìm kiếm thông qua bộ sưu tập ImagePlacements. Phương pháp này cho phép nhận dạng mã vạch với độ phân giải gốc. Hạn chế duy nhất là nó có thể không nhận dạng chính xác các định dạng vectơ.
Chúng tôi có thể tìm và đọc mã vạch từ các tài liệu PDF bằng cách làm theo các bước dưới đây:
- Đầu tiên, tải tài liệu PDF bằng lớp Tài liệu.
- Tiếp theo, tạo một thể hiện của lớp ImagePlacementAbsorber.
- Sau đó, gọi phương thức visit() cho mỗi trang trong một vòng lặp.
- Tiếp theo, lặp qua tất cả các hình ảnh được tìm thấy trong bộ sưu tập ImagePlacements.
- Sau đó, lưu hình ảnh vào luồng bộ nhớ.
- Tiếp theo, tạo một thể hiện của lớp BarCodeReader với đối tượng luồng.
- Sau đó, gọi phương thức readBarCodes() để lấy đối tượng BarCodeResult.
- Cuối cùng, hiển thị thông tin mã vạch.
Ví dụ mã sau đây cho thấy cách tìm và đọc hình ảnh mã vạch từ PDF bằng Java.
// Ví dụ mã này trình bày cách đọc mã vạch từ tài liệu PDF bằng ImagePlacementAbsorber.
// Đường dẫn đến tài liệu
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// Tải tài liệu PDF
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// Khởi tạo ImagePlacementAbsorber
com.aspose.pdf.ImagePlacementAbsorber imagePlacementAbsorber = new com.aspose.pdf.ImagePlacementAbsorber();
// Xử lý tất cả các trang PDF trong tài liệu bắt đầu từ trang 1
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// Truy cập trang tạo trình trích xuất hình ảnh
imagePlacementAbsorber.visit(pdfDoc.getPages().get_Item(i));
// Trích xuất tất cả hình ảnh từ trang PDF
for (com.aspose.pdf.ImagePlacement imagePlacement : imagePlacementAbsorber.getImagePlacements()) {
// Hiển thị trang PDF sang luồng
byte[] ms = pdfDoc.getPages().get_Item(i).convertToPNGMemoryStream();
InputStream stream = new ByteArrayInputStream(ms);
// Nhận dạng mã vạch từ luồng trang
BarCodeReader reader = new BarCodeReader(stream);
// Hiển thị kết quả
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
}
Nhận giấy phép miễn phí
Bạn có thể nhận giấy phép tạm thời miễn phí để dùng thử các thư viện mà không có giới hạn đánh giá.
Sự kết luận
Trong bài viết này, chúng ta đã tìm hiểu
- cách phát hiện và đọc mã vạch từ tài liệu PDF;
- các phương pháp khác nhau để trích xuất hình ảnh từ tài liệu PDF;
- để giải mã mã vạch nhúng trong Java.
Bên cạnh việc đọc mã vạch từ PDF trong Java, bạn có thể tìm hiểu thêm về các API bằng cách sử dụng tài liệu cho Aspose.BarCode và tài liệu cho Aspose.PDF. Trong trường hợp có bất kỳ sự mơ hồ nào, vui lòng liên hệ với chúng tôi trên diễn đàn hỗ trợ miễn phí của chúng tôi.