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

从 PDF 文件中提取表格是将静态文档转换为结构化数据的常见需求。在本教程中,您将学习使用 GroupDocs.Parser Java 库 如何提取表格。我们将覆盖环境设置、表格布局配置,以及如何 导出 pdf 表格 csv 以进行下游处理。完成后,您将能够将强大的表格提取集成到任何基于 Java 的数据管道中。

快速答案

  • 主要库是什么? GroupDocs.Parser for Java
  • 我可以从扫描的 PDF 中提取表格吗? 仅在 OCR 之后;请参阅下面的 “extract tables scanned pdf” 注释
  • 我需要许可证吗? 试用许可证可用于开发;生产环境需要正式许可证
  • 需要哪个 Java 版本? Java 8 或更高
  • 是否支持批处理? 是的 – API 已针对大规模提取进行优化

什么是 Java PDF 表格提取?

Java PDF 表格提取是指以编程方式定位 PDF 中的表格结构,解释单元格边界,并以机器可读的格式(如 CSV 或 Excel)检索文本的过程。这使得下游分析、报告或迁移任务无需手动复制粘贴即可完成。

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

GroupDocs.Parser 提供 对超过 50 种输入和输出格式的精准布局检测,并且能够在内存使用低于 200 MB 的情况下处理数百页的 PDF。它支持批处理作业,提供简易的 Maven 依赖,并可与 GroupDocs OCR 无缝集成,以处理扫描文档场景。

前提条件

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

  • Java 8+ 已在您的 IDE 或构建工具中安装并配置。
  • Maven 用于依赖管理。
  • 获取 GroupDocs.Parser 许可证(试用或正式)。

必需的库和依赖项

您需要:

  • GroupDocs.Parser for Java 库(版本 25.5 或更高)。
  • 系统上已安装 Maven 用于依赖管理。

环境设置

确保您的开发环境已使用兼容的 Java 版本(Java 8 或更高)进行设置。

知识前提

具备 Java 编程的基础理解以及对 Java 中文件处理的熟悉度将有所帮助。

为 Java 设置 GroupDocs.Parser

要开始使用 GroupDocs.Parser,请按如下方式将其集成到项目中:

Maven 设置
将以下配置添加到您的 pom.xml 文件中,以将 GroupDocs.Parser 作为依赖项包含进来:

<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 releases 下载最新版本的 GroupDocs.Parser for Java。

许可证获取

先使用免费试用,获取临时许可证,或购买正式许可证。详情请访问 GroupDocs licensing page。

基本初始化和设置

在您的 Java 应用程序中按如下方式初始化 GroupDocs.Parser:

import com.groupdocs.parser.Parser;

public class DocumentParser {
    public static void main(String[] args) {
        final String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleInvoicePagesPdf.pdf";
        try (Parser parser = new Parser(filePath)) {
            // Ready to perform operations on the document
        } catch (Exception e) {
            System.err.println("Error creating Parser instance: " + e.getMessage());
        }
    }
}

实现指南

让我们逐步了解您需要掌握的每个功能,以 从 PDF 中提取表格。

功能 1:使用 GroupDocs 进行文档解析

概述
要与 PDF 文档交互,创建 Parser 类的实例。
Parser 是在 GroupDocs.Parser 中读取 PDF 内容的入口类。它使对文档的各种操作成为可能。

创建解析器实例
Parser 类是读取 GroupDocs.Parser 中 PDF 内容的入口点。它将文档加载到内存中,并公开用于提取文本、表格和其他结构的方法。

import com.groupdocs.parser.Parser;

public class CreateParserInstance {
    public static void main(String[] args) {
        final String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleInvoicePagesPdf.pdf";
        try (Parser parser = new Parser(filePath)) {
            // Document is ready for operations
        } catch (Exception e) {
            System.err.println("Error creating Parser instance: " + e.getMessage());
        }
    }
}

功能 2:表格提取能力检查

概述
在提取表格之前,验证 PDF 是否支持表格提取。

检查表格支持
hasTables() 方法返回一个布尔值,指示已加载的 PDF 是否包含可检测的表格数据。
hasTables() 检查文档是否包含任何表格。

import com.groupdocs.parser.Parser;

public class CheckTableSupport {
    public static void main(String[] args) {
        final String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleInvoicePagesPdf.pdf";
        try (Parser parser = new Parser(filePath)) {
            boolean isTablesSupported = parser.getFeatures().isTables();
            
            if (!isTablesSupported) {
                System.out.println("Document doesn't support tables extraction.");
            }
        } catch (Exception e) {
            System.err.println("Error checking table extraction capability: " + e.getMessage());
        }
    }
}

功能 3:表格布局配置

概述
配置表格的布局可以提升数据提取的准确性。

设置表格布局
TemplateTableLayout 定义预期的列宽和行高。
TemplateTableLayout 为表格检测指定自定义的列宽和行高。调整这些值有助于引擎将单元格边界与可视网格对齐。

import com.groupdocs.parser.templates.TemplateTableLayout;
import java.util.Arrays;

public class ConfigureTableLayout {
    public static void main(String[] args) {
        final double[] columnWidths = {50.0, 95.0, 275.0, 415.0, 485.0, 545.0};
        final double[] rowHeights = {325.0, 340.0, 365.0, 395.0};

        TemplateTableLayout layout = new TemplateTableLayout(
                Arrays.asList(columnWidths), 
                Arrays.asList(rowHeights));
    }
}

