跳過到頁腳內容
使用 IRONOCR

如何在 C# 中對 PDF 進行 OCR:使用 .NET 從掃描文件中擷取文字

掃描的 PDF 文件給.NET開發人員帶來了一個持續的挑戰:文字僅以圖像形式存在,因此無法進行搜尋、複製或以程式處理。 光學字元辨識 (OCR) 透過將掃描影像轉換為可編輯和可搜尋的資料來解決這個問題——將紙本文件、相機拍攝的影像或任何基於影像的 PDF 檔案轉換為機器可讀的文字。 無論是數位化紙本檔案、自動化資料擷取,或是建立文件處理流程,在 C# 中對 PDF 文件執行 OCR 的能力都是一項至關重要的能力。

IronOCR是一個基於 Tesseract 5 引擎建構的.NET OCR 函式庫,並具有額外的精度增強功能。 它允許開發人員使用少量程式碼從任何 PDF 文件(掃描或其他方式)中提取文字。 本文將介紹核心工作流程:基本 PDF OCR、頁面選擇性處理、區域目標擷取以及針對複雜掃描的影像預處理。

如何在 C# 中對 PDF 檔案進行 OCR 識別?

在.NET中,提取 PDF 文字的最快方法是透過NuGet安裝IronOCR 。 在專案目錄下開啟終端並運行:

dotnet add package IronOcr
dotnet add package IronOcr
SHELL

安裝軟體包後,以下頂級語句程式會讀取掃描的 PDF 檔案並列印其提取的文字:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
$vbLabelText   $csharpLabel

IronTesseract 類別對 Tesseract 5 進行了封裝,並針對.NET Core和.NET Framework目標進行了 .NET 原生最佳化。 OcrInput 物件管理 PDF 載入和內部頁面渲染。 當呼叫 Read 時,OCR 過程會分析每一頁,並返回一個 OcrResult,其中包含完整的提取文本,以及有關段落、行、單字及其像素座標的結構化資料。

結果可以寫入文字檔案、傳遞給下游處理邏輯、儲存在資料庫中,或輸入到文件索引管道中。有關底層引擎的更多信息,請參閱Tesseract OCR 文件IronOCR API 參考文件

輸入

如何使用 OCR 識別 PDF:使用 C# .NET從掃描文件中提取文字 OCR PDF:圖像 1 - 範例 PDF 輸入

輸出

如何使用 OCR 識別 PDF:使用 C# .NET從掃描文件中提取文字 OCR PDF:圖 2 - 控制台輸出

如何讀取PDF文件中的特定頁面?

如果只有某些頁麵包含相關內容,處理長文件的每一頁都會浪費時間和記憶體。 IronOCR可讓您透過將從零開始的頁面索引傳遞給 LoadPdf 來定位特定頁面:

using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

選擇性頁面載入可以減少處理時間和記憶體消耗,這在處理數百頁的歸檔文件時非常重要,因為其中只有少數幾頁包含所需的資料。 從零開始的索引約定與標準的.NET集合一致:頁面索引 0 是文件的第一頁。

對於事先不知道相關頁面的文檔,可以考慮先以降低 DPI 的速度快速掃描整個文檔,以確定頁碼,然後再以完整的設定對這些頁面重新掃描。

有關IronOCR頁面選擇文件中頁面層級控制的詳細資訊。

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

發票處理、表格數位化和結構化文件解析通常需要從指定區域提取文本,而不是掃描整個頁面。 IronOCR透過 ContentAreas 參數支援區域定向 OCR,該參數接受一個 Rectangle 物件數組,用於指定要分析的每個頁面的哪些部分:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Rectangle 建構函數接受四個整數參數:X 座標、Y 座標、寬度和高度——所有參數均以像素為單位,從渲染頁面的左上角開始測量。 以小區域而非整個頁面為目標,既可以減少 OCR 時間,又能降低引擎識別周圍噪音或無關文字欄位的可能性。

對於批次發票處理工作流程,將區域提取與遍歷 result.Pages 進行迭代相結合,以從數百個文件的相同欄位位置提取結構化資料。 每個頁面結果都會獨立地顯示其內容區域中識別出的文字。

IronOCR內容區域範例為多區域場景提供了額外的配置選項。

輸入

如何使用 OCR 識別 PDF:使用 C# .NET OCR 從掃描文件中提取文字 PDF:圖片 3 - 範例發票

輸出

如何使用 C# .NET OCR 從掃描文件中擷取文字 PDF:圖 4 - 擷取的資料輸出

如何提高掃描文件的OCR辨識準確率?

