如何在 C# 中透過 OCR 讀取 PDF 檔案

如何使用 IronOCR 在 C# 中讀取 PDF 檔案

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR 讓您只需一行 C# 程式碼,即可從 PDF 檔案中擷取文字,支援所有 PDF 版本,並透過其基於 Tesseract 的引擎提供精準的 OCR 結果。

PDF 代表"可攜式文件格式"。這是由 Adobe 開發的一種檔案格式,無論原始文件是透過何種應用程式或平台建立,都能完整保留其字型、圖片、圖形及版面配置。 PDF 檔案通常用於以一致的格式分享和檢視文件,無論使用何種軟體或硬體開啟皆然。 IronOCR 支援各種版本的 PDF 文件,從較舊的 PDF 1.0 規格到最新的 PDF 2.0 標準皆可處理。

快速入門:數秒內完成 PDF 檔案的 OCR 處理

透過 IronOCR 快速設定 OCR:建立一個指向您 PDF 檔案的 OcrPdfInput,然後呼叫 Read。 此範例展示如何使用 IronOCR 從 PDF 檔案中擷取文字。

  1. using NuGet 套件管理員安裝 https://www.nuget.org/packages/IronOcr

    PM > Install-Package IronOcr
  2. 請複製並執行此程式碼片段。

    using var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrPdfInput("document.pdf", PdfContents.TextAndImages));
  3. 部署至您的生產環境進行測試

    立即透過免費試用,在您的專案中開始使用 IronOCR

    arrow pointer


如何讀取整個 PDF 檔案?

首先,請建立 IronTesseract 類別的實例以執行 OCR。 接著,使用 'using' 語句建立一個 OcrPdfInput 物件,並將 PDF 檔案路徑傳入其中。 最後,請使用 Read 方法執行 OCR。 此方法同時適用於掃描 PDF(基於圖像)和可搜尋 PDF(基於文字),適合從各種 PDF 類型中提取文字

/* :path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);

// Access the extracted text
string extractedText = ocrResult.Text;
System.Console.WriteLine(extractedText);
/* :path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf.cs */
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);

// Access the extracted text
string extractedText = ocrResult.Text;
System.Console.WriteLine(extractedText);
Imports IronOcr

' Instantiate IronTesseract
Dim ocrTesseract As New IronTesseract()

' Add PDF
Using pdfInput As New OcrPdfInput("Potter.pdf")
    ' Perform OCR
    Dim ocrResult As OcrResult = ocrTesseract.Read(pdfInput)

    ' Access the extracted text
    Dim extractedText As String = ocrResult.Text
    System.Console.WriteLine(extractedText)
End Using
$vbLabelText   $csharpLabel
分屏顯示格式化的《哈利波特》文本與提取的純文本輸出,以展示 PDF 文本提取功能

在大多數情況下,無需指定 DPI 屬性。 然而,在 OcrPdfInput 的建構中提供較高的 DPI 數值,可提升閱讀準確性。 預設的 DPI 設定通常足以應對大多數標準 PDF 文件,但針對特殊文件,調整設定可能會帶來更好的效果。

何時應調整 DPI 設定?

在處理低解析度的掃描文件或包含細小文字的 PDF 檔案時,DPI(每英寸點數)設定便顯得至關重要。 為獲得最佳效果,請在以下情況下考慮調整 DPI 設定

  • 處理解析度低於 200 DPI 的掃描文件
  • 處理歷史或存檔 PDF 檔案
  • 處理複雜版面配置或小字體
  • 預設設定下出現準確性問題

對於大多數 OCR 操作,建議使用 300 DPI;若文件包含極小字體或複雜細節,則可能需要 600 DPI。

除了 PDF 之外,IronOCR 還支援哪些檔案格式?

IronOCR 除了 PDF 之外,還全面支援多種檔案格式。 您可以處理多種格式的圖片,包括:

  • 標準照片請使用 JPEG/JPG 格式
  • 支援透明背景的 PNG 圖像格式
  • TIFF 適用於多頁文件
  • BMP 適用於未壓縮的圖像
  • 適用於簡單圖形的 GIF 格式

此外,IronOCR 能直接從記憶體處理 PDF 資料流,適用於網頁應用程式和雲端服務。

處理 PDF 內容類型

處理 PDF 檔案時,您可以透過指定內容類型來優化效能。 PdfContents 枚舉可讓您鎖定特定內容:

// For text-only PDFs (faster processing)
var textOnlyPdf = new OcrPdfInput("document.pdf", PdfContents.Text);

