当前位置: 首页 > news >正文

Java实现PDF表格转换为CSV

在很多企业办公和数据分析的场景中,PDF 中常常存放着报表、清单或统计数据。相比 PDF,CSV 文件 更易于在 Excel 或数据库中进行进一步处理。因此,我们常常需要一种方式,将 PDF 中的表格数据批量抽取并导出为 CSV 文件。

本文将介绍如何借助 Free Spire.PDF for Java,在 Java 程序中完成 PDF 表格到 CSV 的自动转换。

文章目录

    • 环境准备
    • PDF 表格导出为 CSV:完整流程
      • Step 1: 加载 PDF 文档
      • Step 2: 提取 PDF 表格数据
      • Step 3: 保存为 CSV 文件
      • PDF转CSV完整Java代码示例
    • 进阶扩展
      • 1. 每个表格单独保存
      • 2. 合并所有表格到一个文件
    • 总结


环境准备

在项目中引入 Free Spire.PDF for Java,可以通过 下载 jar 包,或使用 Maven:

<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>
<dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>9.13.0</version>
</dependency>

PDF 表格导出为 CSV:完整流程

通过 Java 程序结合 Free Spire.PDF,可以实现从 加载 PDF、提取表格、到生成 CSV 文件 的完整自动化流程,下面我们将详细介绍如何实现这个自动化流程。

Step 1: 加载 PDF 文档

首先,创建 PdfDocument 对象并加载需要处理的 PDF 文件:

import com.spire.pdf.*;PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("Sample.pdf");

Step 2: 提取 PDF 表格数据

Spire.PDF 提供 PdfTableExtractor 类来专门识别表格。
我们识别指定 PDF 页面中的指定表格,然后逐行逐列读取表格内容,并用 StringBuilder 拼接为 CSV 格式。

import com.spire.pdf.utilities.*;
import java.io.*;StringBuilder sb = new StringBuilder();PdfTableExtractor extractor = new PdfTableExtractor(pdf);
// 提取第一页的表格
PdfTable[] tables = extractor.extractTable(0);if (tables != null) {// 获取第一个表格PdfTable table = tables[0];for (int row = 0; row < table.getRowCount(); row++) {for (int col = 0; col < table.getColumnCount(); col++) {sb.append(escapeCsvField(table.getText(row, col)));if (col < table.getColumnCount() - 1) sb.append(",");}sb.append("\n");}
}

这里我们还需要一个工具方法来处理 CSV 中的特殊字符(如逗号、引号):

private static String escapeCsvField(String text) {if (text == null) return "";text = text.replaceAll("[\\n\\r]", "");if (text.contains(",") || text.contains(";") || text.contains("\"")) {text = text.replace("\"", "\"\"");text = "\"" + text + "\"";}return text;
}

Step 3: 保存为 CSV 文件

将拼接好的字符串写入文件,最终得到一个标准的 CSV:

try (Writer writer = new OutputStreamWriter(new FileOutputStream("output/PDFTable.csv"), "UTF-8")) {writer.write(sb.toString());
}
pdf.close();
System.out.println("PDF 表格已成功导出为 CSV。");

PDF转CSV完整Java代码示例

import com.spire.pdf.*;
import com.spire.pdf.utilities.*;import java.io.*;public class PdfToCsvExample {public static void main(String[] args) throws Exception {PdfDocument pdf = new PdfDocument();pdf.loadFromFile("Sample.pdf");StringBuilder sb = new StringBuilder();PdfTableExtractor extractor = new PdfTableExtractor(pdf);PdfTable[] tables = extractor.extractTable(0);if (tables != null) {PdfTable table = tables[0];for (int row = 0; row < table.getRowCount(); row++) {for (int col = 0; col < table.getColumnCount(); col++) {sb.append(escapeCsvField(table.getText(row, col)));if (col < table.getColumnCount() - 1) sb.append(",");}sb.append("\n");}}try (Writer writer = new OutputStreamWriter(new FileOutputStream("output/PDFTable.csv"), "UTF-8")) {writer.write(sb.toString());}pdf.close();System.out.println("PDF 表格已成功导出为 CSV。");}private static String escapeCsvField(String text) {if (text == null) return "";text = text.replaceAll("[\\n\\r]", "");if (text.contains(",") || text.contains(";") || text.contains("\"")) {text = text.replace("\"", "\"\"");text = "\"" + text + "\"";}return text;}
}

转换结果示例

使用Java转换PDF表格为CSV文件

进阶扩展

上面的示例将 所有表格合并到一个 CSV 文件 中。在实际业务中,我们还可能有不同的需求:

1. 每个表格单独保存

如果 PDF 每页包含多个表格,可以为每个表格生成独立的 CSV 文件:

