IronOCR 操作指南 可搜尋的 PDF Save 可搜索的 PDFs in C# with IronOCR Curtis Chau 更新:2026年1月25日 下載 IronOCR NuGet 下載 DLL 下載 Windows 安裝程式 開始免費試用 LLM副本 LLM副本 將頁面複製為 Markdown 格式,用於 LLMs 在 ChatGPT 中打開 請向 ChatGPT 諮詢此頁面 在雙子座打開 請向 Gemini 詢問此頁面 在 Grok 中打開 向 Grok 詢問此頁面 打開困惑 向 Perplexity 詢問有關此頁面的信息 分享 在 Facebook 上分享 分享到 X(Twitter) 在 LinkedIn 上分享 複製連結 電子郵件文章 This article was translated from English: Does it need improvement? Translated View the article in English IronOCR 使 C# 開發人員能夠使用 OCR 技術將掃描的文件和影像轉換為可搜尋的 PDF,僅需幾行程式碼即可支援輸出為檔案、位元組或串流。 可搜尋的 PDF,通常被稱為 OCR(光學字元辨識)PDF,是一種包含掃描影像和機器可讀文字的 PDF 文件。 這些 PDF 文件是透過對掃描的紙質文件或圖像執行 OCR 功能創建的,它可以識別圖像中的文字,並將其轉換為可選擇和可搜尋的文字。 IronOCR 提供了一種解決方案,可以對文件執行光學字元識別,並將結果匯出為可搜尋的 PDF 文件。 它支援將可搜尋的 PDF 匯出為文件、位元組和流。 SaveAsSearchablePdf 也可用於 ReadScreenShot 和 ReadDocumentAdvanced 的結果,從而能夠從照片和高級文檔 OCR 工作流程創建可搜尋的 PDF。 這項能力在處理 掃描文件、紙張檔案數位化,或使傳統 PDF 檔案可搜尋以改善文件管理時特別有用。 快速入門:一行匯出可搜尋 PDF 設定 RenderSearchablePdf = true,對輸入執行 Read(...),然後呼叫 SaveAsSearchablePdf(...) — 這就是使用IronOCR產生完全可搜尋 PDF 的全部步驟。 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronOcr PM > Install-Package IronOcr 複製並運行這段程式碼。 new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"); 部署到您的生產環境進行測試 今天就在您的專案中開始使用免費試用IronOCR Free 30 Day Trial 最小工作流程(5 個步驟) 下載一個 C# 庫,用於將結果儲存為可搜尋的 PDF 檔案。 準備圖像和 PDF 文件以進行 OCR 將 RenderSearchablePdf 屬性設定為 true 使用SaveAsSearchablePdf方法輸出可搜尋的 PDF 文件 將可搜尋的 PDF 匯出為位元組和流 如何將 OCR 結果匯出為可搜尋的 PDF? 以下是如何使用 IronOCR 將結果匯出為可搜尋的 PDF 檔案。 您必須先將 Configuration.RenderSearchablePdf 屬性設為 true。 使用 Read 方法取得 OCR 結果物件後,透過指定輸出檔案路徑使用 SaveAsSearchablePdf 方法。 以下程式碼示範如何使用範例 TIFF 檔案。 :path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs using IronOcr; // Instantiate IronTesseract IronTesseract ocrTesseract = new IronTesseract(); // Enable render as searchable PDF ocrTesseract.Configuration.RenderSearchablePdf = true; // Add image using var imageInput = new OcrImageInput("Potter.tiff"); // Perform OCR OcrResult ocrResult = ocrTesseract.Read(imageInput); // Export as searchable PDF ocrResult.SaveAsSearchablePdf("searchablePdf.pdf"); $vbLabelText $csharpLabel 在處理 多頁 TIFF 檔案或複雜文件時,IronOCR 會自動處理所有頁面,並將其納入可搜尋的 PDF 輸出中。 該函式庫可自動處理頁面排序和文字覆蓋定位,確保文字到圖像的映射準確無誤。 下面顯示的是範例 TIFF 檔案的螢幕截圖以及嵌入的可搜尋 PDF 檔案。 嘗試選取 PDF 中的文字,以確認其可搜尋性。 選擇功能還意味著可以在 PDF 檢視器中搜尋文字。 IronOCR 使用特定的字型在影像檔上覆蓋文字,可能會造成文字大小上的一些差異。 TIFF 文件 可搜索的 PDF 如何從照片或進階文件掃描建立可搜尋的 PDF? 使用 ReadScreenShot 或 ReadDocumentAdvanced 時,也可以匯出可搜尋的 PDF 檔案。 這些方法均傳回支援 SaveAsSearchablePdf 的結果類型。 呼叫這些方法時,您可以選擇性地傳遞一個 ModelType。 預設值為 Normal,而 Enhanced 以犧牲速度為代價,提供了更高的準確性。 using IronOcr; var ocr = new IronTesseract(); using var input = new OcrInput(); input.LoadImage("photo.png"); // ReadPhoto with Enhanced model OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced); Console.WriteLine(photoResult.Text); // Save as searchable PDF byte[] pdfBytes = photoResult.SaveAsSearchablePdf(); File.WriteAllBytes("searchable-photo.pdf", pdfBytes); using IronOcr; var ocr = new IronTesseract(); using var input = new OcrInput(); input.LoadImage("photo.png"); // ReadPhoto with Enhanced model OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced); Console.WriteLine(photoResult.Text); // Save as searchable PDF byte[] pdfBytes = photoResult.SaveAsSearchablePdf(); File.WriteAllBytes("searchable-photo.pdf", pdfBytes); $vbLabelText $csharpLabel 照片輸入 從照片產生可搜尋的PDF文件 同樣的方法也適用於 ReadDocumentAdvanced,它會回傳 OcrDocAdvancedResult: // ReadDocumentAdvanced with Enhanced model OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced); byte[] docPdfBytes = docResult.SaveAsSearchablePdf(); File.WriteAllBytes("searchable-doc.pdf", docPdfBytes); // ReadDocumentAdvanced with Enhanced model OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced); byte[] docPdfBytes = docResult.SaveAsSearchablePdf(); File.WriteAllBytes("searchable-doc.pdf", docPdfBytes); $vbLabelText $csharpLabel 發票錄入 從文件中搜尋 PDF 產生的可搜尋 PDF 檔案包含一個不可見的文字層,支援在任何 PDF 檢視器中進行全文搜尋。 例如,在上面的第一個 PDF 中搜尋"牛奶"會返回 3 個匹配項——直接從原始照片中的壁畫中提取出來。 SaveAsSearchablePdf 不支援 ReadPassport() 或 ReadLicensePlate() 結果,並將拋出 ExtensionAdvancedScanException. 處理多頁文件 在處理多頁文件上的 PDF OCR 作業時,IronOCR 會依序處理每頁,並維持原始文件結構。 以下是將多頁掃描 PDF 轉換為可搜尋 PDF 的範例: using IronOcr; // Initialize IronTesseract with configuration var ocrTesseract = new IronTesseract { Configuration = { RenderSearchablePdf = true, PageSegmentationMode = TesseractPageSegmentationMode.Auto } }; // Load a multi-page PDF using var pdfInput = new OcrPdfInput("multi-page-scan.pdf"); // Optionally specify page range (e.g., pages 1-10) pdfInput.SelectPages(1, 10); // Perform OCR with progress tracking OcrResult result = ocrTesseract.Read(pdfInput); // Save as searchable PDF result.SaveAsSearchablePdf("searchable-multi-page.pdf"); // Display total pages processed Console.WriteLine($"Processed {result.Pages.Length} pages"); using IronOcr; // Initialize IronTesseract with configuration var ocrTesseract = new IronTesseract { Configuration = { RenderSearchablePdf = true, PageSegmentationMode = TesseractPageSegmentationMode.Auto } }; // Load a multi-page PDF using var pdfInput = new OcrPdfInput("multi-page-scan.pdf"); // Optionally specify page range (e.g., pages 1-10) pdfInput.SelectPages(1, 10); // Perform OCR with progress tracking OcrResult result = ocrTesseract.Read(pdfInput); // Save as searchable PDF result.SaveAsSearchablePdf("searchable-multi-page.pdf"); // Display total pages processed Console.WriteLine($"Processed {result.Pages.Length} pages"); $vbLabelText $csharpLabel 在建立可搜尋的 PDF 時,如何套用篩選器? SaveAsSearchablePdf 也接受一個布林標誌作為第二個參數,讓您可以對可搜尋的 PDF 應用過濾器或不套用過濾器,從而為開發人員提供選擇的靈活性。 使用影像最佳化篩選器可大幅提升 OCR 準確度,尤其是在處理低品質掃描時。 下面是一個應用灰階濾鏡,然後透過在 true 的第二個參數中放入 SaveAsSearchablePdf 來保存帶有濾鏡的 PDF 的範例。 :path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs using IronOcr; var ocr = new IronTesseract(); var ocrInput = new OcrInput(); // Load a PDF file ocrInput.LoadPdf("invoice.pdf"); // Apply gray scale filter ocrInput.ToGrayScale(); OcrResult result = ocr.Read(ocrInput); // Save the result as a searchable PDF with filters applied result.SaveAsSearchablePdf("outputGrayscale.pdf", true); $vbLabelText $csharpLabel 為達到最佳效果,請考慮使用 過濾精靈 自動決定特定文件類型的最佳過濾器組合。 此工具會分析您的輸入,並建議適當的預處理步驟。 如何修復可搜尋PDF中的錯誤字元? 如果 PDF 中的文字在視覺上顯示正確,但在搜尋或複製時顯示損壞的字符,則該問題是由可搜尋文字層中使用的預設字體引起的。 預設情況下,SaveAsSearchablePdf 使用 Times New Roman 字體,但該字體並未完全支援所有 Unicode 字元。 這會影響包含重音字元或非 ASCII 字元的語言。 要解決這個問題,請提供與 Unicode 相容的字型檔案作為第三個參數: result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf"); result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf"); $vbLabelText $csharpLabel 您也可以將自訂字型名稱指定為第四個參數: result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont"); result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont"); $vbLabelText $csharpLabel 這適用於所有結果類型,包括 OcrPhotoResult 和 OcrDocAdvancedResult,因此無論使用哪種讀取方法產生結果,此修復程序都有效。 對於最初使用 Times New Roman 排版的文檔,建議使用 Liberation Serif,因為它在度量上是相容的,可以保留原始的間距和佈局。 對於通用多語言用途,Noto Sans 或 DejaVu Sans 都是不錯的選擇。 如何將可搜尋的 PDF 匯出為位元組或資料流? 可搜尋 PDF 的輸出也可以分別使用 SaveAsSearchablePdfBytes 和 SaveAsSearchablePdfStream 方法作為位元組或流進行處理。 下面的程式碼範例展示如何使用這些方法。 :path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs // Export searchable PDF byte byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes(); // Export searchable PDF stream Stream pdfStream = ocrResult.SaveAsSearchablePdfStream(); $vbLabelText $csharpLabel 在與檔案系統存取可能受限的雲端儲存服務、資料庫或網路應用程式整合時,這些輸出選項尤其有用。 以下是一個顯示實際應用的延伸範例: using IronOcr; using System.IO; public class SearchablePdfExporter { public async Task ProcessAndUploadPdf(string inputPath) { var ocr = new IronTesseract { Configuration = { RenderSearchablePdf = true } }; // Process the input using var input = new OcrImageInput(inputPath); var result = ocr.Read(input); // Option 1: Save to database as byte array byte[] pdfBytes = result.SaveAsSearchablePdfBytes(); // Store pdfBytes in database BLOB field // Option 2: Upload to cloud storage using stream using (Stream pdfStream = result.SaveAsSearchablePdfStream()) { // Upload stream to Azure Blob Storage, AWS S3, etc. await UploadToCloudStorage(pdfStream, "searchable-output.pdf"); } // Option 3: Return as web response // return File(pdfBytes, "application/pdf", "searchable.pdf"); } private async Task UploadToCloudStorage(Stream stream, string fileName) { // Cloud upload implementation } } using IronOcr; using System.IO; public class SearchablePdfExporter { public async Task ProcessAndUploadPdf(string inputPath) { var ocr = new IronTesseract { Configuration = { RenderSearchablePdf = true } }; // Process the input using var input = new OcrImageInput(inputPath); var result = ocr.Read(input); // Option 1: Save to database as byte array byte[] pdfBytes = result.SaveAsSearchablePdfBytes(); // Store pdfBytes in database BLOB field // Option 2: Upload to cloud storage using stream using (Stream pdfStream = result.SaveAsSearchablePdfStream()) { // Upload stream to Azure Blob Storage, AWS S3, etc. await UploadToCloudStorage(pdfStream, "searchable-output.pdf"); } // Option 3: Return as web response // return File(pdfBytes, "application/pdf", "searchable.pdf"); } private async Task UploadToCloudStorage(Stream stream, string fileName) { // Cloud upload implementation } } $vbLabelText $csharpLabel 效能考量 在處理大量文件時,請考慮實施 多執行緒 OCR 作業,以提高吞吐量。 IronOCR 支援並發處理,可讓您同時處理多個文件: using IronOcr; using System.Threading.Tasks; using System.Collections.Concurrent; public class BatchPdfProcessor { private readonly IronTesseract _ocr; public BatchPdfProcessor() { _ocr = new IronTesseract { Configuration = { RenderSearchablePdf = true, // Configure for optimal performance Language = OcrLanguage.English } }; } public async Task ProcessBatchAsync(string[] filePaths) { var results = new ConcurrentBag<(string source, string output)>(); await Parallel.ForEachAsync(filePaths, async (filePath, ct) => { using var input = new OcrImageInput(filePath); var result = _ocr.Read(input); string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf"); result.SaveAsSearchablePdf(outputPath); results.Add((filePath, outputPath)); }); Console.WriteLine($"Processed {results.Count} files"); } } using IronOcr; using System.Threading.Tasks; using System.Collections.Concurrent; public class BatchPdfProcessor { private readonly IronTesseract _ocr; public BatchPdfProcessor() { _ocr = new IronTesseract { Configuration = { RenderSearchablePdf = true, // Configure for optimal performance Language = OcrLanguage.English } }; } public async Task ProcessBatchAsync(string[] filePaths) { var results = new ConcurrentBag<(string source, string output)>(); await Parallel.ForEachAsync(filePaths, async (filePath, ct) => { using var input = new OcrImageInput(filePath); var result = _ocr.Read(input); string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf"); result.SaveAsSearchablePdf(outputPath); results.Add((filePath, outputPath)); }); Console.WriteLine($"Processed {results.Count} files"); } } $vbLabelText $csharpLabel 進階組態選項 對於更進階的情境,您可以利用 詳細的 Tesseract 配置,針對特定的文件類型或語言微調 OCR 引擎: var advancedOcr = new IronTesseract { Configuration = { RenderSearchablePdf = true, TesseractVariables = new Dictionary<string, object> { { "preserve_interword_spaces", 1 }, { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } }, PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn }, Language = OcrLanguage.EnglishBest }; var advancedOcr = new IronTesseract { Configuration = { RenderSearchablePdf = true, TesseractVariables = new Dictionary<string, object> { { "preserve_interword_spaces", 1 }, { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } }, PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn }, Language = OcrLanguage.EnglishBest }; $vbLabelText $csharpLabel 摘要 使用 IronOCR 創建可搜尋的 PDF 既直接又靈活。 無論您需要處理單一影像、多頁文件、透過 ReadPhoto 處理照片,還是透過 ReadDocumentAdvanced 處理進階文件掃描,該庫都提供了強大的方法來產生各種格式的可搜尋 PDF。 使用 ModelType 參數可以在標準 ML 模型和增強型 ML 模型之間進行選擇,以提高準確率。 以檔案、位元組或串流形式匯出的能力,使其可適用於任何應用程式架構,從桌上型電腦應用程式到雲端服務。 對於更進階的 OCR 場景,請瀏覽全面的程式碼範例或參考API 文件以取得詳細的方法簽章和選項。 常見問題解答 如何使用 C# 從掃描的影像建立可搜尋的 PDF? IronOCR 可讓您輕鬆地從掃描影像建立可搜尋的 PDF。只需在設定中將 RenderSearchablePdf 設為 true,在輸入影像上使用 Read() 方法,然後以所需的輸出路徑呼叫 SaveAsSearchablePdf()。IronOcr 將會對影像執行 OCR,並產生 PDF,在原始影像上覆蓋可選擇、可搜尋的文字。 哪些檔案格式可以轉換成可搜尋的 PDF? IronOCR 可以將 JPG、PNG、TIFF 等多種圖像格式以及現有的 PDF 文件轉換為可搜尋的 PDF。該函式庫支援單頁影像和 TIFF 檔案等多頁文件,可自動處理所有頁面,並在輸出的可搜尋 PDF 中維持適當的頁面排序。 我可以將可搜尋的 PDF 匯出為位元組陣列或串流,而不是檔案嗎? 是的,IronOCR 支持导出多种格式的可搜索 PDF。除了使用 SaveAsSearchablePdf() 直接儲存至檔案外,您也可以將 OCR 結果匯出為位元組陣列或串流,讓您輕鬆與網路應用程式、雲端儲存或資料庫系統整合,而無需建立臨時檔案。 建立可搜尋的 PDF 至少需要多少程式碼? 使用 IronOCR 建立可搜尋的 PDF 只需一行程式碼即可完成: new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true }.}.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf").這展示了 IronOCR 精簡的 API 設計。 在可搜尋的 PDF 中,文字覆蓋如何運作? IronOCR 會自動處理已識別文字的定位,將其視為 PDF 中原始影像上方的隱形覆蓋層。這可確保準確的文字對圖像映射,讓使用者可以選擇和搜尋文字,同時保持原始文件的視覺外觀。這個函式庫使用專門的字型和定位演算法來達成這個目標。 Curtis Chau 立即與工程團隊聊天 技術作家 Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。 審核人 Jeffrey T. Fritz 首席程序经理 - .NET 社群团队 Jeff 也是 .NET 和 Visual Studio 团队的首席程序经理。他是 .NET Conf 虚拟会议系列的执行制作人,并主持“Fritz 和朋友”这一每周两次的開發者的直播节目,在节目上讨论技術并与观众一起编写代碼。Jeff 撰写研讨会、主持演讲,并计划大型 Microsoft 開發者活動(包括 Microsoft Build、Microsoft Ignite、.NET Conf 和 Microsoft MVP Summit)的內容。 準備好開始了嗎? Nuget 下載 5,556,263 | 版本: 2026.3 剛剛發布 開始免費試用 免費 NuGet 下載 總下載量:5,556,263 查看許可證 還在捲動嗎? 想要快速證明? PM > Install-Package IronOcr 執行範例 觀看您的圖片變成可搜尋的文字。 免費 NuGet 下載 總下載量:5,556,263 查看許可證