如何將結果儲存為 HTML 檔案中的 hOCR | IronOCR

使用 IronOCR 在 C# 中將 OCR 結果儲存為 hOCR HTML

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

IronOCR 允許開發人員透過將 RenderHocr 設為 true,並使用 SaveAsHocrFileSaveAsHocrString 方法,將 OCR 結果儲存為 hOCR HTML 檔案,同時以結構化 HTML 格式保留文字版面配置與字元座標。

快速入門:將 OCR 輸出儲存為 hOCR HTML 檔案

透過單次設定與單次方法呼叫,即可啟用 hOCR 渲染並將結果直接匯出至 HTML 檔案。

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

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

    var hocr = new IronTesseract { Configuration = { RenderHocr = true } }.Read(new OcrInput("image.png")).SaveAsHocrString();
  3. 部署至您的生產環境進行測試

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

    arrow pointer


什麼是 hOCR 以及為何要使用它?

hOCR(全稱為"HTML-based OCR")是一種檔案格式,用於以結構化方式呈現光學字元辨識(OCR)的結果。 hOCR 檔案採用 HTML 格式編寫,提供了一種儲存識別文字、版面配置資訊,以及圖像或文件中每個識別字元座標的方法。 這種結構化格式使 hOCR 對於需要文字位置資料的應用特別有價值,例如文件索引、輔助技術工具以及進階搜尋實作。

對於開發人員而言,hOCR 格式至關重要,因為他們所建構的應用程式不僅需要識別文本內容,還需掌握該文本在原始文件中的具體位置。 此空間資訊可實現諸如為除錯而標示文字、在原始圖像上建立可點擊的疊加層,以及在將掃描文件轉換為可存取格式時維持文件版面配置完整性等功能。 對於處理掃描文件的 Enterprise 應用程式而言,hOCR 為進階文件理解與擷取工作流程奠定了基礎。

如何將 OCR 結果匯出為 hOCR 檔案?

若要將結果匯出為 hOCR 格式,請先將 Configuration.RenderHocr 屬性設定為 true 以啟用該功能。 從 Read 方法取得 OcrResult 物件後,請使用 SaveAsHocrFile 方法將 OCR 結果匯出為 HTML。 此方法會輸出一個 HTML 檔案,其中包含輸入文件的讀取結果。 以下程式碼示範了如何使用下列範例 TIFF 檔案。

:path=/static-assets/ocr/content-code-examples/how-to/html-export-export-html.cs
using IronOcr;

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

// Enable render as hOCR
ocrTesseract.Configuration.RenderHocr = true;

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
imageInput.Title = "Html Title";

// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Export as HTML
ocrResult.SaveAsHocrFile("result.html");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable render as hOCR
ocrTesseract.Configuration.RenderHocr = True

' Add image
Dim imageInput = New OcrImageInput("Potter.tiff")
imageInput.Title = "Html Title"

' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Export as HTML
ocrResult.SaveAsHocrFile("result.html")
$vbLabelText   $csharpLabel

OcrInput 類別提供了豐富的選項,用於在 OCR 處理前對影像進行預處理。 您可以套用篩選條件、指定感興趣的區域,並處理各種輸入格式,包括多頁 TIFF 檔案。 在處理 PDF OCR 文字擷取時,同樣的 hOCR 匯出方法可無縫套用。

為何設定 RenderHocr 很重要?

RenderHocr 屬性設定為 true,可指示 IronOCR 在 OCR 處理過程中產生必要的 hOCR 結構。 若未進行此設定,SaveAsHocrFileSaveAsHocrString 方法將無法產生格式正確且保留版面的 hOCR 輸出。 此設定必須在呼叫 Read 方法之前完成,因為它會影響 Tesseract 引擎處理及組織輸出資料的方式。

hOCR 格式會保留關鍵的元資料,包括:

  • 字元級邊界框
  • WORD 信心分數
  • 行與段落結構
  • 頁面尺寸與 DPI 資訊
  • 若可偵測,請保留字型特性

此元資料在實作電腦視覺工作流程,或建置需要理解文件結構(而非僅限於簡單文字擷取)的系統時,特別有用。

哪些檔案類型支援 hOCR 匯出?

IronOCR 支援從多種圖像格式(包括 TIFF、PNG、JPEG、BMP 和 GIF)匯出 hOCR 資料。 PDF 文件亦可進行處理並匯出為 hOCR 格式,每頁的文字與版面配置資訊皆會保留於 HTML 結構中。 此函式庫能無縫處理單頁影像及多頁文件。

針對不同檔案類型以獲得最佳效果:

  • TIFF:適用於掃描文件,支援多頁處理
  • PDF:非常適合混合內容(文字與圖片)
  • PNG/JPEG:最適合需要 OCR 處理的照片或螢幕截圖
  • BMP:適用於高品質掃描的未壓縮格式

在處理護照車牌等特殊文件類型時,hOCR 格式有助於保留不同文字元素之間的空間關係,使開發者能根據文字位置更輕鬆地擷取特定欄位。