現實世界中掃描的文件經常會出現品質問題:頁面傾斜、解析度低,或是掃描硬體或軟體引入了數位雜訊。 IronOCR包含一組影像預處理過濾器,可在識別引擎運作之前修正這些問題:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

dpi 參數控制在識別運行之前渲染 PDF 頁面的解析度。 更高的解析度(200 至 300 DPI)可以提高文字較小或較密集的文件的精確度,但處理過程中會佔用更多記憶體。 Deskew 方法可以自動偵測並修正頁面旋轉。 DeNoise 可移除可能幹擾字元辨識步驟的斑點和偽影。

對於需要更徹底的影像校正的文檔, IronOCR還提供對比度增強、二值化(將頁面轉換為黑白)和縮放調整。 將多個過濾器依序組合使用,可以從原本會產生亂碼輸出的掃描件中恢復可用的文字。 請參閱IronOCR影像過濾器參考文檔,以了解所有可用的預處理操作的完整清單。

如何處理受密碼保護和多格式的文件?

IronOCR不僅限於標準 PDF 文件。 此庫可處理文件處理工作流程中經常出現的各種輸入場景。

支援透過在輸入建置過程中傳遞憑證來啟用密碼保護的 PDF 檔案

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

圖片格式——PNG、JPEG、TIFF、BMP、GIF 和多頁 TIFF——透過對應的 LoadImageLoadImageFrames 方法載入。 無論輸入格式如何,都適用相同的預處理過濾器和區域定位選項。

多語言文件透過 IronOCR 的語言包系統進行處理。 該庫預設包含英文,並支援超過 125 種其他語言包,涵蓋拉丁文、西里爾文、中日韓文、阿拉伯文和其他文字。請在呼叫 Read 之前載入其他語言:

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
$vbLabelText   $csharpLabel

對於同一頁上混合多種語言的文檔,可以使用 MultiLanguage 模式。 這對於國際環境下的發票處理尤其有價值,因為發票的抬頭、明細項目和地址可能會以不同的語言出現。

部署可在 Windows、Linux、macOS 和雲端環境(包括 Azure 和 Docker 容器)中進行。

如何從掃描文件建立可搜尋的PDF?

除了將文字提取為字串之外, IronOCR還可以產生可搜尋的 PDF 輸出——在 PDF 中,原始掃描圖像作為視覺層保留,同時嵌入一個不可見的文本層以進行搜尋和複製操作。 這是專業文件掃描器產生的標準格式。

IronOCR可搜尋 PDF 功能接受 OcrResult 並寫入新的 PDF 檔案:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
$vbLabelText   $csharpLabel

輸出檔案可以使用任何PDF閱讀器開啟。 文字選擇、搜尋和複製操作在嵌入的文字圖層上進行,同時保留原始掃描外觀。 這種格式通常是合規性檔案、法律文件庫和企業內容管理系統所必需的。

對於其他輸出格式,OcrResult 物件也公開了每頁置信度分數、單字級邊界框和結構化段落資料——所有這些都對下游分類或索引任務很有用。

如何同時讀取條碼、二維碼和文字?

文件處理流程通常需要從同一文件中提取人類可讀的文字和機器可讀的程式碼。 IronOCR可以在一次 OCR 過程中檢測和解碼條碼和二維碼,而無需單獨的庫。

在處理之前,請先在 IronTesseract 實例上啟用條碼讀取功能:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
$vbLabelText   $csharpLabel

這對於貨運標籤處理、庫存管理以及任何條碼和列印文字同時出現在掃描文件上的工作流程都特別有用。 IronOCR條碼讀取指南涵蓋支援的格式,包括 Code 128、QR 碼、Data Matrix 和 PDF417。

IronOCR輸入類型有什麼區別?

IronOCR提供了兩種載入 PDF 檔案的主要方法,每種方法都適用於不同的場景:

IronOCR PDF 輸入方法比較
方法 班級 最適合 筆記
一般性輸入 `OcrInput.LoadPdf()` 大多數用例 支援所有預處理過濾器、頁面選擇和內容區域
PDF專用 `OcrPdfInput` 簡單場景 便捷包裝;配置選項較少
影像檔案 `OcrInput.LoadImage()` PNG、JPEG、TIFF、BMP 與 PDF 輸入相同的預處理和區域定位方法
多頁 TIFF 文件 `OcrInput.LoadImageFrames()` 傳真存檔,掃描器輸出 將每一幀作為單獨的頁面進行處理

