跳至頁尾內容
使用 IRONOCR

PDF 資料擷取 .NET:完整開發者指南

使用 IronPDF,只需幾行程式碼即可在 .NET 中從 PDF 中提取文字、表格、表單和圖像——透過 NuGet 安裝,載入 PDF,然後呼叫ExtractAllText (),即可在 5 分鐘內開始使用。

PDF 文件在商業領域無所不在:發票、報告、合約和手冊。 但透過程式設計從中獲取關鍵資訊可能很棘手。 PDF 文件關注的是內容的呈現方式,而不是資料的存取方式。 對於使用 C# 進行 OCR開發的開發人員來說,處理掃描文件時會面臨獨特的挑戰。

對於 .NET 開發人員來說, IronPDF是一個功能強大的 .NET PDF 程式庫,可以輕鬆地從 PDF 文件中提取資料。 您可以直接從輸入的 PDF 文件中提取文字、表格、表單欄位、圖像和附件。 無論您是自動化發票處理、建立知識庫或產生報告,這個庫都能為您節省大量時間。處理掃描的 PDF 檔案時,您可能還需要PDF OCR 文字擷取功能來處理影像內容。

本指南將引導您完成提取文字內容、表格資料和表單欄位值的實際範例,並在每個程式碼片段後進行解釋,以便您可以將其應用到自己的專案中。 如果您也處理其他文件類型,您可能會發現探索讀取掃描文件將 TIFF 轉換為可搜尋的 PDF很有幫助。

我該如何開始使用 IronPDF?

透過 NuGet 套件管理器安裝 IronPDF 只需幾秒鐘。 開啟軟體包管理器控制台並執行:

Install-Package IronPDF
Install-Package IronPDF
$vbLabelText   $csharpLabel

對於更進階的安裝方案,請查看NuGet 套件文件。 安裝完成後,即可立即開始處理輸入的PDF文件。 以下是一個簡單的 .NET 範例,展示了 IronPDF API 的簡潔性:

using IronPdf;
// Load any PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text with one line
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
using IronPdf;
// Load any PDF document
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text with one line
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
$vbLabelText   $csharpLabel

這段程式碼載入一個PDF檔案並提取其中的每一段文字。 IronPDF 可以自動處理複雜的 PDF 結構、表單資料和編碼,而這些通常會為其他庫帶來問題。 從 PDF 文件中提取的數據可以保存到文字文件,也可以進一步處理以進行分析。 對於更複雜的提取需求,您可能需要探索專門的文件處理技術。

實用技巧:您可以將提取的文字儲存到 .txt 檔案中以便稍後處理,或者解析它以填充資料庫、Excel 表格或知識庫。 這種方法適用於報告、合約或任何需要快速取得原始文字的 PDF 檔案。 對於涉及表格的場景,請考慮學習如何讀取文件中的表格以提取更結構化的資料。

提取出的文字是什麼樣的?

分割畫面顯示:左側是解釋"什麼是 PDF?"的 PDF 文檔,右側是顯示從該 PDF 提取的文字的 Visual Studio 控制台視窗。

如何從特定頁面提取資料?

實際應用中往往需要精確的資料擷取。 IronPDF 提供多種方法,可以從 PDF 中的特定頁面提取有價值的資訊。 這種方法類似於OCR 區域特定提取,但適用於 PDF 文件。 在這個例子中,我們將使用以下PDF文件:

PDF 檢視器顯示的是 2024 年年度報告,其中包含發票總表,表格列出了發票編號、日期和金額,以及部門績效和財務概覽部分。

以下程式碼從該 PDF 中的特定頁面提取數據,並將結果返回到我們的控制台。 處理多頁文件時,您可能會發現多頁 TIFF 處理技術對解決類似問題也很有用。

