
How to Use a Document Scanner SDK in a .NET MAUI Application
随着移动技术的兴起,诸如 Scanbot SDK 和 Native SDK 等文档扫描应用程序已成为个人和企业不可或缺的工具。 在本教程中,我们将探讨如何使用最新版本的 .NET 多平台应用程序界面(MAUI)和 IronOCR(一个强大的 .NET 光学字符识别库)创建文档扫描应用程序。 .NET MAUI 简化了跨平台移动应用的创建,确保在诸如 Android 等设备上的无缝部署。 通过本指南的学习,您将能够轻松开发自己的文档扫描 SDK 应用程序,从图像和扫描文件中提取文本。
如何在 .NET MAUI 应用程序中使用文档扫描 SDK
- 安装 IronOCR C# 库以使用文档扫描 SDK。
- 使用必要的控件设计 .NET MAUI 表单。
- 使用 MediaPicker.CapturePhotoAsync 方法拍摄照片。
- 将拍摄的照片转换为 Stream。
- 将流传递给 OcrInput LoadImage 方法。
- 使用 IronTesseract Read 方法执行 OCR。
- 使用 OcrResult Text 属性显示文档文本。
IronOCR - The C# OCR Library
IronOCR 是由 Iron Software, LLC 开发的一款先进的光学字符识别(OCR)软件,旨在准确高效地将图像和扫描文件转换为可编辑文本。 OCR 技术彻底改变了企业的文档处理方式,简化了从扫描文件、PDF 和图像等各种来源中提取有价值信息的过程。
IronOCR 因其先进的功能、强大的性能和易于集成而在 OCR 解决方案中脱颖而出。 无论您是希望将 OCR 功能集成到应用程序中的开发人员,还是寻求简化文档管理流程的企业,IronOCR 都提供全面的解决方案。
IronOCR 的主要功能
- 高精度: IronOCR 采用先进的算法和机器学习技术,在文本识别方面实现了卓越的精确度。 它能够准确地从复杂文档中提取文本,包括低分辨率或质量较差的扫描图像。
- 多语言支持: IronOCR 支持超过 125 种语言的文本识别,适合在多语言环境中运营的企业使用。
- 图像预处理: IronOCR 提供多种图像预处理功能,如噪声消除、对比度调整和倾斜校正,以提高准确性。 这些技术改善了 OCR 结果,特别是在图像失真或不完美的情况下。
- 支持多种文件格式: IronOCR 支持多种文件格式,包括 TIFF、JPEG、PNG 和 PDF,确保与不同文档源的兼容性。
- 定制选项: 开发人员可以定制 IronOCR 的行为以满足特定要求,在识别参数和工作流程集成方面提供灵活性。
- 快速且可扩展: 为优化性能,IronOCR 能迅速从大量文档中提取文字。 其可扩展的架构确保无论文档量如何,都能顺畅运行。
- 与 .NET 应用程序集成: IronOCR 无缝集成到.NET 应用程序中,提供易于使用的 API 以包含 OCR 功能。 这简化了开发,并加快了启用 OCR 应用程序的上市时间。
- 文档分类和数据提取: 除了基本的文本识别外,IronOCR 还提供用于文档分类和数据提取的高级功能,识别特定的数据字段,如名称、地址或发票号。
前提条件
- 基本的 C# 编程知识。
- 已安装 .NET MAUI 工作负载的 Visual Studio 2022。
- 通过 NuGet 包管理器安装的 IronOCR 包库。
1. 设置您的 .NET MAUI 项目
- 打开 Visual Studio 2022 并创建一个新的 .NET MAUI 应用程序项目。

- 选择合适的项目名称并配置您的项目设置。

- 确保您已安装必要的 Android 和 iOS SDK 以进行目标平台设备开发。
2. 安装 IronOCR 库
- 在 Visual Studio 中右键点击您的解决方案。
- 选择"管理解决方案的 NuGet 包"并在浏览选项卡中搜索 "IronOCR"。

- 将 IronOCR 库安装到您的项目中。
3. 设计 UI
让我们从设计我们的 MainPage.xaml 布局开始。 我们将创建一个简单的布局,其中包含用于显示拍摄照片的图像控件、用于拍照的 Capture 按钮和用于显示提取文本的标签。
这是 MainPage.xaml 的 XAML 代码:
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:d="http://schemas.microsoft.com/dotnet/2021/maui/design"
x:Class="DocumentScanner.MainPage">
<ScrollView>
<VerticalStackLayout Padding="30,0" Spacing="25">
<Image Source="dotnet_bot.png"
HeightRequest="185"
Aspect="AspectFit"
SemanticProperties.Description="dot net bot in a race car number eight" />
<Label Text="Welcome to .NET MAUI Document Scanner SDK"
style="{StaticResource Headline}"
SemanticProperties.HeadingLevel="Level1" />
<Label Text="Using IronOCR"
style="{StaticResource SubHeadline}"
SemanticProperties.HeadingLevel="Level2"
SemanticProperties.Description="Welcome to .NET MAUI Document Scanner SDK" />
<!-- Camera preview -->
<Image x:Name="cameraPreview" />
<!-- Capture button -->
<Button Text="Capture" Clicked="OnCaptureClicked" />
<!-- Text display area -->
<Label x:Name="textLabel" Text="Recognized Text:"/>
</VerticalStackLayout>
</ScrollView>
</ContentPage>
在这个布局中:
- 我们使用 VerticalStackLayout 纵向排列控件。
- 名为 cameraPreview 的 Image 控件用于显示拍摄的照片。
- Button 控件在点击时触发 OnCaptureClicked 事件处理器。
- 名为 textLabel 的 Label 控件用于显示提取的文本。
输出

