如何在 OCR C# 中閱讀 PDFS

如何使用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是"便攜式文件格式"(Portable Document Format)的縮寫。它是由Adobe公司開發的一種文件格式,無論使用何種應用程式和平台建立文檔,它都能保留原始文件的字體、圖像、圖形和佈局。 PDF 文件通常用於以一致的格式共用和檢視文檔,而無需考慮開啟它們的軟體或硬體。 IronOCR可以處理各種版本的 PDF 文檔,從較早的 PDF 1.0 規格到最新的 PDF 2.0 標準。

快速入門:幾秒鐘內即可對 PDF 文件進行 OCR 識別

使用IronOCR快速設定 OCR,方法是建立一個指向 PDF 的 OcrPdfInput,然後呼叫 Read。 本範例示範如何使用IronOCR從 PDF 擷取文字。

  1. 使用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);
$vbLabelText   $csharpLabel
分割視圖顯示格式化的哈利波特文字與擷取的純文字輸出,示範了PDF文字擷取過程。

大多數情況下,無需指定 DPI 屬性。 然而,在 OcrPdfInput 的構造中提供較高的 DPI 值可以提高讀取精度。 預設的 DPI 設定通常足以滿足大多數標準 PDF 文件的需求,但對於特殊文檔,調整 DPI 設定可能會有所幫助。

何時應該調整DPI設定?

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

  • 處理解析度低於 200 DPI 的掃描文檔
  • 處理歷史或檔案PDF文件 處理複雜的版面或小字體
  • 使用預設設定時遇到準確性問題

對於大多數 OCR 操作,建議使用 300 DPI,而對於文字非常小或細節複雜的文檔,可能需要 600 DPI。

除了PDF之外, IronOCR還支援哪些文件格式?

IronOCR除了支援 PDF 文件外,還全面支援多種文件格式。 您可以處理多種格式的影像,包括:

  • 標準照片格式為JPEG/JPG
  • PNG 格式影像,具有透明度
  • 多頁文件的 TIFF 格式
  • BMP 格式用於未壓縮影像
  • GIF 用於簡單的圖形

此外, IronOCR可以直接從記憶體處理PDF 流,適用於 Web 應用程式和雲端服務。

使用 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);
$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);
$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();
$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);
}
$vbLabelText   $csharpLabel

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

PDF 檔案中,紅色矩形方塊選取了章節標題以進行 OCR 處理;Visual Studio 控制台顯示執行已完成。

找到正確的座標需要了解 PDF 的座標系。 Rectangle 建構子接受四個參數:WidthHeight。 所有尺寸均以像素為單位。 像是帶有標尺功能或調試工具的 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
};
$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成為滿足企業級 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) 使用讀取方法執行 OCR;5) 可選擇指定頁面索引以進行選擇性讀取。

我應該在何時調整 PDF OCR 的 DPI 設定?

雖然 IronOCR 的預設 DPI 設定對大多數標準 PDF 都很有效,但在處理低解析度掃描文件(低於 200 DPI)或包含小文字的 PDF 時,您應該考慮調整 DPI。在 OcrPdfInput 結構中,較高的 DPI 設定可大幅提升特殊文件的閱讀精確度。

OCR 引擎是否能同時處理掃描和可搜尋的 PDF?

是的,IronOCR 可有效處理掃描的 PDF 檔案(以影像為基礎)和可搜尋的 PDF 檔案(以文字為基礎)。基於 Tesseract 的引擎可自動處理不同的 PDF 類型,使其成為從各種 PDF 格式中萃取文字的多功能工具,而無需採用不同的方法。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。

審核人
Jeff Fritz
Jeffrey T. Fritz
首席程序经理 - .NET 社群团队
Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。
準備好開始了嗎?
Nuget 下載 5,525,971 | 版本: 2026.3 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronOcr
執行範例 觀看您的圖片變成可搜尋的文字。