PDF 發票、收據或報告等文件可能包含條形碼形式的編碼信息。我們可以通過編程方式檢測、識別和讀取嵌入到 PDF 文檔中的條形碼。在本文中,我們將學習如何使用 Java 從 PDF 文檔中讀取條形碼。此外,我們將學習如何使用 Java 從 PDF 文檔中提取條形碼圖像。
本文應涵蓋以下主題:
從 PDF 讀取條碼的 Java API
要從 PDF 文檔中讀取條形碼,我們將遵循兩個步驟。首先,我們將使用 Aspose.PDF for Java API 加載 PDF 文檔並將其頁面呈現為光柵圖像。之後,我們將使用 Aspose.BarCode for Java API 從渲染圖像中讀取條形碼。
請下載 API 的 JAR 或在基於 Maven 的 Java 應用程序中添加以下 pom.xml 配置。
<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>
使用 Java 從 PDF 讀取條碼
Aspose.PDF API 提供了代表 PDF 文檔的 Document 類。 API 的 convertToPNGMemoryStream() 方法將 PDF 頁面呈現為 byte[] 數組中的圖像流。 Aspose.BarCode API 提供了 BarCodeReader 類,使我們能夠執行 readBarCodes 操作來檢測條形碼。 BarCodeResult類存儲檢測到的條碼信息,如條碼類型、條碼文本、區域等參數。
我們可以按照以下步驟讀取嵌入在 PDF 文檔任何頁面上的條形碼圖像:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,遍歷所有頁面並呈現到流中。
- 然後,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
下面的代碼示例顯示瞭如何使用 Java 從 PDF 文檔中讀取條形碼。
// 此代碼示例演示如何使用 Java 從 PDF 文檔讀取條形碼。
// 文檔的路徑
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// 從第 1 頁開始處理所有 PDF 頁面
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// 將 PDF 頁面渲染到流中
byte[] ms = pdfDoc.getPages().get_Item(i).convertToPNGMemoryStream();
InputStream stream = new ByteArrayInputStream(ms);
// 從頁面流中識別條形碼
BarCodeReader reader = new BarCodeReader(stream);
// 顯示結果
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
請下載帶有條形碼的輸入PDF文檔在這篇博文中使用。
使用 Java 將 PDF 轉換為圖像並讀取條碼
我們還可以通過將 PDF 頁面轉換為圖像來從 PDF 文檔中讀取條形碼。 API 的 PdfConverter 類允許將 PDF 文件的每一頁轉換為圖像。之後,我們將從轉換後的圖像中讀取條形碼信息。
我們可以按照以下步驟從轉換後的 PDF 頁面中讀取條碼:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 PdfConverter 類的一個實例。
- 或者,使用 setBarcodeOptimization() 設置呈現選項。
- 然後,設置圖像分辨率。
- 接下來,使用 setStartPage() 和 setEndPage() 指定要呈現為圖像的頁面範圍。
- 然後,調用 doConvert() 方法將選定的頁面渲染成圖像。
- 接下來,循環保存圖像。
- 然後,使用保存的圖像文件路徑創建 BarCodeReader 類的實例。
- 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
- 最後顯示條碼信息。
下面的代碼示例展示瞭如何使用 Java 將 PDF 頁面轉換為圖像和讀取條碼。
// 下面的代碼示例顯示瞭如何使用 PDF Convertor 將 PDF 頁面轉換為圖像並讀取條碼。
// 文檔的路徑
String folderPath = "C:\\Files\\BarCode\\";
// 輸入文件路徑
String file = folderPath + "sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// 初始化 PdfConvertor
com.aspose.pdf.facades.PdfConverter pdfConverter = new com.aspose.pdf.facades.PdfConverter(pdfDoc);
// 設置條碼優化
pdfConverter.getRenderingOptions().setBarcodeOptimization(true);
// 設置頁面分辨率
// 300 dpi 是標準分辨率
pdfConverter.setResolution(new com.aspose.pdf.devices.Resolution(300));
// 設置所有頁面渲染成圖片
pdfConverter.setStartPage(1); //starts from page 1
pdfConverter.setEndPage(pdfConverter.getDocument().getPages().size());
// 將選定的頁面渲染到圖像中
pdfConverter.doConvert();
int imageCount = 1;
while (pdfConverter.hasNextImage())
{
// 將當前頁面呈現為圖像
String strBarCodeImage = folderPath + imageCount + ".jpg";
pdfConverter.getNextImage(strBarCodeImage);
// 從頁面的渲染圖像中識別條形碼
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(("-------------------------------"));
}
}
使用 Java 從 PDF 中提取和讀取條形碼
同樣,我們也可以使用 PdfExtractor 類識別嵌入在 PDF 頁面上的條形碼圖像。它允許從PDF中提取圖像,然後我們將從提取的圖像中讀取條碼信息。
我們可以按照以下步驟從提取的圖像中讀取條形碼:
- 首先,創建 PdfExtractor 類的實例。
- 接下來,使用 bindPdf() 方法綁定輸入的 PDF 文檔。
- 然後,設置圖像提取的頁面範圍。
- 接下來,調用 extractImage() 方法來提取圖像。
- 然後,循環保存圖像。
- 接下來,使用圖像路徑創建 BarCodeReader 類的實例。
- 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
下面的代碼示例展示瞭如何使用 Java 從 PDF 文檔中提取和讀取條形碼圖像。
// 以下代碼示例顯示如何使用 PdfExtractor 將 PDF 頁面轉換為圖像並讀取條碼。
// 文檔的路徑
String folderPath = "C:\\Files\\BarCode\\";
// 輸入文件
String file = folderPath + "sample-PDF-with-Barcodes.pdf";
// 綁定 PDF 文檔
com.aspose.pdf.facades.PdfExtractor pdfExtractor = new com.aspose.pdf.facades.PdfExtractor();
pdfExtractor.bindPdf(file);
// 設置圖像提取的頁面範圍
pdfExtractor.setStartPage(1);
pdfExtractor.setEndPage(3);
// 提取圖像
pdfExtractor.extractImage();
int imageCount = 1;
// 將圖像保存到循環流中
while (pdfExtractor.hasNextImage())
{
// 保存圖片
String strBarCodeImage = folderPath + imageCount + ".jpg";
pdfExtractor.getNextImage(strBarCodeImage);
// 識別圖像中的條形碼
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(("-------------------------------"));
}
}
在 Java 中使用 PngDevice 從 PDF 讀取條碼
我們還可以通過使用 API 的 PngDevice 類將 PDF 文檔的頁面轉換為 PNG 圖像來讀取條形碼。它提供了process(Page page, OutputStream output)方法將頁面轉換為PNG並保存在輸出流中。該類的processToBufferedImage(Page page)方法將頁面轉換為BufferedImage。
我們可以按照以下步驟將轉換後的 PDF 頁面中的條碼讀取為 PNG 圖像:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 PngDevice 類的實例。
- 然後,循環遍歷所有頁面並調用 processToBufferedImage() 方法來渲染圖像。
- 接下來,使用 BufferedImage 對象創建 BarCodeReader 類的實例。
- 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
以下代碼示例顯示如何使用 Java 轉換 PDF 頁面和讀取條形碼。
// 下面的代碼示例展示瞭如何使用 PngDevice 將 PDF 頁面轉換為圖像並讀取條碼。
// 文檔的路徑
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// 使用 300 dpi 標準分辨率創建 PNG 設備
com.aspose.pdf.devices.PngDevice pngDevice = new com.aspose.pdf.devices.PngDevice(new com.aspose.pdf.devices.Resolution(300));
// 從第 1 頁開始處理所有 PDF 頁面
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// 將 PDF 頁面呈現為緩衝圖像
BufferedImage img = pngDevice.processToBufferedImage(pdfDoc.getPages().get_Item(i));
// 從頁面的渲染圖像中識別條形碼
BarCodeReader reader = new BarCodeReader(img);
// 顯示結果
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
使用 Java 從 PDF 中查找和讀取條碼圖像
我們可以使用 ImagePlacementAbsorber 類從 PDF 文檔中查找和提取條形碼圖像。它執行圖像使用搜索,並通過 ImagePlacements 集合提供對搜索結果的訪問。此方法允許識別具有原始分辨率的條形碼。唯一的缺點是它可能無法正確識別矢量格式。
我們可以按照以下步驟從 PDF 文檔中查找和讀取條形碼:
- 首先,使用 Document 類加載 PDF 文檔。
- 接下來,創建 ImagePlacementAbsorber 類的一個實例。
- 然後,循環調用每個頁面的 visit() 方法。
- 接下來,遍歷在 ImagePlacements 集合中找到的所有圖像。
- 然後,將圖像保存到內存流中。
- 接下來,使用流對象創建 BarCodeReader 類的實例。
- 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
- 最後,顯示條碼信息。
以下代碼示例展示瞭如何使用 Java 從 PDF 中查找和讀取條形碼圖像。
// 此代碼示例演示如何使用 ImagePlacementAbsorber 從 PDF 文檔讀取條形碼。
// 文檔的路徑
String file = "C:\\Files\\BarCode\\sample-PDF-with-Barcodes.pdf";
// 加載 PDF 文檔
com.aspose.pdf.Document pdfDoc = new com.aspose.pdf.Document(file);
// 初始化 ImagePlacementAbsorber
com.aspose.pdf.ImagePlacementAbsorber imagePlacementAbsorber = new com.aspose.pdf.ImagePlacementAbsorber();
// 從第 1 頁開始處理文檔中的所有 PDF 頁面
for (int i = 1; i <= pdfDoc.getPages().size(); ++i)
{
// 訪問頁面創建圖像提取器
imagePlacementAbsorber.visit(pdfDoc.getPages().get_Item(i));
// 從 PDF 頁面中提取所有圖像
for (com.aspose.pdf.ImagePlacement imagePlacement : imagePlacementAbsorber.getImagePlacements()) {
// 將 PDF 頁面渲染到流中
byte[] ms = pdfDoc.getPages().get_Item(i).convertToPNGMemoryStream();
InputStream stream = new ByteArrayInputStream(ms);
// 從頁面流中識別條形碼
BarCodeReader reader = new BarCodeReader(stream);
// 顯示結果
for (BarCodeResult result : reader.readBarCodes()) {
System.out.println("CodeText: " + result.getCodeText());
System.out.println("Symbology type: " + result.getCodeType());
System.out.println(("-------------------------------"));
}
}
}
獲得免費許可證
您可以 獲得免費的臨時許可證 來試用這些庫,而沒有評估限制。
結論
在本文中,我們了解到
- 如何檢測和讀取 PDF 文檔中的條形碼;
- 從 PDF 文檔中提取圖像的各種方法;
- 在 Java 中解碼嵌入的條形碼。
除了在 Java 中讀取 PDF 中的條碼外,您還可以使用 Aspose.BarCode 文檔 和 Aspose.PDF 文檔 了解有關 API 的更多信息。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。