如何將 OCR 結果匯出為 HTML 字串?

使用相同的 TIFF 範例圖片,運用 SaveAsHocrString 方法將 OCR 結果匯出為 HTML 字串。 此方法會傳回一個 HTML 字串。

:path=/static-assets/ocr/content-code-examples/how-to/html-export-export-html-string.cs
// Export as HTML string
string hocr = ocrResult.SaveAsHocrString();
' Export as HTML string
Dim hocr As String = ocrResult.SaveAsHocrString()
$vbLabelText   $csharpLabel

字串輸出包含完整的 hOCR 標記,可供進一步處理、儲存於資料庫,或整合至網頁應用程式中。 此方法在建置可搜尋的 PDF 系統或實作自訂文件索引解決方案時特別有用。 對於使用 125 種國際語言的開發者而言,hOCR 格式能保留特定語言的文字屬性與閱讀方向資訊。

何時應使用字串輸出而非檔案?

當您需要在記憶體中處理或操作 hOCR 資料、與網路服務整合,或將結果儲存至資料庫時,字串輸出是最佳選擇。 此方法可避免對檔案系統的依賴,並能為網頁應用程式實現動態 HTML 生成。 常見的使用情境包括:

  • Web API 整合:直接在 API 回應中傳回 hOCR 資料
  • 資料庫儲存:將 OCR 結果與文件元資料一併儲存
  • 即時處理:無需磁碟 I/O 開銷即可處理結果
  • Cloud Functions:在檔案存取受限的無伺服器環境中運作
  • 內容管理系統:將 OCR 結果整合至現有的文件工作流程中

對於需要追蹤進度的應用程式,字串輸出可讓系統在部分結果產生時立即進行處理。 這在實作多執行緒 OCR 處理時尤為有益,因為該處理方式可同時處理多份文件。

如何將多頁內容處理為 HTML 字串?

處理多頁文件時,SaveAsHocrString 會將所有頁面整合為單一 HTML 字串,並包含適當的分頁標記。 每頁內容均以適當的 hOCR 元素包覆,以維持文件結構與頁面邊界。

// Processing multi-page documents
using var multiPageInput = new OcrPdfInput("multi-page-document.pdf");
multiPageInput.Title = "Multi-Page Document";

 // Configure for hOCR output
 IronTesseract tesseract = new IronTesseract();
 tesseract.Configuration.RenderHocr = true;

 // Read all pages
 OcrResult result = tesseract.Read(multiPageInput);

 // Export as single HTML string with all pages
 string fullHocr = result.SaveAsHocrString();

 // Or process page by page
 foreach (var page in result.Pages)
 {
     string pageHocr = page.SaveAsHocrString();
     // Process individual page hOCR
 }
// Processing multi-page documents
using var multiPageInput = new OcrPdfInput("multi-page-document.pdf");
multiPageInput.Title = "Multi-Page Document";

 // Configure for hOCR output
 IronTesseract tesseract = new IronTesseract();
 tesseract.Configuration.RenderHocr = true;

 // Read all pages
 OcrResult result = tesseract.Read(multiPageInput);

 // Export as single HTML string with all pages
 string fullHocr = result.SaveAsHocrString();

 // Or process page by page
 foreach (var page in result.Pages)
 {
     string pageHocr = page.SaveAsHocrString();
     // Process individual page hOCR
 }
Imports IronOcr

' Processing multi-page documents
Using multiPageInput As New OcrPdfInput("multi-page-document.pdf")
    multiPageInput.Title = "Multi-Page Document"

    ' Configure for hOCR output
    Dim tesseract As New IronTesseract()
    tesseract.Configuration.RenderHocr = True

    ' Read all pages
    Dim result As OcrResult = tesseract.Read(multiPageInput)

    ' Export as single HTML string with all pages
    Dim fullHocr As String = result.SaveAsHocrString()

    ' Or process page by page
    For Each page In result.Pages
        Dim pageHocr As String = page.SaveAsHocrString()
        ' Process individual page hOCR
    Next
End Using
$vbLabelText   $csharpLabel

此方法可與 PDF 流無縫整合,並支援進階情境,例如處理特定頁碼範圍,或對不同頁面套用不同的 OCR 設定。

進階 hOCR 實作技巧

hOCR 輸出品質的最佳實踐有哪些?

為確保 hOCR 輸出品質最佳,建議在處理前先套用影像優化濾鏡

var input = new OcrImageInput("document.png");
input.DeNoise();  // Remove image noise
input.Deskew();   // Correct image rotation
input.Scale(2);   // Upscale for better recognition

IronTesseract ocr = new IronTesseract();
ocr.Configuration.RenderHocr = true;
var result = ocr.Read(input);
var input = new OcrImageInput("document.png");
input.DeNoise();  // Remove image noise
input.Deskew();   // Correct image rotation
input.Scale(2);   // Upscale for better recognition