using IronPdf;
using System;
using System.Text.RegularExpressions;
// Load any PDF document
var pdf = PdfDocument.FromFile("AnnualReport2024.pdf");
// Extract from selected pages
int[] pagesToExtract = { 0, 2, 4 }; // Pages 1, 3, and 5
foreach (var pageIndex in pagesToExtract)
{
    string pageText = pdf.ExtractTextFromPage(pageIndex);
    // Split on 2 or more spaces (tables often flatten into space-separated values)
    var tokens = Regex.Split(pageText, @"\s{2,}");
    foreach (string token in tokens)
    {
        // Match totals, invoice headers, and invoice rows
        if (token.Contains("Invoice") || token.Contains("Total") || token.StartsWith("INV-"))
        {
            Console.WriteLine($"Important: {token.Trim()}");
        }
    }
}
using IronPdf;
using System;
using System.Text.RegularExpressions;
// Load any PDF document
var pdf = PdfDocument.FromFile("AnnualReport2024.pdf");
// Extract from selected pages
int[] pagesToExtract = { 0, 2, 4 }; // Pages 1, 3, and 5
foreach (var pageIndex in pagesToExtract)
{
    string pageText = pdf.ExtractTextFromPage(pageIndex);
    // Split on 2 or more spaces (tables often flatten into space-separated values)
    var tokens = Regex.Split(pageText, @"\s{2,}");
    foreach (string token in tokens)
    {
        // Match totals, invoice headers, and invoice rows
        if (token.Contains("Invoice") || token.Contains("Total") || token.StartsWith("INV-"))
        {
            Console.WriteLine($"Important: {token.Trim()}");
        }
    }
}
$vbLabelText   $csharpLabel

本範例展示如何從 PDF 文件中提取文本,搜尋關鍵訊息,並將其準備儲存到資料檔案或知識庫中。 ExtractTextFromPage()方法可保持文件的閱讀順序,因此非常適合文件分析和內容索引任務。 為了提高準確性,處理低品質 PDF 檔案時,可以考慮使用影像優化濾鏡

Microsoft Visual Studio 偵錯控制台顯示提取的發票數據,包括發票摘要、日期、金額和最終總計 2,230.00 美元。

在處理財務文件時,您可能會受益於財務語言包,以提高專業術語的準確性。 此外,進度追蹤可以幫助監控大批量文件的提取效能。

如何從PDF文件中提取表格?

PDF 檔案中的表格沒有原生結構——它們只是排列成表格形狀的文字內容。 IronPDF 可以提取表格資料並保留佈局,以便您可以將其處理成 Excel 或文字檔案。 這類似於OCR圖形提取,但專門針對表格內容進行了最佳化。 在這個例子中,我們將使用這個PDF檔案:

範例發票,顯示結構化數據,包括客戶詳細資料、產品明細和總金額 180.00 美元。

我們的目標是提取表格本身的數據,以展示 IronPDF 解析表格數據的能力。 對於更高級的表格提取場景,可以探索讀取文件中的表格,它使用機器學習來處理複雜的表格結構。

