如何使用 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