在C#中使用IronOCR保存可搜尋的PDF
IronOCR使C#開發者能將掃描的檔案和圖像轉換成可搜尋的PDF,使用OCR技術,支持以檔案、位元組或流的形式輸出,僅需幾行程式碼。
可搜尋的PDF通常被稱為OCR(光學字元識別)PDF,是一種PDF文件型別,包含掃描圖像和機器可讀文字。 這些PDF是通過對掃描的紙質檔案或圖像進行OCR處理,識別圖像中的文字,並轉換成可選擇和搜尋的文字來建立的。
ReadDocumentAdvanced的結果,支持從照片和高級文件OCR工作流建立可搜尋的PDF。 此功能特別有用於將紙質檔案數位化或讓舊版PDF可搜尋,以便更好的文件管理。
快速入門:一行程式碼導出可搜尋的PDF
設置SaveAsSearchablePdf(...)。 這就是IronOCR生成完整可搜尋PDF所需的一切。
最小工作流程(5步)
- 下載一個C#程式庫以將結果保存為可搜尋的PDF
- 準備OCR的圖像和PDF文件
- 將RenderSearchablePdf屬性設置為
true - 利用
SaveAsSearchablePdf方法輸出一個可搜尋的PDF檔案 - 將可搜尋的PDF導出為位元組和流
如何將OCR結果導出為可搜尋的PDF?
要使用IronOCR將結果導出為可搜尋的PDF,請將SaveAsSearchablePdf並提供輸出檔案路徑。
輸入
來自哈利波特小說的一頁,掃描為TIFF檔案,通過OcrImageInput載入。 該頁面包含密集的印刷文字,是測試可搜尋PDF文字層的真實輸入。
potter.tiff:作為OCR輸入使用的掃描小說頁面,生成帶有不可見文字層的可搜尋PDF。
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;
// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();
// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;
// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr
' Create the OCR engine: defaults to English with balanced speed and accuracy
Dim ocrTesseract As New IronTesseract()
' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = True
' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
Using imageInput As New OcrImageInput("Potter.tiff")
' Run OCR; returns a result containing the recognized text and spatial layout data
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
End Using
輸出
searchablePdf.pdf:可搜尋的PDF輸出。選擇或搜尋任何單詞以驗證OCR文字層。
生成的PDF嵌入了原始掃描頁面圖像,且每個識別出的字上方都有不可見的文字層。 在檢視器中選擇或搜尋任何單詞,以確認文字層是否存在。
IronOCR對此使用特定字體,這可能會導致渲染文字大小與原始大小略有不同。
在處理多頁TIFF檔案或複雜文件時,IronOCR自動處理所有頁面並將其包含在輸出中。 該程式庫自動處理頁面排序和文字覆蓋位置,確保準確的文字到圖像映射。
如何從照片或高級文件掃描建立可搜尋的PDF?
使用ReadDocumentAdvanced時,也提供可搜尋的PDF導出功能。 這些方法中的每一種返回一種支持SaveAsSearchablePdf的結果型別。
調用這些方法時,您可以選擇性地傳遞ModelType。 預設為Enhanced在速度的代價下提供更高的準確性。
輸入
一張牆壁壁畫的照片,包含塗鴉文字,通過LoadImage載入。 場景包含多個單詞嵌入在現實環境中,這使得它成為用Enhanced模型的實用測試。
photo.png:使用增強模型的ReadPhoto所載入的牆壁壁畫照片,用於生成可搜尋的PDF。
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-3.cs
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.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("photo.png")
' ReadPhoto with Enhanced model
Dim photoResult As OcrPhotoResult = ocr.ReadPhoto(input, ModelType.Enhanced)
Console.WriteLine(photoResult.Text)
' Save as searchable PDF
Dim pdfBytes As Byte() = photoResult.SaveAsSearchablePdfBytes()
File.WriteAllBytes("searchable-photo.pdf", pdfBytes)
End Using
輸出
searchable-photo.pdf:從ReadPhoto中導出的可搜尋PDF。文字層在任何PDF檢視器中支持全文搜尋。
生成的可搜尋PDF包含了識別字上方的不可見文字層。 在PDF檢視器中搜尋"Milk"返回3個匹配項,直接從原始照片中的塗鴉文字提取。
相同的方法適用於OcrDocAdvancedResult:
輸入
通過LoadImage載入的掃描發票。 它包含結構化字段(供應商名稱、明細項目和總數),Enhanced模型識別並作為可搜尋文字層嵌入。
invoice.png:載入到OcrInput並傳入ReadDocumentAdvanced增強模型的掃描發票。
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-4.cs
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdfBytes();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("invoice.png")
' ReadDocumentAdvanced with Enhanced model
Dim docResult As OcrDocAdvancedResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced)
Dim docPdfBytes As Byte() = docResult.SaveAsSearchablePdfBytes()
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes)
End Using
輸出
searchable-doc.pdf:從ReadDocumentAdvanced中導出的可搜尋PDF。發票欄位是可選擇和可搜尋的。
ExtensionAdvancedScanException。
處理多頁文件
在進行多頁文件上的PDF OCR操作時,IronOCR按順序處理每一頁並保持原始文件結構。
輸入
一份來自Hartwell Capital Management的11頁年度報告,通過OcrPdfInput載入。 使用Read調用中處理它們。
multi-page-scan.pdf:用作多頁可搜尋PDF轉換輸入的11頁Hartwell Capital Management年度報告。
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-multi-page.cs
using IronOcr;
// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();
// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));
// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);
// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
Imports IronOcr
' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
Dim ocrTesseract As New IronTesseract()
' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10))
' Run OCR across all selected pages in order
Dim result As OcrResult = ocrTesseract.Read(pdfInput)
' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)
End Using
輸出
searchable-multi-page.pdf:10頁可搜尋PDF輸出。每一頁都有一個不可見的文字層,支持全文搜尋。
生成的PDF包含10頁(原始報告的1-10頁),每頁上方都有文字層,使提取的內容在任何PDF檢視器中可選擇和可搜尋。
如何在建立可搜尋的PDF時應用濾鏡?
SaveAsSearchablePdf的第二個參數接受布林值來控制是否對嵌入的輸出應用圖像濾鏡。 使用圖像優化濾鏡可以顯著提高OCR準確性,特別是在處理低質量掃描時。
下面的例子應用了灰度濾鏡,並將true作為第二個參數來嵌入經過濾鏡處理的圖像進入可搜尋PDF輸出中。
:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;
// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();
// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");
// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);
// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr
' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()
' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")
' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)
' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
為獲得最佳效果,考慮使用濾鏡精靈自動確定適合您具體文件型別的最佳濾鏡組合。 該工具會分析您的輸入並提出適當的預處理步驟。
我如何修正可搜尋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");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf")
您還可以指定自定義字體名稱作為第四個參數:
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf", "MyFont")
這適用於所有結果型別,包括OcrDocAdvancedResult,因此無論哪種讀取方法產生的結果,修正都能起作用。
在無法寫入文件路徑的情況下,IronOCR還支持將可搜尋的PDF作為位元組陣列或流返回。
如何將可搜尋的PDF導出為位元組或流?
可搜尋PDF的輸出也可以用位元組或流方式處理,分別使用SaveAsSearchablePdfStream方法。 下面的程式碼範例展示了如何使用這些方法。
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();
// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Return as a byte array: suited for storing in a database or sending in an HTTP response body
Dim pdfByte As Byte() = ocrResult.SaveAsSearchablePdfBytes()
' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
這些輸出選項在整合雲儲存服務、資料庫或web應用程式時非常有用,特別是在文件系統存取有限的情況下。 以下例子展示了實際應用:
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
}
}
Imports IronOcr
Imports System.IO
Imports System.Threading.Tasks
Public Class SearchablePdfExporter
Public Async Function ProcessAndUploadPdf(inputPath As String) As Task
Dim ocr As New IronTesseract With {
.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True
}
}
' Process the input
Using input As New OcrImageInput(inputPath)
Dim result = ocr.Read(input)
' Option 1: Save to database as byte array
Dim pdfBytes As Byte() = result.SaveAsSearchablePdfBytes()
' Store pdfBytes in database BLOB field
' Option 2: Upload to cloud storage using stream
Using pdfStream As Stream = result.SaveAsSearchablePdfStream()
' Upload stream to Azure Blob Storage, AWS S3, etc.
Await UploadToCloudStorage(pdfStream, "searchable-output.pdf")
End Using
' Option 3: Return as web response
' Return File(pdfBytes, "application/pdf", "searchable.pdf")
End Using
End Function
Private Async Function UploadToCloudStorage(stream As Stream, fileName As String) As Task
' Cloud upload implementation
End Function
End Class
性能考量
在處理大量文件時,考慮實施多執行緒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");
}
}
Imports IronOcr
Imports System.Threading.Tasks
Imports System.Collections.Concurrent
Public Class BatchPdfProcessor
Private ReadOnly _ocr As IronTesseract
Public Sub New()
_ocr = New IronTesseract With {
.Configuration = New OcrConfiguration With {
.RenderSearchablePdf = True,
' Configure for optimal performance
.Language = OcrLanguage.English
}
}
End Sub
Public Async Function ProcessBatchAsync(filePaths As String()) As Task
Dim results As New ConcurrentBag(Of (source As String, output As String))()
Await Task.Run(Sub()
Parallel.ForEach(filePaths, Sub(filePath)
Using input As New OcrImageInput(filePath)
Dim result = _ocr.Read(input)
Dim outputPath As String = Path.ChangeExtension(filePath, ".searchable.pdf")
result.SaveAsSearchablePdf(outputPath)
results.Add((filePath, outputPath))
End Using
End Sub)
End Sub)
Console.WriteLine($"Processed {results.Count} files")
End Function
End Class
進階配置選項
對於更進階的情境,您可以利用詳細的Tesseract配置來微調OCR引擎針對具體文件型別或語言:
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-12.cs
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
};
Imports System.Collections.Generic
Dim advancedOcr = New IronTesseract With {
.Configuration = New IronTesseractConfiguration With {
.RenderSearchablePdf = True,
.TesseractVariables = New Dictionary(Of String, Object) From {
{"preserve_interword_spaces", 1},
{"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}
},
.PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
},
.Language = OcrLanguage.EnglishBest
}
這些配置選項同樣適用於所有三種輸出方法:SaveAsSearchablePdfStream。 下面的摘要收集了完整的可搜尋PDF方法集及其相應的輸出格式。
總結
使用IronOCR建立可搜尋的PDF既簡單又靈活。 無論您需要處理單張照片、由ReadDocumentAdvanced進行的高級文件掃描,該程式庫都提供了強大的方法以多種格式生成可搜尋的PDF。 使用ModelType參數在標準和增強型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結果匯出為位元組陣列或流,使其易於與Web應用程式、雲端儲存或資料庫系統整合,無需建立臨時文件。
建立可搜尋PDF所需的最少程式碼是什麼?
使用IronOCR建立可搜尋的PDF只需一行程式碼:new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"). 這展示了IronOCR的簡化API設計。
可搜尋PDF中的不可見文字層如何運作?
IronOCR自動處理在PDF中原始圖像上作為不可見層的識別文字定位。這確保準確的文字到圖像映射,允許使用者選擇和搜尋文字,同時保持原始文件的視覺外觀。該程式庫使用專門的字體和定位演算法來達到此目的。
我可以從照片或截圖中建立可搜尋的PDF嗎?
是的,SaveAsSearchablePdf支持來自ReadPhoto、ReadScreenShot和ReadDocumentAdvanced的結果。每個方法返回的結果型別都支持可搜尋的PDF匯出,讓實際照片、截圖或複雜文件掃描轉換為可搜尋的PDF變得容易。
ModelType參數是做什麼的?
ModelType參數控制哪些預訓練的ML模型用於OCR。Normal是預設值,處理調整到960像素的圖像以獲得快速結果。Enhanced支持高達2560像素的圖像,保留更細的細節並提高高解析度輸入的準確性。
為什麼我在我的可搜尋PDF中複製或搜索的字元會出現損壞?
這是因為可搜尋文字層中使用的預設字體(Times New Roman)不完全支持所有Unicode字元。要解決此問題,請將Unicode相容的字體文件作為SaveAsSearchablePdf的第三個參數傳入。如果您的文件最初是Times New Roman排版的,並且在使用其他字體時發現間距不一致,請嘗試Liberation Serif,因為它具有相同的字形尺寸,並保持原始佈局。
IronOCR如何提高資料精確性?
IronOCR通過其先進的識別算法和影像校正功能提高資料精確性,確保文字提取過程既可靠又精確。
IronOCR有免費試用版嗎?
有的,Iron Software提供IronOCR的免費試用版,允許使用者在做出購買決定前測試其功能和能力。