// For image-only PDFs (scanned documents)
var imageOnlyPdf = new OcrPdfInput("scanned.pdf", PdfContents.Images);

// For mixed content (default)
var mixedPdf = new OcrPdfInput("mixed.pdf", PdfContents.TextAndImages);
// For text-only PDFs (faster processing)
var textOnlyPdf = new OcrPdfInput("document.pdf", PdfContents.Text);

// For image-only PDFs (scanned documents)
var imageOnlyPdf = new OcrPdfInput("scanned.pdf", PdfContents.Images);

// For mixed content (default)
var mixedPdf = new OcrPdfInput("mixed.pdf", PdfContents.TextAndImages);
' For text-only PDFs (faster processing)
Dim textOnlyPdf = New OcrPdfInput("document.pdf", PdfContents.Text)

' For image-only PDFs (scanned documents)
Dim imageOnlyPdf = New OcrPdfInput("scanned.pdf", PdfContents.Images)

' For mixed content (default)
Dim mixedPdf = New OcrPdfInput("mixed.pdf", PdfContents.TextAndImages)
$vbLabelText   $csharpLabel

如何從 PDF 中讀取特定頁面?

當從 PDF 文件中讀取特定頁面時,請指定要匯入的頁面索引號碼。 為此,在建構 OcrPdfInput 時,請將頁面索引清單傳遞給 PageIndices 參數。 請注意,頁碼採用從零開始的編號方式。 此功能在處理大型文件時特別實用,尤其當僅有特定頁面包含相關資訊時。

:path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-pdf-pages.cs
using IronOcr;
using System.Collections.Generic;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Create page indices list
List<int> pageIndices = new List<int>() { 0, 2 };

// Add PDF
using var pdfInput = new OcrPdfInput("Potter.pdf", PageIndices: pageIndices);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(pdfInput);
Imports IronOcr
Imports System.Collections.Generic

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Create page indices list
Private pageIndices As New List(Of Integer)() From {0, 2}

' Add PDF
Private pdfInput = New OcrPdfInput("Potter.pdf", PageIndices:= pageIndices)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(pdfInput)
$vbLabelText   $csharpLabel

為什麼頁碼從零開始?

從零開始的索引是 C# 及大多數程式語言中的標準慣例。 這表示第一頁的索引為 0,第二頁的索引為 1,以此類推。 這種與陣列索引的一致性,讓開發人員能更輕鬆地透過程式化方式處理頁面集合。 將人可讀的頁碼(1、2、3...)轉換為索引時,只需從頁碼中減去 1 即可。

如何閱讀非連續的頁面?

使用 IronOCR 處理非連續頁面十分簡單。 只需將所需的頁面索引依任意順序加入您的清單中即可。 例如:

// Read pages 1, 3, 5, and 10 (using zero-based indices)
List<int> pageIndices = new List<int>() { 0, 2, 4, 9 };

// Or use LINQ for range-based selection
var evenPages = Enumerable.Range(0, 10).Where(x => x % 2 == 0).ToList();
// Read pages 1, 3, 5, and 10 (using zero-based indices)
List<int> pageIndices = new List<int>() { 0, 2, 4, 9 };

// Or use LINQ for range-based selection
var evenPages = Enumerable.Range(0, 10).Where(x => x % 2 == 0).ToList();
Imports System.Collections.Generic
Imports System.Linq

' Read pages 1, 3, 5, and 10 (using zero-based indices)
Dim pageIndices As New List(Of Integer)() From {0, 2, 4, 9}

' Or use LINQ for range-based selection
Dim evenPages = Enumerable.Range(0, 10).Where(Function(x) x Mod 2 = 0).ToList()
$vbLabelText   $csharpLabel

OCR 引擎僅會處理指定的頁面,這將顯著提升處理大型文件的效能。

若我指定了無效的頁碼會發生什麼情況?

若您指定的頁碼範圍超出文件的總頁數,IronOCR 將會拋出例外。 在處理前請實施錯誤處理或驗證頁數。 您可以在執行 OCR 之前檢查 PDF 的總頁數,以確保索引有效。

如何對 PDF 的特定區域進行 OCR 識別?

透過縮小閱讀範圍,您可以顯著提升閱讀效率。 為達成此目標,請明確指定需讀取的 PDF 檔案中具體區域。 在以下程式碼範例中,IronOCR 專注於提取章節編號與標題。 此技術類似於為圖像定義 OCR 區域,能同時提升速度與準確度。

