翻譯|行業(yè)資訊|編輯:吉煒煒|2025-09-01 14:34:14.980|閱讀 28 次
概述:借助 Spire.PDF for Java,可以檢測 PDF 中的表格結構,并通過少量代碼實現自動化導出。本文將逐步講解如何在 Java 中完成 PDF 到 CSV 的轉換——從環(huán)境搭建,到表格提取,再到處理多頁文檔或單頁多表等復雜情況。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在處理以 PDF 格式存儲的報告、發(fā)票或數據集時,開發(fā)人員常常需要在電子表格、數據庫或分析工具中復用其中的表格數據。一個常見的解決方案是 使用 Java 將 PDF 轉換為 CSV,因為 CSV 文件輕量、結構化,并且?guī)缀踉谒衅脚_上都兼容。與文本或圖片導出不同,PDF 轉 CSV 的核心是 從 PDF 中提取表格并保存為 CSV。
E-iceblue旗下Spire系列產品,是文檔處理領域的佼佼者,支持國產化信創(chuàng)。借助 Spire.PDF for Java,可以檢測 PDF 中的表格結構,并通過少量代碼實現自動化導出。本文將逐步講解如何借助Spire.PDF for Java 在 Java 中完成 PDF 到 CSV 的轉換——從環(huán)境搭建,到表格提取,再到處理多頁文檔或單頁多表等復雜情況。
加入Spire技術交流QQ群(125237868),與更多開發(fā)者一起提升文檔開發(fā)技能。
在使用 Java 提取表格并轉換為 CSV 之前,需要先搭建開發(fā)環(huán)境。這包括選擇合適的庫并將其添加到項目中。
由于 PDF 文件本身不支持直接導出為 CSV,因此通過代碼提取表格是更現實的做法。Spire.PDF for Java 提供了檢測 PDF 文檔中表格結構并直接保存為 CSV 的 API,使轉換過程更簡單高效。
如果使用 Maven,可以添加以下配置:
<repositories> <repository> <id>com.e-iceblue</id> <name>e-iceblue</name> <url>//repo.e-iceblue.cn/repository/maven-public/</url> </repository> </repositories> <dependencies> <dependency> <groupId>e-iceblue</groupId> <artifactId>spire.pdf</artifactId> <version>11.8.3</version> </dependency> </dependencies>
如果沒有使用 Maven,可以直接 下載 Spire.PDF for Java 安裝包,并將 JAR 文件添加到項目的 classpath 中。
將 PDF 轉換為 CSV 最實用的方法就是表格提取。使用 Spire.PDF for Java,可以通過以下步驟完成:
下面的 Java 示例展示了完整的轉換流程:
import com.spire.pdf.*; import com.spire.pdf.utilities.*; import java.io.*; public class PdfToCsvExample { public static void main(String[] args) throws Exception { // 加載 PDF 文檔 PdfDocument pdf = new PdfDocument(); pdf.loadFromFile("Sample.pdf"); // 用于存儲提取文本的 StringBuilder StringBuilder sb = new StringBuilder(); // 遍歷每一頁 for (int i = 0; i < pdf.getPages().getCount(); i++) { PdfTableExtractor extractor = new PdfTableExtractor(pdf); PdfTable[] tableLists = extractor.extractTable(i); if (tableLists != null) { for (PdfTable table : tableLists) { for (int row = 0; row < table.getRowCount(); row++) { for (int col = 0; col < table.getColumnCount(); col++) { // 安全處理 CSV 字段 String cellText = escapeCsvField(table.getText(row, col)); sb.append(cellText); if (col < table.getColumnCount() - 1) { sb.append(","); } } sb.append("\n"); } } } } // 寫入 CSV 文件 try (Writer writer = new OutputStreamWriter( new FileOutputStream("output/PDFTable.csv"), "UTF-8")) { writer.write(sb.toString()); } pdf.close(); System.out.println("PDF 表格已成功導出為 CSV。"); } // 處理 CSV 字段的工具方法 private static String escapeCsvField(String text) { if (text == null) return ""; // 去掉換行 text = text.replaceAll("[\\n\\r]", ""); // 特殊字符處理 if (text.contains(",") || text.contains(";") || text.contains("\"") || text.contains("\n")) { text = text.replace("\"", "\"\""); // 轉義雙引號 text = "\"" + text + "\""; // 添加引號 } return text; } }
運行代碼后生成的 CSV 文件示例:
實際應用中,PDF 文件常常包含多個表格、跨多頁,或表格結構不規(guī)則。下面介紹如何應對這些情況。
extractTable(i) 返回的 PdfTable[] 包含該頁中檢測到的所有表格,可以將每個表單獨保存為不同的 CSV 文件:
for (int i = 0; i < pdf.getPages().getCount(); i++) { PdfTableExtractor extractor = new PdfTableExtractor(pdf); PdfTable[] tableLists = extractor.extractTable(i); if (tableLists != null) { for (int t = 0; t < tableLists.length; t++) { PdfTable table = tableLists[t]; StringBuilder tableContent = new StringBuilder(); 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/Tables/Table_Page" + i + "_Index" + t + ".csv"), "UTF-8")) { writer.write(sb.toString()); } } } }示例:將單頁的多個表格導出為獨立 CSV 文件:
如果表格跨越多頁,可以逐頁提取并 追加寫入,以避免覆蓋:
StringBuilder sb = 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 (PdfTable table : tables) { 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"); } } } } FileWriter writer = new FileWriter("MergedTables.csv"); writer.write(sb.toString()); writer.close();示例:將跨多頁的大表格合并為一個 CSV 文件:
CSV 只能存儲純文本,像合并單元格、字體、圖片等格式會丟失。如果需要保留樣式,可以導出為 Excel(.xlsx)。
在寫入 CSV 時,逗號、分號、雙引號、換行等特殊字符可能會破壞文件結構。 上述 Java 示例中的 escapeCsvField 方法可以去除換行并安全轉義。
更復雜的場景下,可以使用 Spire.XLS for Java,通過簡單的 Java 代碼將表格數據寫入 Excel,再將 Excel 工作表保存為 CSV,無需手動處理特殊字符。
在 Java 中將 PDF 轉換為 CSV,本質上就是 提取表格并保存為結構化格式。CSV 文件輕量、通用,非常適合存儲和分析表格數據。通過搭建 Spire.PDF for Java 環(huán)境并參考本文示例代碼,即可實現自動化轉換,減少手動操作并提高效率。
A: 可以。雖然圖片和帶格式的文本無法導出,但表格數據可以提取并保存為 CSV。
A: 使用 Spire.PDF for Java 等 PDF 庫,可以解析文檔、檢測表格并導出為 CSV 或 Excel。
A: 對于 Java 開發(fā)者來說,Spire.PDF for Java 等代碼級解決方案比手動轉換工具更靈活高效。
A: 步驟與導出 CSV 類似,不同之處在于將數據保存為 Excel 格式,以便支持更多功能。
————————————————————————————————————————
關于慧都科技:
慧都科技是一家行業(yè)數字化解決方案公司,長期專注于軟件、油氣與制造行業(yè)。公司基于深入的業(yè)務理解與管理洞察,以系統化的業(yè)務建模驅動技術落地,幫助企業(yè)實現智能化運營與長期競爭優(yōu)勢。在軟件工程領域,我們提供開發(fā)控件、研發(fā)管理、代碼開發(fā)、部署運維等軟件開發(fā)全鏈路所需的產品,提供正版授權采購、技術選型、個性化維保等服務,幫助客戶實現技術合規(guī)、降本增效與風險可控。慧都科技E-iceblue的官方授權代理商,提供E-iceblue系列產品免費試用,咨詢,正版銷售等于一體的專業(yè)化服務。E-iceblue旗下Spire系列產品是國產文檔處理領域的優(yōu)秀產品,支持國產化信創(chuàng),幫助企業(yè)高效構建文檔處理的應用程序。
歡迎下載|體驗更多E-iceblue產品
獲取更多信息請咨詢 ;技術交流Q群(125237868)
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網