Java實現(xiàn)PDF表格轉換為CSV的示例代碼
在很多企業(yè)辦公和數(shù)據(jù)分析的場景中,PDF 中常常存放著報表、清單或統(tǒng)計數(shù)據(jù)。相比 PDF,CSV 文件 更易于在 Excel 或數(shù)據(jù)庫中進行進一步處理。因此,我們常常需要一種方式,將 PDF 中的表格數(shù)據(jù)批量抽取并導出為 CSV 文件。
本文將介紹如何借助 Free Spire.PDF for Java,在 Java 程序中完成 PDF 表格到 CSV 的自動轉換。
環(huán)境準備
在項目中引入 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,可以實現(xiàn)從 加載 PDF、提取表格、到生成 CSV 文件 的完整自動化流程,下面我們將詳細介紹如何實現(xiàn)這個自動化流程。
Step 1: 加載 PDF 文檔
首先,創(chuàng)建 PdfDocument 對象并加載需要處理的 PDF 文件:
import com.spire.pdf.*;
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("Sample.pdf");
Step 2: 提取 PDF 表格數(shù)據(jù)
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;
}
}
轉換結果示例:

進階擴展
上面的示例將 所有表格合并到一個 CSV 文件 中。在實際業(yè)務中,我們還可能有不同的需求:
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 文件中,方便統(tǒng)一分析。下面的示例展示了如何實現(xiàn):
// 用于合并所有跨頁表格的內容
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");
}
}
}
}
// 統(tǒng)一寫入一個 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 文件。整體流程分為:
- 加載 PDF 文檔
- 提取表格數(shù)據(jù)
- 寫入 CSV 文件
并擴展了 分表導出 與 合并導出 兩種常見應用場景。
這種方式可以高效處理 PDF 報表、財務清單、問卷統(tǒng)計等數(shù)據(jù),極大減少人工操作的工作量。
到此這篇關于Java實現(xiàn)PDF表格轉換為CSV的示例代碼的文章就介紹到這了,更多相關Java PDF表格轉CSV內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實例
這篇文章主要介紹了Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)
這篇文章主要介紹了java網(wǎng)上商城開發(fā)之郵件發(fā)送功能,第一部分介紹了環(huán)境配置,第二部分則介紹了具體實現(xiàn)代碼,感興趣的小伙伴們可以參考一下2016-03-03

