PDF 发票、收据或报告等文件可能包含条形码形式的编码信息。我们可以以编程方式检测、识别和读取嵌入在 PDF 文档中的条形码。在本文中,我们将学习如何使用 Java 从 PDF 文档中读取条形码。此外,我们将学习如何在 Java 中从 PDF 文档中提取条形码图像。
本文将涵盖以下主题:
- 从 PDF 读取条形码的 Java API
- 从 PDF 读取条形码
- 将PDF转换为图像并读取条形码
- 从 PDF 中提取和读取条形码
- 使用 PngDevice 从 PDF 读取条形码
- 从 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 Converter 将 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 的更多信息。如有任何歧义,请随时在我们的 免费支持论坛 上与我们联系。