使用 GroupDocs.Parser 解析 PDF(Java)

在本综合教程中,您将学习如何通过强大的 GroupDocs.Parser 库 使用 Java 解析 PDF。无论您需要提取发票号码、抽取表格,还是获取 PDF 文件中的其他数据,本指南将一步步带您完成整个过程——从环境搭建到构建符合您文档布局的自定义解析模板。

快速答案

  • 应该使用哪个库? GroupDocs.Parser for Java
  • 我可以从 PDF 中提取表格吗? Yes – use java pdf table extraction features
  • 我需要许可证吗? A free trial is available; a permanent license is required for production
  • 支持哪个 Java 版本? Java SE 8 or higher
  • Maven 是推荐的设置吗? Yes, Maven simplifies dependency management

介绍

自动化从 PDF 中提取数据是开发发票、报告或数据聚合系统的开发者常见的挑战。通过使用 GroupDocs.Parser,您可以 使用 Java 解析 PDF,快速且可靠,并可自定义提取过程以匹配文档的独特结构。

什么是使用 Java 解析 PDF?

使用 Java 解析 PDF 是指以编程方式读取 PDF 文件的内容,并提取您所需的信息——文本、表格、图像或表单字段——无需手动复制粘贴。GroupDocs.Parser 提供了高级 API,抽象了底层 PDF 细节,让您专注于业务逻辑。

为什么在自定义模板中使用 GroupDocs.Parser?

  • 精确性: 定义精确的坐标或正则表达式模式以捕获正确的数据。
  • 灵活性: 在单个模板中混合固定位置字段、基于正则的字段和表格抽取。
  • 性能: 为大文档和批处理优化。
  • Java 友好: 与 Maven 和标准 Java 项目无缝集成。

前置条件

在开始之前,请确保您具备以下条件:

必需的库和版本

  • GroupDocs.Parser for Java: Version 25.5 or later.
  • 已安装 Maven 以进行依赖管理。

环境搭建要求

  • Java SE 8+(推荐使用 Java 11 或更高版本)。
  • 用于 Java 开发的 IDE 或文本编辑器(IntelliJ IDEA、Eclipse、VS Code 等)。

知识前提

  • 基础 Java 编程。
  • 熟悉 PDF 结构及常见的解析挑战。

为 Java 设置 GroupDocs.Parser

您可以通过 Maven 或直接下载 JAR 将 GroupDocs.Parser 添加到项目中。

使用 Maven

在您的 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>

直接下载

或者,从官方发布页面下载最新的 JAR: GroupDocs.Parser for Java releases

许可证获取步骤

  • 免费试用: 开始试用以探索 API。
  • 临时许可证: 使用临时密钥进行短期测试。
  • 购买: 为生产工作负载获取永久许可证。

基本初始化和设置

以下是一个最小示例,演示如何使用 GroupDocs.Parser 打开 PDF 文件:

import com.groupdocs.parser.Parser;