4. 实施文档扫描功能
要将文本提取功能集成到我们的 .NET MAUI 文档扫描应用程序中,我们将按照以下步骤进行:
- 利用相机 API: 利用 .NET MAUI 提供的相机 API 直接在您的应用程序中捕获图像文件。
- 将图像传给 IronOCR: 图像捕获后,将其传递给 IronOCR 进行文本提取,利用其强大的功能。
- 显示提取的文本: 在应用程序用户界面的指定区域内显示提取的文本,以供用户查看。
以下是实现此步骤的相应代码片段:
using IronOcr;
namespace DocumentScanner
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
}
private async void OnCaptureClicked(object sender, EventArgs e)
{
License.LicenseKey = "YOUR-LICENSE-KEY-HERE";
try
{
// Request camera permissions
var status = await Permissions.RequestAsync<Permissions.Camera>();
if (status == PermissionStatus.Granted)
{
// Take photo
var photo = await MediaPicker.CapturePhotoAsync();
if (photo != null)
{
// Display captured photo in Image
cameraPreview.Source = ImageSource.FromStream(() => photo.OpenReadAsync().Result);
using (var stream = await photo.OpenReadAsync())
{
// Use a stream from the captured photo for OCR
var ocr = new IronTesseract();
using var ocrInput = new OcrInput();
ocrInput.LoadImage(stream);
var ocrResult = ocr.Read(ocrInput);
if (string.IsNullOrEmpty(ocrResult.Text))
{
await DisplayAlert("Error", "No Text Detected!", "OK");
}
else
{
await DisplayAlert("Text Detected!", ocrResult.Text, "OK");
// Display extracted text
textLabel.Text = ocrResult.Text;
}
}
}
}
else
{
// Camera permission denied
await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK");
}
}
catch (Exception ex)
{
// Handle exception
await DisplayAlert("Error", ex.Message, "OK");
}
}
}
}Imports IronOcr
Namespace DocumentScanner
Partial Public Class MainPage
Inherits ContentPage
Public Sub New()
InitializeComponent()
End Sub
Private Async Sub OnCaptureClicked(ByVal sender As Object, ByVal e As EventArgs)
License.LicenseKey = "YOUR-LICENSE-KEY-HERE"
Try
' Request camera permissions
Dim status = Await Permissions.RequestAsync(Of Permissions.Camera)()
If status = PermissionStatus.Granted Then
' Take photo
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo IsNot Nothing Then
' Display captured photo in Image
cameraPreview.Source = ImageSource.FromStream(Function() photo.OpenReadAsync().Result)
Using stream = Await photo.OpenReadAsync()
' Use a stream from the captured photo for OCR
Dim ocr = New IronTesseract()
Dim ocrInput As New OcrInput()
ocrInput.LoadImage(stream)
Dim ocrResult = ocr.Read(ocrInput)
If String.IsNullOrEmpty(ocrResult.Text) Then
Await DisplayAlert("Error", "No Text Detected!", "OK")
Else
Await DisplayAlert("Text Detected!", ocrResult.Text, "OK")
' Display extracted text
textLabel.Text = ocrResult.Text
End If
End Using
End If
Else
' Camera permission denied
Await DisplayAlert("Permission Denied", "Camera permission is required to capture photos.", "OK")
End If
Catch ex As Exception
' Handle exception
Await DisplayAlert("Error", ex.Message, "OK")
End Try
End Sub
End Class
End Namespace代码解释
让我们逐步解析代码:
- 在 MainPage.xaml.cs 文件中,定义了 OnCaptureClicked 方法以处理 Capture 按钮的点击事件。
- 设置 IronOCR 许可证密钥,这是使用 IronOCR 库必要的。 将
"YOUR-LICENSE-KEY-HERE"替换为您的实际许可证密钥。 - 使用 Permissions.
RequestAsync<Permissions.Camera>() 请求相机权限,以确保应用能够访问设备的摄像头。 - 调用
MediaPicker.CapturePhotoAsync()使用摄像头拍摄照片。 如果成功,照片将在 cameraPreview Image 控件中显示。 - 从拍摄的照片中打开流,以便作为 IronOCR 的输入,创建一个 IronTesseract 实例,将图像流加载到一个 OcrInput 对象中,并调用 Read 方法执行 OCR。
- 如果成功,提取出的文本将显示在 textLabel 控件中。 如果未检测到文本,则使用 DisplayAlert 显示错误消息。
欲了解更多关于 IronOCR 的探索和其他代码示例,请访问此代码示例页面。
5. 测试文档扫描应用程序
- 在各种平台上运行应用程序(如 Android、iOS 和 Windows)以确保跨平台兼容性。
- 测试不同场景,如扫描带有各种字体、大小和方向的文档。
- 确认提取的文本在 UI 上准确显示。
输出 - 无文本的扫描文档

输出 - 含文本的扫描文档

结论
通过本教程,您已学习如何在 .NET MAUI 中使用 IronOCR 文档扫描 SDK。 文档扫描应用在实际应用中有广泛用途,从数字化纸质文件到从收据和发票中提取储存的信息。 利用 IronOCR 的强大功能和 .NET MAUI 的灵活性,您可以构建符合各种用例的功能丰富的文档扫描应用程序。 尝试不同的功能,探索其他库,并继续磨练技能以创建更令人印象深刻的应用程序。
有关 IronOCR 功能的更多详细信息,请访问此文档页面。

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。
相关文章