對於大多數生產場景,建議使用 OcrInput.LoadPdf(),因為它公開了完整的預處理和配置 API。 OcrPdfInput 適用於快速原型設計或預設設定足以滿足需求的情況。

下一步計劃是什麼?

以上程式碼範例涵蓋了IronOCR在 C# 中用於 PDF OCR 的核心工作流程。 以下是進行下一步操作的簡要清單:

-安裝軟體包dotnet add package IronOcr在NuGet上搜尋IronOCR -運行基本範例:在建立完整的流程邏輯之前,確認能夠從範例 PDF 中提取文字。 -應用預處理:如果處理的是掃描文檔,請新增 DeskewDeNoise 調用,並使用代表性樣本進行測試。 -探索更多功能可搜尋的 PDF 輸出條碼讀取多語言支援結構化資料輸出 -查看部署指南:Azure、Docker 和 Linux 部署文章涵蓋了特定於環境的配置。 -試用免費版:在購買許可證之前,先開始免費試用,體驗所有功能。 -取得授權IronOCR 的授權選項涵蓋從個人開發者到企業部署的各種需求,並允許免版稅再分發。

對於具體使用案例的問題, IronOCR操作指南庫提供了涵蓋數十種場景的逐步文章。 完整的 API 介面已記錄在IronOCR API 參考文件中。

常見問題解答

用於在 C# 中執行 PDF OCR 的最少代碼是多少?

使用 IronOCR,最少代碼為:創建 IronTesseract 實例,創建 OcrInput,呼叫 input.LoadPdf 與文件路徑,然後呼叫 ocr.Read(input)。result.Text 屬性返回提取的字串。

您如何在 .NET 專案中安裝 IronOCR?

在終端中運行 'dotnet add package IronOcr',或在 Visual Studio 的 NuGet Package Manager 中搜索 IronOcr。

IronOCR 可以只處理 PDF 的特定頁面嗎?

可以。將零基頁面索引的 List 傳遞給 LoadPdf 的 pageIndices 參數。僅指定的頁面會被渲染和處理,從而減少時間和內存使用。

如何從掃描的 PDF 的特定區域中提取文本?

將 Rectangle 對象的數組傳遞給 LoadPdf 的 contentAreas 參數。每個矩形指定從頁面左上角計算的 X 位置、Y 位置、寬度和高度。

IronOCR 為掃描的文件提供什麼預處理過濾器?

IronOCR 提供 Deskew(修正頁面旋轉)、DeNoise(去除掃描瑕疵)、對比度增強、二值化、比例調整。這些可以串聯使用以提高劣質掃描的準確性。

IronOCR 支援密碼保護的 PDF 文件嗎?

支援。將密碼字串傳遞給 LoadPdf 的 password 參數。程式庫在渲染頁面進行 OCR 之前解密該文件。

IronOCR 可以創建可搜尋的 PDF 輸出嗎?

支援。呼叫 ocr.Read(input) 後,呼叫 result.SaveAsSearchablePdf 並提供輸出文件路徑。生成的 PDF 保留原始掃描作為可見層,並嵌入不可見的文本層以進行搜尋和複製操作。

IronOCR 支援哪些語言?

IronOCR 支持 125 多種語言包,涵蓋拉丁字母、斯拉夫字母、CJK 字元、阿拉伯字符和其他脚本。在呼叫 Read 之前,請在 IronTesseract 實例上設置 Language 屬性。

IronOCR 可以從 PDF 文檔中讀取條碼和 QR 碼嗎?

支援。在呼叫 Read 之前,將 ocr.Configuration.ReadBarCodes 設置為 true。OcrResult.Barcodes 集合中包含所有檢測到的代碼的解碼值和格式類型。

IronOCR 能在 Linux 和 Docker 容器中運行嗎?

支援。IronOCR 支援部署於 Windows、Linux、macOS 和雲環境包括 Azure 和 Docker 容器。IronSoftware 文件中包含專門針對環境的設置指南。

Kannaopat Udonpant
軟體工程師
在成為軟件工程師之前,Kannapat 從日本北海道大學完成了環境資源博士學位。在追逐學位期间,Kannapat 還成為了生產工程系一部份——汽車机器人實验室的成員。2022 年,他利用他的 C# 技能加入 Iron Software 的工程團隊, 專注於 IronPDF。Kannapat 珍惜他的工作,因為他直接向编写大部分 IronPDF 使用的代碼的開發者学习。除了同行学习,Kannapat 还喜欢在 Iron Software 工作的社交十环。当他不编写代碼或文檔時,Kannapat 通常在他的 PS5 上打游戏或重看《The Last of Us》。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我