跳至頁尾內容
使用 IRONPDF

如何使用 C# 從 PDF 文件中提取表格數據

在許多行業中,PDF 文件是共享結構化文件(如報告、發票和資料表)的首選格式。 然而,由於 PDF 格式的特性,從 PDF 中提取數據,尤其是表格數據,可能具有挑戰性。 與結構化資料格式不同,PDF 主要用於演示,而不是資料擷取。

但是,借助功能強大的 C# PDF .NET 庫IronPDF ,您可以輕鬆地直接從 PDF 中提取結構化資料(例如表格),並在您的 .NET 應用程式中處理它們。 本文將一步步指導您如何使用 IronPDF 從 PDF 文件中提取表格資料。

什麼情況下需要從PDF文件中提取表格?

表格是一種方便的資料結構化和展示方式,無論是進行庫存管理、資料輸入,或是記錄降雨量等資料。因此,也有很多原因需要從 PDF 文件中提取表格和表格資料。 一些最常見的應用場景包括:

*資料輸入自動化:*從 PDF 報表或發票中的表格擷取資料可以自動執行填入資料庫或電子表格等流程。 資料分析:企業經常收到 PDF 格式的結構化報告。 提取表格可以讓您以程式設計方式分析這些數據。 文件轉換:將表格資料提取為 Excel 或 CSV 等更易於存取的格式,可以更輕鬆地進行操作、儲存和共用。 審計和合規性:**對於法律或財務記錄,透過程式設計方式從 PDF 文件中提取表格資料可以幫助自動化審計並確保合規性。

PDF表格是如何運作的?

PDF 文件格式本身並不具備以表格等結構化格式儲存資料的功能。 今天範例中使用的表格是用 HTML 建立的,然後轉換為 PDF 格式。 表格以文字和線條的形式呈現,因此提取表格資料通常需要對內容進行一些解析和解釋,除非您使用 OCR 軟體,例如IronOCR

如何使用 C# 從 PDF 文件中提取表格數據

在探討 IronPDF 如何完成這項任務之前,讓我們先來了解能夠處理 PDF 擷取的線上工具。 若要使用線上 PDF 工具從 PDF 文件中提取表格,請按照以下步驟操作:

  1. 存取免費的線上 PDF 擷取工具
  2. 上傳包含表格的PDF文件
  3. 查看和下載結果

第一步:造訪免費線上PDF擷取工具

今天,我們將以Docsumo為例,介紹我們的線上 PDF 工具。 Docsumo 是一個線上 PDF 文件 AI 工具,提供免費的 PDF 表格擷取工具。

如何在 C# 中從 PDF 文件中提取表格資料:圖 1

第二步:上傳包含表格的PDF文件

現在,點擊"上傳檔案"按鈕,上傳您的PDF檔案進行擷取。 該工具將立即開始處理您的PDF文件。

如何在 C# 中從 PDF 文件中提取表格資料:圖 2

第三步:查看和下載結果

Docsumo 完成 PDF 處理後,將顯示提取的表格。 然後您可以對錶格結構進行調整,例如新增和刪除行。 在這裡,您可以將表格下載為 PDF、XLS、JSON 或文字格式。

如何在 C# 中從 PDF 檔案中提取表格資料:圖 3

使用 IronPDF 擷取表格數據

IronPDF 允許您從 PDF 中提取數據、文本和圖形,然後用於程式化地重建表格。 為此,您首先需要從 PDF 中的表格中提取文字內容,然後使用該文字將表格解析為行和列。 在開始提取表格之前,讓我們先來看看 IronPDF 的ExtractAllText()方法是如何提取表格中的資料的:

using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("example.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Output the extracted text to the console
        Console.WriteLine(text);
    }
}
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("example.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Output the extracted text to the console
        Console.WriteLine(text);
    }
}
$vbLabelText   $csharpLabel

如何在 C# 中從 PDF 檔案中提取表格資料:圖 4

在這個例子中,我們使用PdfDocument類加載了 PDF 文檔,然後使用ExtractAllText()方法提取文檔中的所有文本,最後將文本顯示在控制台上。

使用 IronPDF 從文字中擷取表格數據

從 PDF 中提取文字後,表格將以純文字的形式顯示為一系列行和列。 您可以根據換行符號 ( \n ) 拆分此文本,然後根據一致的間距或分隔符號(例如逗號或製表符)將行進一步拆分為列。 以下是一個從文本中解析表格的基本範例:

using IronPDF;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("table.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Split the text into lines (rows)
        string[] lines = text.Split('\n');

        foreach (string line in lines)
        {
            // Split the line into columns using the tab character
            string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
            Console.WriteLine("Row:");

            foreach (string column in columns)
            {
                Console.WriteLine("  " + column); // Output each column in the row
            }
        }
    }
}
using IronPDF;
using System;
using System.Linq;

