如何使用 GroupDocs.Parser 进行 Java PDF 表格提取

在本综合教程中,您将学习如何使用 GroupDocs.Parser 库执行 java pdf table extraction。无论您需要提取财务表格、发票明细行还是研究数据,本指南将带您了解如何检查文档支持、定义精确的表格布局,并高效提取数据以供后续的 Java 处理。

快速答案

  • GroupDocs.Parser 能够从 PDF 中读取表格吗? 是的——它为 PDF 以及许多其他格式提供原生表格提取功能。
  • 开发是否需要许可证? 您可以先使用免费试用版;在生产环境中需要许可证。
  • 需要哪个 Java 版本? JDK 8 或更高。
  • Maven 是唯一的添加库的方式吗? 不是——您也可以直接下载 JAR 包。
  • 这能用于受密码保护的文件吗? 可以,只需在创建 Parser 实例时提供密码。

什么是 java pdf 表格提取?

Java pdf table extraction 是指使用 Java 代码以编程方式读取嵌入在 PDF(或 Word)文件中的表格结构的过程。GroupDocs.Parser 抽象了底层解析,并将每个单元格返回为纯文本,便于分析或导入数据库。它支持扫描版和原生 PDF,能够处理合并单元格和跨页表格,无需额外配置。

为什么在表格提取中使用 GroupDocs.Parser?

GroupDocs.Parser 支持 50 多种输入和输出格式——包括 PDF、DOCX、PPTX 和 HTML——因此您可以在不同文档类型之间复用同一 API。基于布局的提取在复杂表格上可实现 最高 98% 的准确率,且该库通过流式处理多百页 PDF,将内存使用保持在 200 MB 以下。

前置条件

  • 已安装 Java Development Kit (JDK) 8+。
  • 用于依赖管理的 Maven(或手动 JAR 处理)。
  • 对 Java 语法和面向对象概念有基本了解。

为 Java 设置 GroupDocs.Parser

Maven 设置

如果您使用 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>

直接下载

或者,直接从 GroupDocs.Parser for Java releases 下载最新版本。请遵循其网站上提供的安装说明。

许可证获取

若要完整使用 GroupDocs.Parser 功能,请考虑获取许可证。您可以先使用免费试用版,或按照 purchase page 上的步骤获取临时许可证。

完成所有设置后,让我们继续实际的 java pdf table extraction 实现。

实现指南

检查文档是否支持表格提取

此文档是否支持表格提取?
您首先需要确认目标文件是否可以进行表格处理。GroupDocs.Parser 提供一个功能标志,可告知给定格式是否支持表格提取,从而避免运行时出现不必要的错误。

  • Parser 初始化: Parser 类是加载文档到内存的入口点。
  • 功能检查: 调用 parser.getFeatures().isTables();若支持表格提取则返回 true。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.IDocumentInfo;

public class TableExtractionCheck {
    public static void main(String[] args) {
        try (Parser parser = new Parser("YOUR_DOCUMENT_DIRECTORY/your_document.pdf")) {
            // Check if the document supports table extraction.
            if (!parser.getFeatures().isTables()) {
                System.out.println("Document doesn't support table extraction.");
            } else {
                System.out.println("Document supports table extraction. Proceeding...");
                extractTablesFromDocument();
            }
        }
    }
}

为提取创建表格布局

如何定义精确的表格布局?
布局向引擎指明列和行的起始位置,这对于自动检测可能遗漏合并单元格或间距不规则的复杂 PDF 至关重要。

  • 列和行坐标: 为每列指定 X 轴的起始/结束位置,为每行指定 Y 轴位置。
  • TemplateTableLayout: 此对象保存坐标映射,随后在提取调用时传入。
import com.groupdocs.parser.templates.TemplateTableLayout;

public class TableExtractionSetup {
    public static TemplateTableLayout createTemplateTableLayout() {
        return new TemplateTableLayout(
            java.util.Arrays.asList(new Double[]{50.0, 95.0, 275.0, 415.0, 485.0, 545.0}),
            java.util.Arrays.asList(new Double[]{325.0, 340.0, 365.0, 395.0})
        );
    }
}

从文档页面提取表格

