在 Java 中讀取 PDF 中的條形碼

PDF 發票、收據或報告等文件可能包含條形碼形式的編碼信息。我們可以通過編程方式檢測、識別和讀取嵌入到 PDF 文檔中的條形碼。在本文中,我們將學習如何使用 Java 從 PDF 文檔中讀取條形碼。此外,我們將學習如何使用 Java 從 PDF 文檔中提取條形碼圖像。

本文應涵蓋以下主題:

  1. 從 PDF 讀取條碼的 Java API
  2. 從 PDF 讀取條碼
  3. 將 PDF 轉換為圖像並讀取條碼
  4. 從 PDF 中提取和讀取條碼
  5. 使用 PngDevice 從 PDF 讀取條碼
  6. 從 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 文檔任何頁面上的條形碼圖像:

  1. 首先,使用 Document 類加載 PDF 文檔。
  2. 接下來,遍歷所有頁面並呈現到流中。
  3. 然後,使用流對象創建 BarCodeReader 類的實例。
  4. 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
  5. 最後,顯示條碼信息。

下面的代碼示例顯示瞭如何使用 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 頁面中讀取條碼:

  1. 首先,使用 Document 類加載 PDF 文檔。
  2. 接下來,創建 PdfConverter 類的一個實例。
  3. 或者,使用 setBarcodeOptimization() 設置呈現選項。
  4. 然後,設置圖像分辨率。
  5. 接下來,使用 setStartPage() 和 setEndPage() 指定要呈現為圖像的頁面範圍。
  6. 然後,調用 doConvert() 方法將選定的頁面渲染成圖像。
  7. 接下來,循環保存圖像。
  8. 然後,使用保存的圖像文件路徑創建 BarCodeReader 類的實例。
  9. 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
  10. 最後顯示條碼信息。

下面的代碼示例展示瞭如何使用 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中提取圖像,然後我們將從提取的圖像中讀取條碼信息。

我們可以按照以下步驟從提取的圖像中讀取條形碼:

  1. 首先,創建 PdfExtractor 類的實例。
  2. 接下來,使用 bindPdf() 方法綁定輸入的 PDF 文檔。
  3. 然後,設置圖像提取的頁面範圍。
  4. 接下來,調用 extractImage() 方法來提取圖像。
  5. 然後,循環保存圖像。
  6. 接下來,使用圖像路徑創建 BarCodeReader 類的實例。
  7. 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
  8. 最後,顯示條碼信息。

下面的代碼示例展示瞭如何使用 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 圖像:

  1. 首先,使用 Document 類加載 PDF 文檔。
  2. 接下來,創建 PngDevice 類的實例。
  3. 然後,循環遍歷所有頁面並調用 processToBufferedImage() 方法來渲染圖像。
  4. 接下來,使用 BufferedImage 對象創建 BarCodeReader 類的實例。
  5. 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
  6. 最後,顯示條碼信息。

以下代碼示例顯示如何使用 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 文檔中查找和讀取條形碼:

  1. 首先,使用 Document 類加載 PDF 文檔。
  2. 接下來,創建 ImagePlacementAbsorber 類的一個實例。
  3. 然後,循環調用每個頁面的 visit() 方法。
  4. 接下來,遍歷在 ImagePlacements 集合中找到的所有圖像。
  5. 然後,將圖像保存到內存流中。
  6. 接下來,使用流對象創建 BarCodeReader 類的實例。
  7. 之後,調用 readBarCodes() 方法獲取 BarCodeResult 對象。
  8. 最後,顯示條碼信息。

以下代碼示例展示瞭如何使用 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 的更多信息。如有任何疑問,請隨時通過我們的免費支持論壇與我們聯繫。

也可以看看