using IronPdf;
using System;
using System.Text;
using System.Text.RegularExpressions;
var pdf = PdfDocument.FromFile("example.pdf");
string rawText = pdf.ExtractAllText();
// Split into lines for processing
string[] lines = rawText.Split('\n');
var csvBuilder = new StringBuilder();
foreach (string line in lines)
{
    if (string.IsNullOrWhiteSpace(line) || line.Contains("Page"))
        continue;
    string[] rawCells = Regex.Split(line.Trim(), @"\s+");
    string[] cells;
    // If the line starts with "Product", combine first two tokens as product name
    if (rawCells[0].StartsWith("Product") && rawCells.Length >= 5)
    {
        cells = new string[rawCells.Length - 1];
        cells[0] = rawCells[0] + " " + rawCells[1]; // Combine Product + letter
        Array.Copy(rawCells, 2, cells, 1, rawCells.Length - 2);
    }
    else
    {
        cells = rawCells;
    }
    // Keep header or table rows
    bool isTableOrHeader = cells.Length >= 2
                           && (cells[0].StartsWith("Item") || cells[0].StartsWith("Product")
                               || Regex.IsMatch(cells[0], @"^INV-\d+"));
    if (isTableOrHeader)
    {
        Console.WriteLine($"Row: {string.Join("|", cells)}");
        string csvRow = string.Join(",", cells).Trim();
        csvBuilder.AppendLine(csvRow);
    }
}
// Save as CSV for Excel import
File.WriteAllText("extracted_table.csv", csvBuilder.ToString());
Console.WriteLine("Table data exported to CSV");
using IronPdf;
using System;
using System.Text;
using System.Text.RegularExpressions;
var pdf = PdfDocument.FromFile("example.pdf");
string rawText = pdf.ExtractAllText();
// Split into lines for processing
string[] lines = rawText.Split('\n');
var csvBuilder = new StringBuilder();
foreach (string line in lines)
{
    if (string.IsNullOrWhiteSpace(line) || line.Contains("Page"))
        continue;
    string[] rawCells = Regex.Split(line.Trim(), @"\s+");
    string[] cells;
    // If the line starts with "Product", combine first two tokens as product name
    if (rawCells[0].StartsWith("Product") && rawCells.Length >= 5)
    {
        cells = new string[rawCells.Length - 1];
        cells[0] = rawCells[0] + " " + rawCells[1]; // Combine Product + letter
        Array.Copy(rawCells, 2, cells, 1, rawCells.Length - 2);
    }
    else
    {
        cells = rawCells;
    }
    // Keep header or table rows
    bool isTableOrHeader = cells.Length >= 2
                           && (cells[0].StartsWith("Item") || cells[0].StartsWith("Product")
                               || Regex.IsMatch(cells[0], @"^INV-\d+"));
    if (isTableOrHeader)
    {
        Console.WriteLine($"Row: {string.Join("|", cells)}");
        string csvRow = string.Join(",", cells).Trim();
        csvBuilder.AppendLine(csvRow);
    }
}
// Save as CSV for Excel import
File.WriteAllText("extracted_table.csv", csvBuilder.ToString());
Console.WriteLine("Table data exported to CSV");
$vbLabelText   $csharpLabel

PDF 檔案中的表格通常只是排列成網格狀的文字。 此檢查有助於確定一行是屬於表格行還是表格標題。 透過過濾掉頁首、頁尾和無關文本,您可以從 PDF 中提取乾淨的表格數據,以便匯入 CSV 或 Excel。 對於佈局複雜的收據和發票,請查看AdvancedScan 擴充功能

此工作流程適用於 PDF 表單、財務文件和報告。 之後您可以將 PDF 中的資料轉換為 xlsx 文件,或將它們合併到一個包含所有有用資料的 zip 檔案中。 對於包含合併儲存格的複雜表格,您可能需要根據列位置調整解析邏輯。 資料輸出文件提供了有關如何處理結構化結果的詳細指導。

顯示產品庫存的 Excel 表格,包含"商品"、"數量"、"價格"和"總計算值"等欄位。

為了提高表格提取的準確性,可以考慮使用電腦視覺技術在處理之前自動檢測表格區域。 這種方法可以顯著改善複雜佈局的渲染效果。

如何提取表單欄位資料?

IronPDF 也具備表單欄位資料擷取與修改功能,類似護照讀取功能,可用於結構化文件:

using IronPdf;
using System.Drawing;
using System.Linq;
var pdf = PdfDocument.FromFile("form_document.pdf");
// Extract form field data
var form = pdf.Form;
foreach (var field in form) // Removed '.Fields' as 'FormFieldCollection' is enumerable
{
    Console.WriteLine($"{field.Name}: {field.Value}");
    // Update form values if needed
    if (field.Name == "customer_name")
    {
        field.Value = "Updated Value";
    }
}
// Save modified form
pdf.SaveAs("updated_form.pdf");
using IronPdf;
using System.Drawing;
using System.Linq;
var pdf = PdfDocument.FromFile("form_document.pdf");
// Extract form field data
var form = pdf.Form;
foreach (var field in form) // Removed '.Fields' as 'FormFieldCollection' is enumerable
{
    Console.WriteLine($"{field.Name}: {field.Value}");
    // Update form values if needed
    if (field.Name == "customer_name")
    {
        field.Value = "Updated Value";
    }
}
// Save modified form
pdf.SaveAs("updated_form.pdf");
$vbLabelText   $csharpLabel

此程式碼從 PDF 中提取表單欄位值,並允許您以程式設計方式更新它們,從而可以輕鬆處理 PDF 表單並提取指定範圍的資訊以進行分析或產生報告。 這對於自動化工作流程非常有用,例如客戶註冊、調查處理或資料驗證。 對於身分識別文件處理,請探索身分識別檔案 OCR最佳實務。