public class PdfParserExample {
    public static void main(String[] args) {
        try (Parser parser = new Parser("path/to/your/document.pdf")) {
            // Your parsing logic here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

如何使用自定义模板在 Java 中解析 PDF

库已准备好后,让我们创建一个自定义模板,指示解析器准确地在何处查找数据。

步骤 1:定义模板项

我们将为静态公司名称、基于正则的发票号码以及捕获明细行的表格创建字段。

import com.groupdocs.parser.templates.*;

private static Template getTemplate() {
    // Fixed position for "FromCompany"
    TemplateItem fromCompany = new TemplateField(
        new TemplateFixedPosition(new Rectangle(new Point(35, 135), new Size(100, 10))),
        "FromCompany");

    // Regex‑based field for "Invoice Number"
    TemplateItem invoiceNumber = new TemplateField(
        new TemplateRegexPosition("Invoice Number"),
        "InvoiceNumber");
    
    // Linked position for extracting the value next to the label
    TemplateItem invoiceNumberValue = new TemplateField(
        new TemplateLinkedPosition(invoiceNumber,
            new Size(200, 15),
            new TemplateLinkedPositionEdges(false, false, true, false)),
        "InvoiceNumberValue");

    // Define table parameters for line items
    TemplateTableParameters detailsTableParameters = new TemplateTableParameters(
        new Rectangle(new Point(35, 320), new Size(530, 55)), null);

    // Return the assembled template
    return new Template(java.util.Arrays.asList(
        fromCompany,
        invoiceNumber,
        invoiceNumberValue,
        new TemplateTable(detailsTableParameters, "details", null)));
}

步骤 2:使用模板解析文档

模板准备好后,调用 parseByTemplate 提取数据。

import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.DocumentData;
import com.groupdocs.parser.data.PageTextArea;

public class PdfParserExample {
    public static void main(String[] args) {
        try (Parser parser = new Parser("path/to/your/document.pdf")) {
            Template template = getTemplate();
            DocumentData data = parser.parseByTemplate(template);

            if (data != null) {
                for (int i = 0; i < data.getCount(); i++) {
                    PageTextArea area = data.get(i).getPageArea() instanceof PageTextArea
                            ? (PageTextArea) data.get(i).getPageArea()
                            : null;
                    System.out.println(data.get(i).getName() + ": " +
                        (area == null ? "Not a template field" : area.getText()));
                }
            } else {
                System.out.println("Parse Document by Template isn't supported.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

关键配置选项

  • 固定位置: 使用精确坐标定位静态文本(例如公司名称)。
  • 正则位置: 通过模式匹配定位发票号码等动态文本。
  • 关联位置: 获取出现在已知标签旁边的值。
  • TemplateTableParameters: 定义包含表格的区域,以启用 java pdf table extraction

故障排除提示

  • 确认坐标系统(点)与 PDF 布局匹配。
  • 使用 PDF 查看器的测量工具微调位置。
  • 确保正则表达式准确反映文档中的标签格式。
  • 确认所有 Maven 依赖已解析,并使用正确的库版本。

Java PDF 表格抽取 – 实际案例

从 PDF 中抽取表格是金融和物流领域的常见需求:

  1. 发票处理: 将明细行、数量和价格提取到数据库中。
  2. 报告合并: 将多个 PDF 的表格数据合并为单个 CSV 以进行分析。
  3. 合规审计: 自动验证监管表单中是否出现必填字段。

性能考虑因素

处理大 PDF 或批量处理时,请牢记以下最佳实践:

  • 内存管理: 及时关闭 Parser 实例(使用 try‑with‑resources)以释放本机资源。
  • 模板优化: 限制字段数量,并尽可能紧凑地定义表格区域。
  • 版本更新: 定期升级到最新的 GroupDocs.Parser 版本,以获得性能提升。

常见问题

Q: 使用 GroupDocs.Parser for Java 的前置条件是什么?
A: 您需要 Java SE 8+、Maven(或手动 JAR 处理),以及 GroupDocs.Parser 25.5 或更高版本。

Q: 如何在 GroupDocs.Parser 中创建自定义模板?
A: 使用 TemplateFixedPositionTemplateRegexPositionTemplateTableParameters 定义字段,然后将模板传递给 parser.parseByTemplate

Q: 我可以使用此方法从 PDF 中提取表格吗?
A: 当然。使用 TemplateTableParameters 指定表格区域——这可实现 java pdf table extraction。

Q: 能够解析受密码保护的 PDF 吗?
A: 可以。在构造 Parser 实例时提供密码:new Parser("file.pdf", "password")

Q: 该库如何处理非常大的文档?
A: API 会流式传输数据,并在 Parser 关闭时释放本机资源,使您能够在不耗尽内存的情况下处理大文件。

结论

您现在已经掌握了使用 GroupDocs.Parser 的自定义模板功能 使用 Java 解析 PDF 的坚实基础。通过定义精确的位置、正则模式和表格区域,您可以自动化提取发票、报告以及任何结构化 PDF 内容的数据。继续尝试不同的模板配置,将提取的数据集成到下游系统,并与开发者社区分享您的解决方案。


最后更新: 2026-04-05
测试环境: GroupDocs.Parser 25.5 for Java
作者: GroupDocs