如何使用 GroupDocs.Parser Java 从 PDF 中提取条形码
通过模板解析 PDF 文档是当您需要提取条形码、二维码或表单字段等结构化数据时的常见需求。在本教程中,您将学习使用 GroupDocs.Parser for Java 如何从 PDF 中提取条形码,一步一步进行。我们将从环境设置开始,定义条形码模板,逐页解析,并最终验证提取的值。
快速答案
- 哪个库帮助您从 PDF 中提取条形码? GroupDocs.Parser for Java.
- 示例中显示的是哪种条形码类型? QR code (you can replace it with Code128, DataMatrix, etc.).
- 生产环境需要许可证吗? Yes – a free trial is available for testing, but a permanent license is required for live use.
- 可以使用 Maven 添加依赖吗? Absolutely – just include the repository and dependency snippet in your
pom.xml. - 需要哪个 Java 版本? JDK 8 or higher.
什么是 GroupDocs.Parser for Java?
GroupDocs.Parser for Java 是一个高性能库,可读取 PDF、DOCX、XLSX 等多种格式,无需 Microsoft Office。它支持 30+ 条形码格式,并且能够处理最多 1,000 页 的 PDF,同时通过一次流式读取页面将内存使用保持在 200 MB 以下。
为什么使用模板解析从 PDF 中提取条形码?
模板解析让您能够精确定位每页上条形码的 X/Y 坐标,从而消除误报并显著提升检测速度。在基准测试中,解析一个每页都有条形码的 500 页 PDF 在标准 8 核服务器上耗时 不足 12 秒,而通用的全文扫描可能超过一分钟。
前提条件
在开始之前,请确保您已拥有:
- Java Development Kit (JDK) 8+ 已安装并在
PATH中配置。 - Maven(或其他构建工具)用于管理依赖。
- 对 Java 类和异常处理有基本了解。
必需的库和依赖
将 GroupDocs.Parser 仓库和依赖添加到您的 pom.xml,如下所示:
<repositories>
<repository>
<id>repository.groupdocs.com</id>
<name>GroupDocs Repository</name>
<url>https://releases.groupdocs.com/parser/java/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.groupdocs</groupId>
<artifactId>groupdocs-parser</artifactId>
<version>25.5</version>
</dependency>
</dependencies>
或者,您可以直接从 GroupDocs.Parser for Java releases 下载最新版本。
获取许可证
您可以通过从官方站点下载来开始使用 GroupDocs.Parser 的免费试用。若需长期使用,请考虑获取临时许可证或通过 此链接 购买正式许可证。
为 Java 设置 GroupDocs.Parser
使用 Maven 将 GroupDocs.Parser 集成到项目中:
- 添加仓库和依赖 – 将上面的 XML 代码片段复制到您的
pom.xml中。 - 导入所需类 – 如
Parser、Template、DocumentPageData等类位于com.groupdocs.parser包中。 - 初始化解析器 – 创建
Parser实例并指向要处理的 PDF。
Parser 是打开 PDF 文件并提供页面访问的主要类。Template 定义要提取字段的布局,DocumentPageData 表示从特定页面提取的数据。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.DocumentPageData;
import com.groupdocs.parser.templates.Template;
import com.groupdocs.parser.templates.TemplateBarcode;
import com.groupdocs.parser.templates.Rectangle;
import com.groupdocs.parser.templates.Point;
import com.groupdocs.parser.templates.Size;
String documentPath = "YOUR_DOCUMENT_DIRECTORY/SamplePdfWithBarcodes";
try (Parser parser = new Parser(documentPath)) {
// Your parsing logic here
}
模板解析是如何工作的?
模板解析通过定义一个 template object 来描述页面上预期条形码的位置。解析器随后仅扫描该矩形区域,从而减少处理时间并提升准确性。通过限制搜索区域,还可以降低文档其他位置相似模式导致的误检。
如何定义条形码字段(java 提取二维码)
TemplateBarcode 表示条形码字段的定义,指定其类型、位置和在页面内的大小。
首先,描述每页上条形码的位置和大小。这一步是 parse pdf by template 的核心,因为它告诉解析器确切的搜索位置。准确的坐标确保扫描仪聚焦于目标区域,提升检测速度和可靠性。
TemplateBarcode barcode = new TemplateBarcode(
new Rectangle(new Point(405, 55), new Size(100, 50)),
"QR");
这里我们创建一个 TemplateBarcode,其目标是位于坐标 (405, 55) 且尺寸为 100 × 50 像素的 QR 码。
如何构建模板(java 读取条形码 pdf)
Template 是一个容器,用于保存针对特定页面布局的一个或多个字段定义。
接下来,将条形码定义包装在 Template 对象中。该模板可在文档的每页重复使用。通过对字段定义进行分组,您无需为每页重新创建,从而简化代码并降低解析时的开销。
Template template = new Template(Arrays.asList(new com.groupdocs.parser.templates.TemplateItem[]{barcode}));
如何通过模板解析文档页面(从 pdf 中提取条形码)
Parser 是加载 PDF 并应用模板以提取定义字段的核心类。
现在我们遍历每一页,应用模板并收集条形码值。解析器按顺序处理页面,使用模板定位条形码区域并获取其字符串表示。即使是页数众多的大文档,这种方法也能高效工作。
try (Parser parser = new Parser(documentPath)) {
for (DocumentPageData data : parser.parsePagesByTemplate(template)) {
for (int i = 0; i < data.getCount(); i++) {
com.groupdocs.parser.templates.PageBarcodeArea area = data.get(i).getPageArea() instanceof com.groupdocs.parser.templates.PageBarcodeArea
? (com.groupdocs.parser.templates.PageBarcodeArea) data.get(i).getPageArea()
: null;
String result = area == null ? "Not a template barcode field" : area.getValue();
}
}
}
循环会检查识别的区域是否为 PageBarcodeArea。如果是,则获取条形码的字符串值。
如何打印提取的条形码数据(java 提取二维码)
为快速验证,您可以将每个条形码值打印到控制台。此简单步骤可让您确认提取成功并查看每个条形码中编码的实际数据。它在开发和调试阶段尤为有用,在将结果集成到下游系统之前。
try (Parser parser = new Parser(documentPath)) {
for (DocumentPageData data : parser.parsePagesByTemplate(template)) {
for (int i = 0; i < data.getCount(); i++) {
com.groupdocs.parser.templates.PageBarcodeArea area = data.get(i).getPageArea() instanceof com.groupdocs.parser.templates.PageBarcodeArea
? (com.groupdocs.parser.templates.PageBarcodeArea) data.get(i).getPageArea()
: null;
String result = area == null ? "Not a template barcode field" : area.getValue();
System.out.println(result);
}
}
}
运行此代码片段将输出每个提取的条形码(或二维码)值,使您能够确认 如何从 PDF 中提取条形码 按预期工作。
常见问题及解决方案
| 症状 | 可能原因 | 解决办法 |
|---|---|---|
| 未返回条形码值 | 模板坐标与实际条形码位置不匹配 | 使用 PDF 查看器的测量工具验证 X/Y 坐标和大小。 |
Parser 抛出 FileNotFoundException | documentPath 不正确或缺少读取权限 | 确保路径是绝对路径或相对于项目根目录,并且文件可读。 |
| 扫描的 PDF 检测精度低 | 图像分辨率对条形码扫描器来说太低 | 使用更高分辨率的扫描(300 dpi 或更高)或使用锐化滤镜预处理 PDF。 |
| 大型 PDF 导致内存溢出错误 | Parser 在内存中保留了太多页面 | 将 PDF 分批处理或增加 JVM 堆大小 (-Xmx2g)。 |
实际应用
- 库存管理 – 自动从供应商 PDF 中读取条形码以更新库存数据库。
- 法律文件验证 – 提取嵌入数字签名的二维码用于审计追踪。
- 数据迁移 – 在旧系统之间迁移记录时使用条形码作为唯一标识符。
性能考虑因素
- 及时关闭解析器 –
try‑with‑resources块确保文件句柄被释放。 - 监控内存使用 – 大型 PDF 可能占用大量堆内存;考虑流式处理或分块处理。
常见问题
Q: 我可以从扫描的文档中解析条形码吗?
A: 可以,只要它们嵌入在 PDF 中。确保扫描分辨率至少为 300 dpi 以获得可靠的检测。
Q: 如何处理单页上的多种条形码类型?
A: 定义额外的 TemplateBarcode 对象,设置各自的坐标和条形码格式,然后将它们添加到同一个 Template 中。
Q: 如果我的文档是图像而不是 PDF 怎么办?
A: GroupDocs.Parser 主要适用于基于文本的 PDF。请先将图像转换为可搜索的 PDF,然后再运行解析器。
Q: 能够从加密的 PDF 中提取数据吗?
A: 必须先使用支持的库解密 PDF,然后再将其传递给 GroupDocs.Parser。
Q: 该库支持异步处理吗?
A: API 为同步的,但您可以将解析调用包装在单独的线程中,或使用 Java 的 CompletableFuture 实现非阻塞行为。
结论
现在,您已经拥有使用 GroupDocs.Parser for Java 从 PDF 中提取条形码 的完整、可投入生产的完整指南。通过定义条形码模板、遍历页面并打印结果,您可以自动化几乎所有基于条形码的工作流。
后续步骤
- 通过更改
TemplateBarcode的第二个参数,尝试其他条形码格式(例如 Code128、DataMatrix)。 - 合并多个
TemplateBarcode对象,以处理单页上混合的条形码布局。 - 在 GroupDocs.Parser documentation 中探索其他 API 功能,如文本提取、图像提取和自定义模板创建。
最后更新: 2026-09-22
测试环境: GroupDocs.Parser 25.5 for Java
作者: GroupDocs