並排比較兩個PDF表單,顯示資料擷取結果-左側為原始表單,包含"John Doe"資料;右側為更新後的表單,包含"更新值",顯示資料擷取並修改成功。

在使用包含複選框和單選按鈕的表單時,您可能需要為特殊欄位類型實作類似條碼和二維碼讀取的自訂邏輯。 OcrResult類別文件提供了有關處理各種結果類型的詳細資訊。

接下來我該怎麼做?

IronPDF 讓 .NET 中的 PDF 資料擷取實用且有效率。 您可以從各種 PDF 文件中提取圖像、文字、表格、表單字段,甚至提取附件,包括通常需要額外 OCR 處理的掃描 PDF。 對於掃描文檔,將 IronPDF 與IronOCR 功能結合,可提供全面的文件處理能力。

無論您是建立知識庫、自動化報告工作流程,還是從財務 PDF 中提取數據,此庫都能為您提供完成此操作所需的工具,而無需手動複製或容易出錯的解析。 它簡單、快速,並且可以直接整合到 Visual Studio 專案中。 在部署方面,IronPDF 支援多種平台,包括WindowsLinuxDocker以及AWSAzure等雲端平台。

不妨一試—您很可能會節省時間,並避免處理 PDF 文件時通常會遇到的種種麻煩。 對於新創公司和小型團隊,授權選項包括可隨需求成長而擴展的靈活計劃。 您也可以探索在生產部署中實作許可證金鑰的方法

準備好在您的應用程式中實現 PDF 資料提取功能了嗎? IronPDF 聽起來像您理想的 .NET 程式庫嗎? 立即開始免費試用,體驗全部功能;或了解我們的商業用途授權選項。 請造訪我們的文檔,以取得全面的指南和 API 參考。 如需快速實現,請查看我們的演示程式碼範例,即可在幾分鐘內上手。

常見問題解答

從PDF文件中提取資料的主要挑戰是什麼?

PDF 文件主要設計用於以特定佈局顯示內容,由於其側重於外觀而非數據可訪問性,因此很難透過程式提取資料。

IronOCR 如何幫助 .NET 進行 PDF 資料擷取?

IronOCR 提供工具,利用光學字元辨識 (OCR) 將文字影像轉換為機器可讀數據,從而從 PDF(包括掃描文件)中提取文字和資料。

IronOCR 可以處理掃描的 PDF 文件嗎?

是的,IronOCR 能夠利用先進的 OCR 技術處理掃描的 PDF 文件,識別並提取文件中圖像的文字。

IronOCR 使用哪種程式語言進行 PDF 資料擷取?

IronOCR 專為與 C# 搭配使用而設計,因此對於在 .NET 框架內工作的開發人員來說,它是從 PDF 中提取資料的絕佳選擇。

是否有使用 IronOCR 進行 PDF 資料擷取的程式碼範例?

是的,指南包含完整的 C# 程式碼範例,示範如何使用 IronOCR 從 PDF 文件中有效地提取資料。

IronOCR 能否解析 PDF 文件中的表格?

IronOCR 包含解析 PDF 文件中表格的功能,使開發人員能夠有效率地提取結構化資料。

IronOCR可以擷取哪些類型的PDF內容?

IronOCR 可以從 PDF 中提取各種類型的內容,包括文字、表格和掃描圖像中的數據,使其成為一款用途廣泛的資料擷取工具。

坎納奧帕特·烏東潘特
軟體工程師
在成為軟體工程師之前,Kannapat 在日本北海道大學完成了環境資源專業的博士學位。在攻讀博士學位期間,他還加入了生物生產工程系下屬的車輛機器人實驗室。 2022 年,他憑藉 C# 技能加入了 Iron Software 的工程團隊,專注於 IronPDF 的開發。 Kannapat 非常珍惜這份工作,因為他可以直接向 IronPDF 大部分程式碼的編寫者學習。除了與同事學習之外,Kannapat 也享受在 Iron Software 工作的社交氛圍。工作之餘,Kannapat 通常會玩 PS5 遊戲或重溫《最後生還者》。