如何在 C# 讀取 PDF 表格
從 PDF 文件中提取結構化表格資料是 C# 開發人員經常需要做的事情,對於資料分析、報告或將資訊整合到其他系統中至關重要。 然而,PDF 的主要設計目的是為了實現一致的視覺呈現,而不是直接提取資料。 這使得在 C# 中以程式設計方式從 PDF 文件中讀取表格成為一項具有挑戰性的任務,尤其是表格可能千差萬別——從簡單的基於文字的網格到具有合併單元格的複雜佈局,甚至是作為圖像嵌入在掃描文件中的表格。
本指南提供了一個全面的 C# 教程,介紹如何使用 IronPDF 提取 PDF 表格。 我們將主要探索如何利用 IronPDF 強大的文字擷取功能來存取和解析基於文字的 PDF 中的表格資料。 我們將討論該方法的有效性,提供解析策略,並就如何處理提取的資訊提供見解。 此外,我們還將探討應對更複雜情況的策略,包括掃描的 PDF 檔案。
使用 C# 從 PDF 提取表格資料的關鍵步驟
- 安裝 IronPDF C# 庫( https://nuget.org/packages/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 庫解決方案 ( https://ironpdf.com/ ),它可以幫助開發人員在其軟體應用程式中輕鬆讀取、建立和編輯 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,然後按一下"建立新專案" 。
如何在 C# 中讀取 PDF 表格,圖 1:Visual Studio 的開始畫面 Visual Studio 的開始畫面
選擇"控制台應用程式"(或您喜歡的 C# 項目類型),然後按一下"下一步" 。
如何在 C# 中讀取 PDF 表格,圖 2:在 Visual Studio 中建立一個新的控制台應用程式 在 Visual Studio 中建立一個新的控制台應用程式
為你的專案命名(例如,"ReadPDFTableDemo"),然後按一下"下一步" 。 如何在 C# 中讀取 PDF 表格,圖 3:配置新建立的應用程式 配置新建立的應用程式
選擇您所需的 .NET Framework 版本(例如,.NET 6 或更高版本)。 如何在 C# 中讀取 PDF 表格,圖 4:選擇 .NET Framework 選擇 .NET Framework
- 點選"建立" 。 控制台專案將被建立。
3.安裝 IronPDF:
*使用 Visual Studio NuGet 套件管理器:
在解決方案資源管理器中右鍵單擊您的項目,然後選擇"管理 NuGet 套件..."
[如何在 C# 中讀取 PDF 表格,圖 5:工具和管理 NuGet 套件](/static-assets/pdf/blog/csharp-read-pdf-table-tutorial/csharp-read-pdf-table-tutorial-5.webp)
**工具與管理 NuGet 套件**
* 在 NuGet 套件管理員中,瀏覽至"IronPdf",然後按一下"安裝"。
[如何在 C# 中讀取 PDF 表格,圖 6:工具和管理 NuGet 套件](/static-assets/pdf/blog/csharp-read-pdf-table-tutorial/csharp-read-pdf-table-tutorial-6.webp)
**工具與管理 NuGet 套件***直接下載 NuGet 套件:*造訪 IronPDF 的 NuGet 套件頁面( https://www.nuget.org/packages/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";以下是範例表格的 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>";現在,使用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.");SaveAs方法用於儲存 PDF 檔案。 產生的table_example.pdf檔案將如下所示(基於 HTML 的概念圖):
如何在 C# 中讀取 PDF 表格,圖 7:在 NuGet 套件管理器 UI 中搜尋 IronPDF 在 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();allText變數現在保存了 PDF 中的所有文字內容。 您可以將其顯示出來以查看原始提取結果:
Console.WriteLine("\n--- Raw Extracted Text ---");
Console.WriteLine(allText);Console.WriteLine("\n--- Raw Extracted Text ---");
Console.WriteLine(allText);如何在 C# 中讀取 PDF 表格,圖 8:要提取文字的 PDF 文件 要提取文字的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
}
}這段程式碼將文字分割成行。 if條件是一個非常基本的篩選器,適用於本範例中的非表格文字。 在實際應用中,您需要更強大的邏輯來準確識別和解析表格的行和單元格。
簡單過濾後的文字輸出:
如何在 C# 中讀取 PDF 表格,圖 9:控制台顯示提取的文本 控制台顯示提取的文字。
文本解析方法的重要考慮因素:
*最適合:*具有簡單、一致的表格結構和清晰的文字分隔符號的文字型 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");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);
}如需詳細指導,請造訪 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.*模式識別和正規表示式:對於具有非常可預測的模式但分隔符號不一致的表格,對提取的文字應用複雜的正規表示式有時可以隔離表格資料。
選擇合適的策略取決於來源 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 應用程式中無需修改即可運行。







