欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實現(xiàn)PDF表格轉換為CSV的示例代碼

 更新時間:2025年08月31日 09:32:33   作者:Eiceblue  
在很多企業(yè)辦公和數(shù)據(jù)分析的場景中,PDF 中常常存放著報表、清單或統(tǒng)計數(shù)據(jù),本文將介紹如何借助 Free Spire.PDF for Java,在 Java 程序中完成 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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中的snowflake算法詳解

    Java中的snowflake算法詳解

    這篇文章主要介紹了Java中的snowflake算法詳解,Snowflake算法產(chǎn)生是為了滿足Twitter每秒上萬條消息的請求,每條消息都必須分配一條唯一的id,這些id還需要一些大致的順序,并且在分布式系統(tǒng)中不同機器產(chǎn)生的id必須不同,需要的朋友可以參考下
    2023-08-08
  • SpringCloud中的Ribbon負載均衡詳細解讀

    SpringCloud中的Ribbon負載均衡詳細解讀

    這篇文章主要介紹了SpringCloud中的Ribbon負載均衡詳細解讀,當系統(tǒng)面臨大量的用戶訪問,負載過高的時候,通常會增加服務器數(shù)量來進行橫向擴展(集群),多個服務器的負載需要均衡,以免出現(xiàn)服務器負載不均衡,部分服務器負載較大,部分服務器負載較小的情況,需要的朋友可以參考下
    2023-11-11
  • Java?如何獲取某年的第一天和最后一天

    Java?如何獲取某年的第一天和最后一天

    在統(tǒng)計的數(shù)據(jù)是時候,要統(tǒng)計某年的數(shù)據(jù),開始時間是某年的第一天,結束時間是某年的最后一天,該如何獲取某年的第一天和最后一天,今天通過本文介紹下Java獲取某年的第一天和最后一天,需要的朋友可以參考下
    2023-07-07
  • Java詳細介紹單例模式的應用

    Java詳細介紹單例模式的應用

    單例模式(Singleton Pattern)是 Java 中最簡單的設計模式之一。這種類型的設計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式
    2022-09-09
  • Java跨域問題分析與解決方法詳解

    Java跨域問題分析與解決方法詳解

    這篇文章主要介紹了Java跨域問題分析與解決方法,跨域問題是在Web應用程序中,由于同源策略的限制,導致瀏覽器無法發(fā)送跨域請求,也無法獲取跨域響應的問題,感興趣想要詳細了解可以參考下文
    2023-05-05
  • Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實例

    Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實例

    這篇文章主要介紹了Java8 使用工廠方法supplyAsync創(chuàng)建CompletableFuture實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringMVC文件上傳及查看的示例代碼

    SpringMVC文件上傳及查看的示例代碼

    本篇文章主要介紹了SpringMVC文件上傳及查看的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java之Spring簡單的讀取和存儲對象

    Java之Spring簡單的讀取和存儲對象

    這篇文章主要介紹了Spring的讀取和存儲對象,獲取 bean 對象也叫做對象裝配,是把對象取出來放到某個類中,有時候也叫對象注?,想進一步了解的同學可以參考本文
    2023-04-04
  • java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)

    java網(wǎng)上商城開發(fā)之郵件發(fā)送功能(全)

    這篇文章主要介紹了java網(wǎng)上商城開發(fā)之郵件發(fā)送功能,第一部分介紹了環(huán)境配置,第二部分則介紹了具體實現(xiàn)代碼,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java線程的控制詳解

    Java線程的控制詳解

    這篇文章主要介紹了Java中的join線程、后臺線程、線程睡眠、線程讓步以及線程的優(yōu)先級,非常的詳細,希望能對大家有所幫助
    2014-10-10

最新評論