功能 4:表格提取选项设置

概述
设置带有特定配置的表格提取选项,以提升提取准确性。

配置提取选项
TableExtractionOptions 允许您指定是否包含标题行、合并单元格或忽略空行。
TableExtractionOptions 配置提取行为,例如包含标题或合并单元格。

import com.groupdocs.parser.options.PageTableAreaOptions;
import com.groupdocs.parser.templates.TemplateTableLayout;

public class SetExtractionOptions {
    public static void main(String[] args) {
        TemplateTableLayout layout = new TemplateTableLayout(
                Arrays.asList(new Double[]{50.0, 95.0, 275.0, 415.0, 485.0, 545.0}), 
                Arrays.asList(new Double[]{325.0, 340.0, 365.0, 395.0}));

        PageTableAreaOptions options = new PageTableAreaOptions(layout);
    }
}

功能 5:从文档中提取表格

概述
使用已配置的选项提取表格,并根据需要进行处理。

提取过程
getTables() 方法返回一个 Table 对象集合,每个对象代表在请求页面上检测到的表格。
getTables() 检索文档中所有检测到的表格。
Table 表示一个包含行和单元格的单个提取表格。

import com.groupdocs.parser.Parser;
import com.groupdocs.parser.options.PageTableAreaOptions;
import com.groupdocs.parser.data.PageTableArea;

public class ExtractTables {
    public static void main(String[] args) {
        final String filePath = "YOUR_DOCUMENT_DIRECTORY/SampleInvoicePagesPdf.pdf";
        PageTableAreaOptions options = new PageTableAreaOptions(/* layout from previous feature */);

        try (Parser parser = new Parser(filePath)) {
            Iterable<PageTableArea> tables = parser.getTables(options);
            
            for (PageTableArea table : tables) {
                // Process each table as needed
            }
        } catch (Exception e) {
            System.err.println("Error extracting tables: " + e.getMessage());
        }
    }
}

功能 6:遍历表格行和列

概述
提取后,遍历行和列以访问各个单元格。

遍历并访问单元格
每个 Table 提供 getRows(),每个 Row 提供 getCells()。您可以通过 getText() 读取单元格文本并将其写入 CSV 或其他格式。
Row 表示 Table 中的单行。
getRows() 返回表格中的行列表。
getCells() 返回行中的单元格。
getText() 检索单元格的文本内容。

import com.groupdocs.parser.data.PageTableArea;
import com.groupdocs.parser.data.PageTableAreaCell;

public class IterateTables {
    public static void main(String[] args) {
        PageTableArea table = /* reference to a specific PageTableArea object */;

        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) {
                    // Process the cell text as needed
                }
            }
        }
    }
}

常见问题及解决方案

问题原因技巧
未返回表格PDF 为扫描的(基于图像)先运行 OCR,或在解析前使用 GroupDocs OCR。
列对齐不正确布局坐标不准确微调 TemplateTableLayout 值以匹配可视网格。
大 PDF 时内存激增Parser 将整个文档加载到内存中分批处理页面,并在每批后关闭 Parser。

常见问题

1. 我可以从扫描的 PDF 中提取表格还是只能从数字 PDF 中提取?

答案: GroupDocs.Parser 主要适用于包含嵌入文本的可选择数字 PDF。对于扫描的 PDF,您需要先运行 OCR——可以使用 GroupDocs OCR 或其他 OCR 引擎——以便在表格提取前使文本可搜索。

2. 如何处理具有复杂布局或合并单元格的表格?

答案: 使用精确的列和行坐标自定义 TemplateTableLayout,或在 TableExtractionOptions 中启用 mergeCells 标志。可能需要后处理以正确解释合并区域。

3. GroupDocs.Parser 适用于大文档或批处理吗?

答案: 是的。该库针对高吞吐场景构建,能够在保持低内存消耗的情况下处理数百页的 PDF。使用页面范围选项,并在每批后释放 Parser 实例以最大化性能。

4. 我可以将提取的表格数据导出为 CSV 或 Excel 等格式吗?

答案: GroupDocs.Parser 返回原始表格数据(行和单元格)。您可以使用 OpenCSV 将数据写入 CSV,或使用 Apache POI 写入 Excel。这满足 export pdf tables csv 用例,无需额外许可证。

5. 是否支持一次性从多个页面提取表格?

答案: 当然。使用页面范围调用 parser.getTables(pageOptions) 或遍历所有页面。API 会跨页面聚合表格,帮助您构建单一的合并数据集。

结论

使用 GroupDocs.Parser,Java PDF 表格提取变得简单。通过初始化 Parser、确认表格支持、配置布局和提取选项,并遍历生成的 Table 对象,您可以将静态 PDF 转换为结构化的 CSV 或 Excel 文件。该库以性能为中心的设计、对超过 50 种格式的支持以及无缝的 OCR 集成,使其成为发票自动化、数据迁移和大规模分析管道的理想选择。按照上述步骤,您即可在任何 Java 应用程序中嵌入可靠的表格提取功能。


最后更新: 2026-09-17
已测试: GroupDocs.Parser 25.5 (Java)
作者: GroupDocs

相关教程