class Program
{
    static void Main(string[] args)
    {
        // Load the PDF document
        PdfDocument pdf = PdfDocument.FromFile("table.pdf");

        // Extract all text from the PDF
        string text = pdf.ExtractAllText();

        // Split the text into lines (rows)
        string[] lines = text.Split('\n');

        foreach (string line in lines)
        {
            // Split the line into columns using the tab character
            string[] columns = line.Split('\t').Where(col => !string.IsNullOrWhiteSpace(col)).ToArray();
            Console.WriteLine("Row:");

            foreach (string column in columns)
            {
                Console.WriteLine("  " + column); // Output each column in the row
            }
        }
    }
}
$vbLabelText   $csharpLabel

如何在 C# 中從 PDF 檔案中提取表格資料:圖 5

在這個例子中,我們按照先前的步驟載入了PDF文件並提取了文字。 然後,使用text.Split('\n')將提取的文字按換行符拆分為行,並將結果儲存在lines數組中。 然後使用 foreach 迴圈遍歷數組中的行,其中line.Split('\t')使用製表符'\t'作為分隔符號將行進一步拆分為列。 列數組的下一部分, Where(col => !string.IsNullOrWhiteSpace(col)).ToArray()會過濾掉由於額外空格而可能出現的空列,然後將這些列添加到列數組中。

最後,我們將文字以基本的行和列結構寫入控制台輸出視窗。

將提取的表格資料匯出為 CSV 文件