:path=/static-assets/ocr/content-code-examples/how-to/input-pdfs-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop regions
Rectangle[] scanRegions = { new Rectangle(550, 100, 600, 300) };

// Add PDF
using (var pdfInput = new OcrPdfInput("Potter.pdf", ContentAreas: scanRegions))
{
    // Perform OCR
    OcrResult ocrResult = ocrTesseract.Read(pdfInput);

    // Output the result to console
    Console.WriteLine(ocrResult.Text);
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Specify crop regions
Private scanRegions() As Rectangle = { New Rectangle(550, 100, 600, 300) }

' Add PDF
Using pdfInput = New OcrPdfInput("Potter.pdf", ContentAreas:= scanRegions)
	' Perform OCR
	Dim ocrResult As OcrResult = ocrTesseract.Read(pdfInput)

	' Output the result to console
	Console.WriteLine(ocrResult.Text)
End Using
$vbLabelText   $csharpLabel

如何確定正確的矩形座標?

PDF 檔案中以紅色矩形標示章節標題以供 OCR 處理,Visual Studio 控制台顯示執行完成

要找出正確的座標,必須理解 PDF 的座標系統。 Rectangle 建構函式接受四個參數:Width 以及 Height。 所有尺寸單位均以像素為單位。 具備尺規功能的 PDF 檢視器或除錯工具等工具,有助於精確定位座標。 或者,您也可以透過試錯並進行微調,來精確鎖定選取範圍。

若需更精確的區域定義,可利用"高亮顯示文字以進行除錯"功能,以視覺化方式呈現正在處理的區域。

我可以在單次操作中指定多個區域嗎?

是的,IronOCR 支援在單次 OCR 操作中處理多個區域。 只需將多個 Rectangle 物件加入您的陣列中:

Rectangle[] scanRegions = { 
    new Rectangle(50, 50, 200, 100),    // Header region
    new Rectangle(50, 200, 500, 300),   // Main content region
    new Rectangle(50, 550, 200, 50)     // Footer region
};
Rectangle[] scanRegions = { 
    new Rectangle(50, 50, 200, 100),    // Header region
    new Rectangle(50, 200, 500, 300),   // Main content region
    new Rectangle(50, 550, 200, 50)     // Footer region
};
Imports System.Drawing

Dim scanRegions As Rectangle() = {
    New Rectangle(50, 50, 200, 100),    ' Header region
    New Rectangle(50, 200, 500, 300),   ' Main content region
    New Rectangle(50, 550, 200, 50)     ' Footer region
}
$vbLabelText   $csharpLabel

每個區域將分別處理,並依照指定順序合併結果。

為何使用區域特定 OCR 而非全頁 OCR?

針對特定地區的 OCR 技術具備多項優勢:

  • 效能:處理較小區域的速度顯著提升
  • 準確性:聚焦特定區域可減少來自無關內容的干擾
  • 結構:更可靠地從表單和表格中提取資料
  • 成本效益:處理時間縮短意味著運算成本降低

此方法在處理結構化文件(如發票、表單或報告)時尤為實用,因這些文件中的資料通常出現在可預測的位置。 針對複雜的文件結構,建議參考文件中的表格讀取方法,以掌握專用的表格擷取技術。

有哪些進階 PDF OCR 功能可用?

IronOCR 提供超越基本文字擷取的 PDF 處理進階功能。 您可以將掃描文件轉為可搜尋的 PDF 檔案,在保留原始版面的同時,新增文字層以便進行搜尋和複製。 此函式庫亦支援多執行緒,可加速處理大量 PDF 檔案集。

對於希望在 .NET 應用程式中開始使用 OCR 的開發人員而言,探索這些簡單的 OCR 範例,將為理解 IronOCR 的功能與最佳實踐奠定紮實的基礎。

處理複雜的 PDF 情境

在處理複雜的 PDF 文件時,IronOCR 提供多項進階功能:

  1. 影像預處理:套用影像濾鏡以提升文字清晰度
  2. 多語言處理:同時處理包含多種語言的文件
  3. 自訂設定:針對特定文件類型微調 OCR 設定
  4. 匯出選項:將結果儲存為多種格式,包括可搜尋的 PDF 及 hOCR HTML

這些功能使 IronOCR 成為滿足 Enterprise 級 PDF 處理需求的全面解決方案。

常見問題

如何在 C# 中從 PDF 檔案中擷取文字?

您只需一行程式碼,即可使用 IronOCR 從 PDF 檔案中擷取文字。 只需建立一個 IronTesseract 實例,並搭配 OcrPdfInput 使用 Read 方法:`using var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrPdfInput("document.pdf", PdfContents.TextAndImages));`。IronOCR 同時支援掃描 PDF(基於影像)與可搜尋 PDF(基於文字)。

支援哪些 PDF 版本進行文字擷取?

IronOCR 支援所有 PDF 版本,從較舊的 PDF 1.0 規格到最新的 PDF 2.0 標準皆可。其 OCR 引擎建構於 Tesseract 技術之上,確保無論您處理的是哪個版本的 PDF,都能準確地擷取文字。

我可以只讀取 PDF 中的特定頁面,而不是整個文件嗎?

是的,IronOCR 允許您透過提供頁面索引來讀取 PDF 中的特定頁面。您無需處理整個文件,而是可以利用 OcrPdfInput 物件指定要擷取文字的頁面,使 OCR 流程在處理大型文件時更加高效。

針對 PDF 檔案進行 OCR 的最簡工作流程為何?

使用 IronOCR 的基本工作流程包含 5 個步驟:1) 下載 C# 程式庫,2) 準備您的 PDF 文件,3) 使用 PDF 檔案路徑建立 OcrPdfInput 物件,4) 使用 Read 方法執行 OCR,以及 5) 可選地指定頁碼以進行選擇性讀取。