for (int i = 0; i < pdf.getPages().getCount(); i++) {PdfTableExtractor extractor = new PdfTableExtractor(pdf);PdfTable[] tables = extractor.extractTable(i);if (tables != null) {for (int t = 0; t < tables.length; t++) {StringBuilder tableContent = new StringBuilder();PdfTable table = tables[t];for (int row = 0; row < table.getRowCount(); row++) {for (int col = 0; col < table.getColumnCount(); col++) {tableContent.append(escapeCsvField(table.getText(row, col)));if (col < table.getColumnCount() - 1) tableContent.append(",");}tableContent.append("\n");}try (Writer writer = new OutputStreamWriter(new FileOutputStream("output/Page" + i + "_Table" + t + ".csv"), "UTF-8")) {writer.write(tableContent.toString());}}}
}

这样,每个表格会被单独导出,命名为 Page0_Table0.csv 等。

2. 合并所有表格到一个文件

有时我们不想把每个表格拆开保存,而是希望把整份 PDF 中的表格内容都汇总到同一个 CSV 文件中,方便统一分析。下面的示例展示了如何实现:

// 用于合并所有跨页表格的内容
StringBuilder mergedTableContent = new StringBuilder();for (int i = 0; i < pdf.getPages().getCount(); i++) {PdfTableExtractor extractor = new PdfTableExtractor(pdf);PdfTable[] tables = extractor.extractTable(i);if (tables != null) {for (int t = 0; t < tables.length; t++) {PdfTable table = tables[t];for (int row = 0; row < table.getRowCount(); row++) {for (int col = 0; col < table.getColumnCount(); col++) {mergedTableContent.append(escapeCsvField(table.getText(row, col)));if (col < table.getColumnCount() - 1) mergedTableContent.append(",");}mergedTableContent.append("\n");}}}
}// 统一写入一个 CSV 文件
try (Writer writer = new OutputStreamWriter(new FileOutputStream("output/MergedTable.csv"), "UTF-8")) {writer.write(mergedTableContent.toString());
}

运行后,PDF 中的所有表格会被逐一读取并写入 同一个 CSV 文件,文件路径为 output/MergedTables.csv

总结

本文介绍了如何在 Java 中使用 Free Spire.PDF for Java 将 PDF 中的表格内容导出为 CSV 文件。整体流程分为:

  1. 加载 PDF 文档
  2. 提取表格数据
  3. 写入 CSV 文件

并扩展了 分表导出合并导出 两种常见应用场景。

这种方式可以高效处理 PDF 报表、财务清单、问卷统计等数据,极大减少人工操作的工作量。

更多功能与案例请参考:Spire.PDF for Java 教程中心

http://www.dtcms.com/a/357549.html

相关文章:

  • 消失的数字
  • RAG 系统核心:深入理解向量相似度匹配与文本向量化
  • Python中将py程序打包成exe可执行文件并封装环境以及本地依赖+单个exe和文件目录两种状态(亲测可用建议收藏)
  • docker 下载镜像报错
  • [HFCTF2020]EasyLogin
  • 日本IT|C++相关面试及问答技巧分享
  • STM32项目分享:基于单片机的自行车测速系统设计
  • Win11 压缩实测:Win11 的压缩软件的最佳配置和使用方式
  • 网站酷炫换皮肤?——PC 端 H5 换肤方案实战分享
  • WebGIS开发智慧校园(8)地图控件
  • A股大盘数据-20250829 分析
  • 03.《交换的底层逻辑:从基础到应用》
  • vue3中安装tailwindcss
  • ​​字节跳动重磅开源 Seed-OSS 大模型系列,12T tokens训练,原生支持512K长上下文​
  • python 2025/7/28
  • 【完整源码+数据集+部署教程】工地建筑进度监测系统源码和数据集:改进yolo11-SDI
  • 【笔记】扩散模型(一二)U-ViT|Diffusion with Transformer
  • 智慧园区系统:基于Java微服务架构与全栈信创国产化的数字化赋能平台
  • 人工智能一些基础概念与应用场景学习笔记
  • C++基础(③反转字符串(字符串 + 双指针))
  • solidity地址、智能合约、交易概念
  • Pointer--Learing MOOC-C语言第九周指针
  • 鸿蒙地址选择库(ArkTs UI)
  • Idea2025.2 MybatisX插件失效问题
  • Suno-API - OpenI
  • 【计算机网络】前端基础知识Cookie、localStorage、sessionStorage 以及 Token
  • 04.《VLAN基础与配置实践指南》
  • 掌握 Linux 文件权限:chown 命令深度解析与实践
  • css绘制三角形
  • 软件开发准则