提取表格的逐步流程是什么?
在确认支持并定义布局后,您遍历每一页,请求表格数据,并将结果收集到 Java 集合中以便后续处理。

  • 页面遍历: 循环 parser.getPages() 以处理多页 PDF。
  • 表格提取: 使用 parser.getTables(pageIndex, options),其中 options 包含先前定义的布局。
import com.groupdocs.parser.Parser;
import com.groupdocs.parser.data.PageTableArea;
import com.groupdocs.parser.data.IDocumentInfo;
import com.groupdocs.parser.options.PageTableAreaOptions;

public class TableExtractionProcess {
    public static void extractTablesFromDocument() {
        try (Parser parser = new Parser("YOUR_DOCUMENT_DIRECTORY/your_document.pdf")) {
            IDocumentInfo documentInfo = parser.getDocumentInfo();
            if (documentInfo.getPageCount() > 0) {
                PageTableAreaOptions options = new PageTableAreaOptions(TableExtractionSetup.createTemplateTableLayout());

                for (int pageIndex = 0; pageIndex < documentInfo.getPageCount(); pageIndex++) {
                    Iterable<PageTableArea> tables = parser.getTables(pageIndex, options);
                    
                    for (PageTableArea table : tables) {
                        for (int row = 0; row < table.getRowCount(); row++) {
                            for (int column = 0; column < table.getColumnCount(); column++) {
                                PageTableAreaCell cell = table.getCell(row, column);
                                if (cell != null) {
                                    System.out.print(cell.getText() + " | ");
                                }
                            }
                            System.out.println();
                        }
                        System.out.println();
                    }
                }
            } else {
                System.out.println("Document has no pages.");
            }
        }
    }
}

java pdf 表格提取的实际应用

实现表格提取在多个真实场景中都有益处:

  1. 数据分析: 从财务报告或科学论文中提取结构化数据,以供后续分析。
  2. 发票处理: 自动从发票中提取明细行,并将数据导入会计系统。
  3. 文档管理: 将提取的表格数据与全文内容一起建立索引,以提升 DMS 解决方案的可搜索性。

性能考虑

在使用 GroupDocs.Parser 时,为获得最佳性能,请注意以下事项:

  • 优化内存使用: 为大型 PDF 分配足够的堆空间(例如 -Xmx2g)。
  • 批量处理: 将多个文档合并为单个任务,以降低 JVM 启动开销。
  • 高效布局: 精确的坐标定义可缩小扫描区域,使提取速度提升最高可达 30%。

常见问题与解决方案

问题原因解决方案
未返回表格布局坐标与实际表格位置不匹配使用查看器的标尺核对列/行坐标。
内存不足错误将非常大的文档一次性加载使用流式模式或增大 JVM 堆(-Xmx)。
空单元格表格包含布局未覆盖的合并单元格调整布局以包含合并单元格边界,或在不使用布局的情况下使用默认提取。

常见问答

问:我可以从其他文档格式中提取表格吗?
答:可以,GroupDocs.Parser 支持 DOCX、PPTX、TXT 等多种格式。完整列表请参阅官方文档。

问:开发构建是否需要许可证?
答:免费试用许可证足以用于开发和测试。生产部署则需要商业许可证。

问:GroupDocs.Parser 如何处理受密码保护的 PDF?
答:在构造 Parser 对象时提供密码,例如 new Parser(filePath, password)。库会自动解密文件。

问:是否可以在不定义布局的情况下提取表格?
答:可以,您可以调用 parser.getTables(pageIndex) 而不传入选项,但基于布局的提取在复杂表格上能提供更高的准确率。

问:哪个版本的 GroupDocs.Parser 与 Java 11 兼容?
答:本指南使用的 25.5 版完全支持 Java 8‑17,包括 Java 11。

结论

现在,您已经掌握了使用 GroupDocs.Parser 进行 java pdf 表格提取 的生产就绪方案。通过验证文档功能、定义自定义 TemplateTableLayout 并遍历页面,您可以可靠地提取结构化数据,以供任何后续的 Java 工作流使用。

后续步骤

  • 在 documentation 中探索高级功能,如 表格合并、单元格格式化 和 导出为 CSV。
  • 尝试不同的布局配置,以处理文档集合中多样的表格设计。

Last Updated: 2026-09-17
Tested With: GroupDocs.Parser 25.5 for Java
Author: GroupDocs

相关教程