IronTesseract ocr = new IronTesseract();
ocr.Configuration.RenderHocr = true;
var result = ocr.Read(input);
Dim input As New OcrImageInput("document.png")
input.DeNoise()  ' Remove image noise
input.Deskew()   ' Correct image rotation
input.Scale(2)   ' Upscale for better recognition

Dim ocr As New IronTesseract()
ocr.Configuration.RenderHocr = True
Dim result = ocr.Read(input)
$vbLabelText   $csharpLabel

對於掃描品質不佳的文件,額外的預處理步驟可顯著提升 hOCR 的準確度。 篩選器精靈可協助您針對特定文件類型,找出最佳的篩選器組合。

hOCR 結構如何支援進階處理?

生成的 hOCR 遵循標準規範,透過嵌套的 div 元素來呈現文件層級結構:

<div class='ocr_page' title='bbox 0 0 2480 3508'>
  <div class='ocr_carea' title='bbox 156 114 2324 3395'>
    <p class='ocr_par' title='bbox 157 114 2323 164'>
      <span class='ocr_line' title='bbox 157 114 2323 164'>
        <span class='ocr_word' title='bbox 157 114 294 161'>Hello</span>
        <span class='ocr_word' title='bbox 334 119 483 161'>World</span>
      </span>
    </p>
  </div>
</div>
<div class='ocr_page' title='bbox 0 0 2480 3508'>
  <div class='ocr_carea' title='bbox 156 114 2324 3395'>
    <p class='ocr_par' title='bbox 157 114 2323 164'>
      <span class='ocr_line' title='bbox 157 114 2323 164'>
        <span class='ocr_word' title='bbox 157 114 294 161'>Hello</span>
        <span class='ocr_word' title='bbox 334 119 483 161'>World</span>
      </span>
    </p>
  </div>
</div>
HTML

此結構可實現精確的文字位置擷取與進階文件分析功能,對於需要空間文字關聯性或版面配置保留的應用場景極具價值。 在處理表格擷取時,hOCR 格式有助於維持表格結構與儲存格間的關聯性。

bbox(邊界框)屬性包含格式為"bbox left top right bottom"的座標,為每個文字元素提供像素級精確的位置資料。 此資訊對於以下對象至關重要:

  • 建立具備文字選取功能的互動式文件檢視器
  • 實作能保留版面的遮蔽系統
  • 建立能維持閱讀順序的無障礙工具
  • 開發文件比對系統

對於需要更詳細配置選項的開發人員,Tesseract 詳細配置指南提供了會影響 hOCR 輸出品質與結構的高階設定。

RenderHocr

常見問題

什麼是 hOCR,它為何對 OCR 應用程式有所助益?

hOCR(基於 HTML 的 OCR)是一種檔案格式,能以結構化 HTML 呈現 OCR 結果,同時儲存已識別的文字及空間資訊(如字元座標)。IronOCR 支援 hOCR 匯出功能,對於需要文字位置資料、文件索引、無障礙輔助工具,以及在處理掃描文件時維持版面完整性的應用程式而言,此功能極具價值。

如何在我的 C# OCR 應用程式中啟用 hOCR 輸出?

若要啟用 IronOCR 的 hOCR 輸出功能,請將 IronTesseract 實例的 Configuration.RenderHocr 屬性設定為 true。此設定會指示 IronOCR 將 OCR 結果以 hOCR 格式準備好,讓您能透過 SaveAsHocrFile 或 SaveAsHocrString 方法將其匯出。

有哪些方法可用於匯出 hOCR 結果?

IronOCR 提供兩種匯出 hOCR 結果的方法:SaveAsHocrFile() 會將輸出直接儲存至磁碟上的 HTML 檔案;SaveAsHocrString() 則會將 hOCR HTML 作為字串傳回,供您在應用程式中進行後續處理或儲存。

能否僅用一行程式碼,將 OCR 結果匯出為 hOCR 格式?

是的,IronOCR 支援透過方法鏈接實現單行 hOCR 匯出。您可以建立一個啟用 RenderHocr 的 IronTesseract 實例,讀取輸入資料,並在單一行程式碼中呼叫 SaveAsHocrString():var hocr = new IronTesseract { Configuration = { RenderHocr = true } }.Read(new OcrInput("image.png")).SaveAsHocrString();

hOCR 會從 OCR 結果中保留哪些類型的空間資訊?

hOCR 能保留原始影像或文件中每個識別字元的版面配置資訊與座標。IronOCR 的 hOCR 匯出功能會保留這些空間資料,從而實現諸如用於除錯的文字標示、在影像上建立可點擊的疊加層,以及理解文字在原始文件中出現位置等功能。

IronOCR 是否支援多種語言?

IronOCR 支援多種語言,使其成為適用於需要識別不同語言文字的全球應用程式的多功能工具。

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,896,332 | 版本: 2026.5 just released
Still Scrolling Icon

還在往下捲動嗎?

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