使用IRONPDF 如何在 C# 中從 PDF 文件中提取表格數據 Curtis Chau 更新:2025年6月22日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 在許多行業中,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 。 How to Extract Table Data from a PDF File in C 在探討IronPDF如何完成這項任務之前,讓我們先來了解一下能夠處理 PDF 擷取的線上工具。 若要使用線上 PDF 工具從 PDF 文件中提取表格,請按照以下步驟操作: 存取免費的線上 PDF 擷取工具 上傳包含表格的PDF文件 查看和下載結果 第一步:造訪免費線上PDF擷取工具 今天,我們將以Docsumo為例,介紹我們的線上 PDF 工具。 Docsumo 是一個線上 PDF 文件 AI 工具,提供免費的 PDF 表格擷取工具。 第二步:上傳包含表格的PDF文件 現在,點擊"上傳檔案"按鈕,上傳您的PDF檔案進行擷取。 該工具將立即開始處理您的PDF文件。 第三步:查看和下載結果 Docsumo 完成 PDF 處理後,將顯示提取的表格。 然後您可以對錶格結構進行調整,例如新增和刪除行。 在這裡,您可以將表格下載為 PDF、XLS、JSON 或文字格式。 使用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 在這個例子中,我們使用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 在這個例子中,我們按照先前的步驟載入了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 範例文件 輸出 CSV 檔案 如您所見,我們已成功將 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 文件來匯出此數據。 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 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 相關文章 更新2026年3月1日 如何在.NET中使用IronPDF創建PDF檔案(C#教程) 發現用於創建C# PDF文件的有效方法,提升您的編碼技能並簡化您的項目。立即閱讀文章! 閱讀更多 更新2026年2月27日 如何在C#中合併PDF文件 使用 IronPDF 合併 PDF 文件。學習如何使用簡單的 VB.NET 程式碼將多個 PDF 文件合併成一個文檔。包含逐步範例。 閱讀更多 更新2026年3月1日 C# PDFWriter教程,適用於.NET 10開發者 通過這個面向開發人員的逐步指南,學習如何使用C# PDFWriter高效創建PDF。閱讀本文以提高您的技能! 閱讀更多 如何製作C# PDF轉換器如何使用C#在ASP .NET中將HTML...