進行 PDF OCR 時,何時應調整 DPI 設定?

雖然 IronOCR 的預設 DPI 設定對大多數標準 PDF 文件效果良好,但在處理低解析度掃描文件(低於 200 DPI)或包含細小文字的 PDF 時,您應考慮調整 DPI。在 OcrPdfInput 建構時採用較高的 DPI 設定,可顯著提升特殊文件的辨識準確度。

OCR 引擎是否同時支援掃描檔與可搜尋的 PDF 檔案?

是的,IronOCR 能有效處理掃描的 PDF(基於影像)和可搜尋的 PDF(基於文字)。其基於 Tesseract 的引擎會自動處理不同類型的 PDF,使其能靈活地從各種 PDF 格式中擷取文字,無需採用不同的處理方式。

IronOCR 能否整合至現有應用程式中?

IronOCR 設計上可輕鬆透過 C# 整合至現有應用程式中,讓開發人員能以最少的努力,為其軟體增添 OCR 功能。

使用 IronOCR 進行文件管理有哪些好處?

使用 IronOCR 進行文件管理,可將掃描文件轉換為可搜尋且可編輯的文字,從而簡化工作流程,減少人工資料輸入的需求,並提升文件的可存取性。

IronOCR 如何提升資料準確性?

IronOCR 透過其先進的辨識演算法與影像校正功能來提升資料準確性,確保文字擷取過程既可靠又精確。

IronOCR 是否有提供免費試用版?

是的,Iron Software 提供 IronOCR 的免費試用版,讓使用者能在決定購買前測試其功能與效能。

Curtis Chau
技術撰稿人

Curtis Chau 擁有卡爾頓大學(Carleton University)的電腦科學學士學位,專精於前端開發,並精通 Node.js、TypeScript、JavaScript 及 React。他熱衷於打造直觀且美觀的用戶介面,喜歡運用現代框架,並創建結構完善、視覺上吸引人的手冊。

除了開發工作之外,Curtis 對物聯網(IoT)抱有濃厚興趣,致力於探索整合硬體與軟體的創新方法。閒暇時,他喜歡玩遊戲和開發 Discord 機器人,將對科技的熱愛與創意相結合。

審閱者:
Jeff Fritz
Jeffrey T. Fritz
首席程式經理 - .NET 社群團隊
Jeff 同時也是 .NET 與 Visual Studio 團隊的首席程式經理。他是 .NET Conf 虛擬會議系列的執行製作人,並主持每週播出兩次的開發者直播節目《Fritz and Friends》,在節目中他會與觀眾一起探討技術話題並共同編寫程式碼。Jeff 負責撰寫工作坊內容、準備簡報,並為 Microsoft Build、Microsoft Ignite、.NET Conf 以及 Microsoft MVP Summit 等微軟最大規模的開發者活動規劃內容。
準備開始了嗎?
Nuget 下載 5,888,303 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

想要快速確認成果嗎? PM > Install-Package IronOcr
執行範例 觀看您的圖片轉為可搜尋文字。