使用IRONPDF 如何在C#中讀取PDF表格 Curtis Chau 更新:2026年1月18日 下載 IronPDF NuGet 下載 DLL 下載 Windows Installer 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 從 PDF 文件中提取結構化表格資料是 C# 開發人員經常需要做的事情,對於資料分析、報告或將資訊整合到其他系統至關重要。 然而,PDF 的主要設計目的是為了實現一致的視覺呈現,而不是直接提取資料。 這使得在 C# 中以程式設計方式從 PDF 文件中讀取表格成為一項具有挑戰性的任務,尤其是表格可能千差萬別——從簡單的基於文字的網格到具有合併單元格的複雜佈局,甚至是作為圖像嵌入在掃描文件中的表格。 本指南提供了一個全面的 C# 教程,介紹如何使用IronPDF提取 PDF 表格。 我們將主要探索如何利用 IronPDF 強大的文字擷取功能來存取和解析基於文字的 PDF 中的表格資料。 我們將討論該方法的有效性,提供解析策略,並就如何處理提取的資訊提供見解。 此外,我們還將探討應對更複雜情況的策略,包括掃描的 PDF 檔案。 使用 C# 從 PDF 提取表格資料的關鍵步驟 安裝IronPDF C# 庫( IronPDF )以進行 PDF 處理。 2.(可選示範步驟)使用 IronPDF 的 RenderHtmlAsPdf 從 HTML 字串建立一個包含表格的範例 PDF。 (請參閱"(示範步驟)建立包含表格資料的 PDF 文件"部分) 載入任何 PDF 文檔,並使用 ExtractAllText 方法檢索其原始文字內容。 (See section: Extract All Text Containing Table Data from the PDF) 實作 C# 邏輯來解析擷取的文字並辨識表格行和儲存格。 (See section: Parsing Extracted Text to Reconstruct Table Data in C#) 輸出結構化表格資料或將其儲存到 CSV 檔案以供進一步使用。 (See section: Parsing Extracted Text to Reconstruct Table Data in C#) 考慮使用 OCR 等高階技術處理掃描的 PDF 檔案(稍後討論)。 IronPDF - C# PDF 庫 IronPDF是一個用於在.NET中操作 PDF 的 C# .NET庫解決方案 ( IronPDF ),它可以幫助開發人員在其軟體應用程式中輕鬆讀取、建立和編輯 PDF 文件。 它強大的 Chromium 引擎能夠以高精度和高速度將 HTML 文件渲染成 PDF 文件。 它允許開發人員無縫地將不同格式的文件轉換為 PDF 格式,反之亦然。 它支援最新的.NET框架,包括.NET 7、 .NET 6、.NET 5、.NET 4、 .NET Core和 .NET Standard。 此外, IronPDF .NET API 還使開發人員能夠輕鬆地操作和編輯 PDF,添加頁眉和頁腳,更重要的是,還能從 PDF 中提取文字、圖像以及(我們將看到的)表格資料。 一些重要功能包括: 從各種來源建立 PDF 檔案( HTML 轉 PDF ,圖像轉 PDF ) 載入、儲存和列印 PDF 文件 合併和拆分 PDF 文件 從 PDF 文件中提取數據(文字、圖像和結構化數據,例如表格) 使用IronPDF庫在 C# 中擷取表格資料的步驟 為了從 PDF 文件中提取表格數據,我們將建立一個 C# 專案: Visual Studio:確保您已安裝 Visual Studio(例如,2022)。 如果沒有,請從 Visual Studio 網站( https://visualstudio.microsoft.com/downloads/ )下載。 2.創建專案: 開啟 Visual Studio 2022,然後按一下"建立新專案" 。 Visual Studio 的開始畫面 選擇"控制台應用程式"(或您喜歡的 C# 項目類型),然後按一下"下一步" 。 在 Visual Studio 中建立一個新的控制台應用程式 為你的專案命名(例如,"ReadPDFTableDemo"),然後按一下"下一步" 。 配置新建立的應用程式 選擇您所需的.NET Framework(例如, .NET 6 或更高版本)。 選擇.NET Framework 點選"建立" 。 控制台專案將被建立。 3.安裝IronPDF: *使用 Visual Studio NuGet套件管理器: 在解決方案資源管理器中右鍵單擊您的項目,然後選擇"管理NuGet套件..."  **工具與管理NuGet程式包** * 在NuGet套件管理員中,瀏覽至"IronPDF",然後按一下"安裝"。  **工具與管理NuGet程式包** *直接下載NuGet套件:*造訪 IronPDF 的NuGet套件頁面( IronPDF ) 。 下載IronPDF .DLL 庫:**從IronPDF官方網站下載,並在您的專案中引用該 DLL。 (示範步驟)建立包含表格資料的 PDF 文檔 在本教程中,我們將首先根據 HTML 字串建立一個包含簡單表格的範例 PDF。 這為我們提供了一個已知的 PDF 結構,可以用來示範提取過程。 在實際應用中,你會載入你預先存在的 PDF 檔案。 新增IronPDF命名空間,並可選擇設定您的許可證金鑰(IronPDF可免費用於開發,但若要進行無浮水印的商業部署,則需要許可證): using IronPdf; using System; // For StringSplitOptions, Console using System.IO; // For StreamWriter // Apply your license key if you have one. Otherwise, IronPDF runs in trial mode. // License.LicenseKey = "YOUR-TRIAL/PURCHASED-LICENSE-KEY"; using IronPdf; using System; // For StringSplitOptions, Console using System.IO; // For StreamWriter // Apply your license key if you have one. Otherwise, IronPDF runs in trial mode. // License.LicenseKey = "YOUR-TRIAL/PURCHASED-LICENSE-KEY"; $vbLabelText $csharpLabel 以下是範例表格的 HTML 程式碼: string HTML = "<html>" + "<style>" + "table, th, td {" + "border:1px solid black;" + "}" + "</style>" + "<body>" + "<h1>A Simple table example</h1>" + // Corrected typo: h1 not h2 "<table>" + "<tr>" + "<th>Company</th>" + "<th>Contact</th>" + "<th>Country</th>" + "</tr>" + "<tr>" + "<td>Alfreds Futterkiste</td>" + "<td>Maria Anders</td>" + "<td>Germany</td>" + "</tr>" + "<tr>" + "<td>Centro comercial Moctezuma</td>" + "<td>Francisco Chang</td>" + "<td>Mexico</td>" + "</tr>" + "</table>" + "<p>To understand the example better, we have added borders to the table.</p>" + "</body>" + "</html>"; string HTML = "<html>" + "<style>" + "table, th, td {" + "border:1px solid black;" + "}" + "</style>" + "<body>" + "<h1>A Simple table example</h1>" + // Corrected typo: h1 not h2 "<table>" + "<tr>" + "<th>Company</th>" + "<th>Contact</th>" + "<th>Country</th>" + "</tr>" + "<tr>" + "<td>Alfreds Futterkiste</td>" + "<td>Maria Anders</td>" + "<td>Germany</td>" + "</tr>" + "<tr>" + "<td>Centro comercial Moctezuma</td>" + "<td>Francisco Chang</td>" + "<td>Mexico</td>" + "</tr>" + "</table>" + "<p>To understand the example better, we have added borders to the table.</p>" + "</body>" + "</html>"; HTML 現在,使用 ChromePdfRenderer 從這段 HTML 程式碼建立 PDF 檔案: var renderer = new ChromePdfRenderer(); PdfDocument pdfDocument = renderer.RenderHtmlAsPdf(HTML); pdfDocument.SaveAs("table_example.pdf"); Console.WriteLine("Sample PDF 'table_example.pdf' created."); var renderer = new ChromePdfRenderer(); PdfDocument pdfDocument = renderer.RenderHtmlAsPdf(HTML); pdfDocument.SaveAs("table_example.pdf"); Console.WriteLine("Sample PDF 'table_example.pdf' created."); $vbLabelText $csharpLabel SaveAs 方法保存 PDF。 產生的 table_example.pdf 將如下所示(基於 HTML 的概念圖): 在NuGet套件管理器 UI 中搜尋IronPDF 從PDF文件中提取所有包含表格資料的文字。 要提取表格數據,我們首先載入 PDF(可以是剛剛建立的 PDF,也可以是任何現有的 PDF),然後使用 ExtractAllText 方法。 此方法從 PDF 頁面中提取所有文字內容。 // Load the PDF (if you just created it, it's already loaded in pdfDocument) // If loading an existing PDF: // PdfDocument pdfDocument = PdfDocument.FromFile("table_example.pdf"); // Or use the one created above: string allText = pdfDocument.ExtractAllText(); // Load the PDF (if you just created it, it's already loaded in pdfDocument) // If loading an existing PDF: // PdfDocument pdfDocument = PdfDocument.FromFile("table_example.pdf"); // Or use the one created above: string allText = pdfDocument.ExtractAllText(); $vbLabelText $csharpLabel allText 變數現在保存了 PDF 中的所有文字內容。 您可以將其顯示出來以查看原始提取結果: Console.WriteLine("\n--- Raw Extracted Text ---"); Console.WriteLine(allText); Console.WriteLine("\n--- Raw Extracted Text ---"); Console.WriteLine(allText); $vbLabelText $csharpLabel 要提取文字的PDF文件 使用 C# 解析提取的文字以重建表格數據 提取出原始文字後,下一個挑戰是解析該字串以識別和建立表格資料。 這步驟很大程度取決於PDF文件中表格的一致性和格式。 通用解析策略: 1.識別行分隔符號:換行符號(\n 或 \r\n)是常見的行分隔符號。 2.識別列分隔符號:一行中的儲存格可能由多個空格、製表符或特定的已知字元(例如"'")分隔。|' 或 ';')。 有時,如果列在視覺上對齊,但缺少清晰的文字分隔符,您可以根據一致的間距模式推斷結構,儘管這更複雜。 3.過濾非表格內容: ExtractAllText 方法取得所有文字。 你需要運用邏輯來提取實際構成表格的文本,例如尋找標題關鍵字或跳過前言/後言文本。 C# 的 String.Split 方法是實現此功能的基本工具。 以下範例嘗試從我們的樣本中僅提取表格行,並過濾掉包含句點的行(這是針對此特定範例的簡單啟發式方法): Console.WriteLine("\n--- Parsed Table Data (Simple Heuristic) ---"); string[] textLines = allText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string line in textLines) { // Simple filter: skip lines with a period, assuming they are not table data in this example // and skip lines that are too short or headers if identifiable if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5) { continue; } else { // Further split line into cells based on expected delimiters (e.g., multiple spaces) // This part requires careful adaptation to your PDF's table structure // Example: string[] cells = line.Split(new[] { " ", "\t" }, StringSplitOptions.None); Console.WriteLine(line); // For now, just print the filtered line } } Console.WriteLine("\n--- Parsed Table Data (Simple Heuristic) ---"); string[] textLines = allText.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (string line in textLines) { // Simple filter: skip lines with a period, assuming they are not table data in this example // and skip lines that are too short or headers if identifiable if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5) { continue; } else { // Further split line into cells based on expected delimiters (e.g., multiple spaces) // This part requires careful adaptation to your PDF's table structure // Example: string[] cells = line.Split(new[] { " ", "\t" }, StringSplitOptions.None); Console.WriteLine(line); // For now, just print the filtered line } } $vbLabelText $csharpLabel 這段程式碼將文字分割成行。 if 條件是針對此特定範例中的非表格文字的一個非常基本的篩選器。 在實際應用中,您需要更強大的邏輯來準確識別和解析表格的行和單元格。 簡單過濾後的文字輸出: 控制台顯示提取的文字。 文本解析方法的重要考慮因素: *最適合:*具有簡單、一致的表格結構和清晰的文字分隔符號的文字型 PDF。 局限性:**此方法可能難以應對以下情況: 包含合併儲存格或複雜巢狀結構的表格。 表格中列是透過視覺間距而不是文字分隔符號來定義的。 表格以影像形式嵌入(需要 OCR)。 PDF 產生過程中的差異導致文字擷取順序不一致。 您可以將篩選後的行(理想情況下代表表格行)儲存到 CSV 檔案中: using (StreamWriter file = new StreamWriter("parsed_table_data.csv", false)) { file.WriteLine("Company,Contact,Country"); // Write CSV Header foreach (string line in textLines) { if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5) { continue; } else { // For a real CSV, you'd split 'line' into cells and join with commas // E.g., string[] cells = line.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); // string csvLine = string.Join(",", cells); // file.WriteLine(csvLine); file.WriteLine(line.Replace(" ", ",").Trim()); // Basic replacement for this example } } } Console.WriteLine("\nFiltered table data saved to parsed_table_data.csv"); using (StreamWriter file = new StreamWriter("parsed_table_data.csv", false)) { file.WriteLine("Company,Contact,Country"); // Write CSV Header foreach (string line in textLines) { if (line.Contains(".") || line.Contains("A Simple table example") || line.Length < 5) { continue; } else { // For a real CSV, you'd split 'line' into cells and join with commas // E.g., string[] cells = line.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); // string csvLine = string.Join(",", cells); // file.WriteLine(csvLine); file.WriteLine(line.Replace(" ", ",").Trim()); // Basic replacement for this example } } } Console.WriteLine("\nFiltered table data saved to parsed_table_data.csv"); $vbLabelText $csharpLabel C#中更複雜的PDF表格擷取策略 從複雜的或基於圖像的 PDF 表格中提取資料通常需要比簡單的文字解析更高級的技術。 IronPDF提供以下功能: *使用 IronOCR 對掃描表格的功能:如果表格位於影像中(例如,掃描的 PDF),則僅使用 ExtractAllText() 無法擷取它們。 IronOCR的文字偵測功能可以先將這些影像轉換為文字。 // Conceptual OCR usage (refer to IronOCR's documentation for detailed implementation) // Install Package IronOcr using IronOcr; using (var ocrInput = new OcrInput("scanned_pdf_with_table.pdf")) { ocrInput.TargetDPI = 300; // Good DPI for OCR accuracy var ocrResult = new IronOcr().Read(ocrInput); string ocrExtractedText = ocrResult.Text; // Now, apply parsing logic to 'ocrExtractedText' Console.WriteLine("\n--- OCR Extracted Text for Table Parsing ---"); Console.WriteLine(ocrExtractedText); } // Conceptual OCR usage (refer to IronOCR's documentation for detailed implementation) // Install Package IronOcr using IronOcr; using (var ocrInput = new OcrInput("scanned_pdf_with_table.pdf")) { ocrInput.TargetDPI = 300; // Good DPI for OCR accuracy var ocrResult = new IronOcr().Read(ocrInput); string ocrExtractedText = ocrResult.Text; // Now, apply parsing logic to 'ocrExtractedText' Console.WriteLine("\n--- OCR Extracted Text for Table Parsing ---"); Console.WriteLine(ocrExtractedText); } $vbLabelText $csharpLabel 如需詳細指導,請造訪IronOCR文件(https://ironsoftware.com/csharp/ocr/ )。 OCR辨識之後,你需要解析得到的文字字串。 *基於座標的文字擷取(進階):雖然 IronPDF 的 ExtractAllText() 提供了文字流,但在某些情況下,了解每個文字片段的 x、y 座標可能會有所幫助。 如果IronPDF提供 API 來取得具有邊界框資訊的文字(請查看目前文件),這將允許進行更複雜的空間解析,以根據視覺對齊方式重建表格。 *將 PDF 轉換為其他格式: IronPDF可以將 PDF 轉換為 HTML 等結構化格式。 通常情況下,解析 HTML 表格比解析原始 PDF 文字更直接。 PdfDocument pdfToConvert = PdfDocument.FromFile("your_document.pdf"); string htmlOutput = pdfToConvert.ToHtmlString(); // Then use an HTML parsing library (e.g., HtmlAgilityPack) to extract tables from htmlOutput. PdfDocument pdfToConvert = PdfDocument.FromFile("your_document.pdf"); string htmlOutput = pdfToConvert.ToHtmlString(); // Then use an HTML parsing library (e.g., HtmlAgilityPack) to extract tables from htmlOutput. $vbLabelText $csharpLabel *模式識別和正規表示式:對於具有非常可預測的模式但分隔符號不一致的表格,對提取的文字應用複雜的正規表示式有時可以隔離表格資料。 選擇合適的策略取決於來源 PDF 的複雜性和一致性。 對於許多包含文字表格的常見商務文檔,IronPDF 的 ExtractAllText 功能結合智慧 C# 解析邏輯非常有效。而對於影像表格,其 OCR 功能則至關重要。 概括 本文示範如何使用IronPDF從 C# 中的 PDF 文件中提取表格數據,主要專注於利用 ExtractAllText() 方法和後續的字串解析。 我們已經看到,雖然這種方法對於基於文字的表格非常有效,但對於更複雜的場景(例如基於圖像的表格),可以使用 IronPDF 的 OCR 功能或先將 PDF 轉換為其他格式來解決。 IronPDF為.NET開發人員提供了一套功能強大的工具包,簡化了許多與 PDF 相關的任務,從創建和編輯到全面的資料提取。 它提供了諸如ExtractTextFromPage之類的頁面特定提取方法,並支援將markdown或DOCX等格式轉換為 PDF。 IronPDF可免費用於開發,並提供免費試用許可證,供用戶測試其全部商業功能。 對於生產環境部署,我們提供多種授權選項。 如需更多詳細資訊和進階用例,請參閱IronPDF官方文件和範例(https://ironpdf.com/ ) 常見問題解答 我可以如何在 C# 中以編程方式從 PDF 文件中讀取表格? 您可以使用 IronPDF 的 `ExtractAllText` 方法從 PDF 文檔中提取原始文本。一旦提取,您可以在 C# 中解析這些文本以識別表格行和單元格,從而允許結構化數據提取。 使用 C# 從 PDF 中提取表格數據涉及哪些步驟? 此過程包括安裝 IronPDF 庫,使用 `ExtractAllText` 方法檢索文本,解析此文本以識別表格,並可選擇將結構化數據保存到 CSV 等格式。 我如何在 C# 中處理帶有表格的掃描 PDF? 對於掃描的 PDF,IronPDF 可以使用 OCR(光學字符識別)將表格圖像轉換為文本,然後可以解析這些文本以提取表格數據。 IronPDF 可以將 PDF 轉換為其他格式以更輕鬆地提取表格嗎? 是的,IronPDF 可以將 PDF 轉換為 HTML,這可以通過允許開發人員使用 HTML 解析技術來簡化表格提取。 IronPDF 適合從複雜 PDF 表格中提取數據嗎? IronPDF 提供高級功能,如 OCR 和基於坐標的文本提取,可以用來處理包含合併單元格或不一致分隔符的複雜表格佈局。 如何將 IronPDF 集成到 .NET Core 應用程序中? IronPDF 與 .NET Core 應用程序兼容。可以通過 Visual Studio 的 NuGet 程序包管理器安裝庫來集成。 在 C# 中使用 IronPDF 進行 PDF 操作的好處是什麼? IronPDF 提供了一系列靈活的功能,包含創建、編輯和從 PDF 中提取數據的支持,包括 OCR 和轉換為各種格式,使其對 .NET 開發人員來說是一個強大的工具。 從 PDF 中提取表格數據時常見的挑戰有哪些? 挑戰包括處理包含合併單元格的複雜表格佈局、作為圖像嵌入的表格和不一致的分隔符,這可能需要高級解析策略或 OCR。 如何開始使用 IronPDF 進行 PDF 處理? 首先通過 NuGet 程序包管理器安裝 IronPDF 庫或從 IronPDF 網站下載。在您的 C# 項目中使用其 PDF 處理功能時,這一步是必需的。 使用 IronPDF 需要許可證嗎? IronPDF 可免費用於開發目的,但需要許可證才能進行商業部署以去除水印。提供免費試用許可證以測試其全部功能。 IronPDF在從PDF中提取表格時是否與.NET 10兼容? 是的。IronPDF 支援 .NET 10 (以及 .NET 9、8、7、6、Core、Standard 和 Framework),因此所有表格提取功能在 .NET 10 應用程式中均可無需修改地運行。 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。閱讀本文以提高您的技能! 閱讀更多 如何將QR碼轉換為PDFC#教程:使用IronPDF構建PDF...