現在我們已經了解如何從 PDF 文件中提取表格,接下來讓我們看看可以用提取的數據做什麼。 將匯出的表格匯出為 CSV 檔案是處理表格資料和自動化資料輸入等任務的有效方法。 在這個例子中,我們用模擬資料填充了一個表格,在本例中是一週的每日降雨量,從 PDF 中提取了該表格,然後將其匯出為 CSV 檔案。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        string pdfPath = "table.pdf";
        string csvPath = "output.csv";

        // Extract and parse table data
        var tableData = ExtractTableDataFromPdf(pdfPath);

        // Write the extracted data to a CSV file
        WriteDataToCsv(tableData, csvPath);
        Console.WriteLine($"Data extracted and saved to {csvPath}");
    }

    static List<string[]> ExtractTableDataFromPdf(string pdfPath)
    {
        var pdf = PdfDocument.FromFile(pdfPath);

        // Extract text from the first page
        var text = pdf.ExtractTextFromPage(0); 
        var rows = new List<string[]>();

        // Split text into lines (rows)
        var lines = text.Split('\n');

        // Variable to hold column values temporarily
        var tempColumns = new List<string>();

        foreach (var line in lines)
        {
            var trimmedLine = line.Trim();

            // Check for empty lines or lines that don't contain table data
            if (string.IsNullOrEmpty(trimmedLine) || trimmedLine.Contains("Header"))
            {
                continue;
            }

            // Split line into columns. Adjust this based on how columns are separated.
            var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

            if (columns.Length > 0)
            {
                // Add columns to temporary list
                tempColumns.AddRange(columns);
                rows.Add(tempColumns.ToArray());
                tempColumns.Clear(); // Clear temporary list after adding to rows
            }
        }

        return rows;
    }

    static void WriteDataToCsv(List<string[]> data, string csvPath)
    {
        using (var writer = new StreamWriter(csvPath))
        {
            foreach (var row in data)
            {
                // Join columns with commas and quote each field to handle commas within data
                var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
                writer.WriteLine(csvRow);
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using IronPDF;

class Program
{
    static void Main(string[] args)
    {
        string pdfPath = "table.pdf";
        string csvPath = "output.csv";

        // Extract and parse table data
        var tableData = ExtractTableDataFromPdf(pdfPath);

        // Write the extracted data to a CSV file
        WriteDataToCsv(tableData, csvPath);
        Console.WriteLine($"Data extracted and saved to {csvPath}");
    }

    static List<string[]> ExtractTableDataFromPdf(string pdfPath)
    {
        var pdf = PdfDocument.FromFile(pdfPath);

        // Extract text from the first page
        var text = pdf.ExtractTextFromPage(0); 
        var rows = new List<string[]>();

        // Split text into lines (rows)
        var lines = text.Split('\n');

        // Variable to hold column values temporarily
        var tempColumns = new List<string>();

        foreach (var line in lines)
        {
            var trimmedLine = line.Trim();

            // Check for empty lines or lines that don't contain table data
            if (string.IsNullOrEmpty(trimmedLine) || trimmedLine.Contains("Header"))
            {
                continue;
            }

            // Split line into columns. Adjust this based on how columns are separated.
            var columns = trimmedLine.Split(new[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries);

            if (columns.Length > 0)
            {
                // Add columns to temporary list
                tempColumns.AddRange(columns);
                rows.Add(tempColumns.ToArray());
                tempColumns.Clear(); // Clear temporary list after adding to rows
            }
        }

        return rows;
    }

    static void WriteDataToCsv(List<string[]> data, string csvPath)
    {
        using (var writer = new StreamWriter(csvPath))
        {
            foreach (var row in data)
            {
                // Join columns with commas and quote each field to handle commas within data
                var csvRow = string.Join(",", row.Select(field => $"\"{field.Replace("\"", "\"\"")}\""));
                writer.WriteLine(csvRow);
            }
        }
    }
}
$vbLabelText   $csharpLabel

PDF 範例文件

如何在 C# 中從 PDF 文件中提取表格資料:圖 6

輸出 CSV 檔案

如何在 C# 中從 PDF 文件中提取表格資料:圖 7

如您所見,我們已成功將 PDF 表格匯出為 CSV 檔案。首先,我們載入了包含表格的 PDF 文件,並建立了一個新的 CSV 文件路徑。 之後,我們使用var tableData = ExtractTableDataFromPdf(pdfPath)行提取表格,該行稱為ExtractTableDataFromPdf()方法。 此方法提取表格所在的 PDF 頁面上的所有文本,並將其儲存在文本變數中。

然後,我們將文字分成行和列。 最後,在傳回此拆分過程的結果後,我們呼叫靜態方法 void WriteDataToCsv() ,該方法接受提取的拆分文本,並使用StreamWriter將其寫入我們的 CSV 檔案。

技巧和最佳實踐

在使用 PDF 表格時,遵循一些基本的最佳實踐可以幫助最大限度地減少遇到任何錯誤或問題的可能性。

*預處理 PDF:*如果可能,請預處理您的 PDF 文件,以確保格式一致,從而簡化提取過程。 驗證數據:務必驗證提取的數據,以確保其準確性和完整性。 處理錯誤:實作錯誤處理,以管理文字擷取或解析失敗的情況,例如將程式碼包裝在 try-catch 區塊中。 最佳化效能:**對於大型 PDF 文件,考慮最佳化文字擷取和解析以解決效能問題。

IronPDF 授權。

IronPDF 提供不同的許可選項,讓您在購買許可證之前親自體驗 IronPDF 的所有強大功能。

結論

使用IronPDF從 PDF 中提取表格是一種強大的方法,可以自動提取資料、方便分析,並將文件轉換為更容易存取的格式。 無論是處理簡單的表格還是複雜、不規則的格式,IronPDF 都提供了高效提取和處理表格資料所需的工具。

透過 IronPDF,您可以簡化自動化資料輸入、文件轉換和資料分析等工作流程。 IronPDF 的靈活性和高級功能使其成為處理各種基於 PDF 的任務的寶貴工具。

常見問題解答

如何使用 C# 從 PDF 擷取表格?

您可以使用 IronPDF 從 C# 中的 PDF 文件中提取表格。使用 IronPDF 載入 PDF 文件,提取文本,然後以程式設計方式將文本解析為行和列。

為什麼從PDF文件中提取表格資料很困難?

PDF文件主要用於展示而非資料結構,這使得提取表格等結構化資料頗具挑戰性。 IronPDF等工具可以幫助我們有效地解析和提取這些數據。

從PDF文件中提取表格有什麼好處?

從 PDF 中提取表格有助於實現資料輸入自動化、執行資料分析、將文件轉換為更易於存取的格式,並確保審計流程的合規性。

如何處理PDF擷取中複雜的表格格式?

IronPDF 能夠從複雜且不規則的表格格式中提取和處理表格數據,確保準確提取數據。

如何將提取的 PDF 表格資料轉換為 CSV 檔案?

使用 IronPDF 從 PDF 中提取和解析表格資料後,您可以使用StreamWriter將解析後的資料寫入 CSV 文件,從而將此資料匯出到 CSV 文件。

提取PDF表格的最佳實務有哪些?

對 PDF 文件進行預處理,使其格式一致,驗證提取的數據,實現錯誤處理,並優化處理大型 PDF 文件時的效能。

IronPDF能否協助進行審計和合規性工作?

是的,IronPDF 可以從 PDF 中提取表格資料並將其轉換為 Excel 或 CSV 等格式,透過讓資料更容易存取以進行審查和分析,從而幫助進行審計和合規性工作。

IronPDF提供哪些授權許可選項?

IronPDF 提供多種授權選項,包括試用版,因此您可以在購買完整授權之前探索其功能。

從 PDF 檔案中提取表格時,可能會出現哪些常見的故障排除場景?

常見問題包括表格格式不一致和文字擷取錯誤。 IronPDF 的強大功能可提供精準的解析能力,從而幫助緩解這些問題。

IronPDF 是否完全相容於 .NET 10?它如何使表格提取工作流程受益?

是的——IronPDF 支援 .NET 10(以及 .NET 9、8、7、6、Core、Standard 和 Framework),這意味著您可以在最新的 .NET 10 專案中使用它,而無需擔心配置問題。基於 .NET 10 建置專案的開發人員可以受益於執行時間效能的提升,例如減少記憶體分配和增強的 JIT 編譯器最佳化,這些都有助於加快 PDF 處理和表格擷取操作。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。