Scanbot SDK 与 IronBarcode:C# 条形码库对比
Scanbot SDK 使用设备摄像头打开全屏条形码扫描视图。 没有 BarcodeScanner.Read(imagePath) 方法。 扫描仪就是相机用户界面。 如果您的条形码位于服务器上的 PDF 发票中,Scanbot 就无法提供帮助。这并非批评,而是一种架构描述。 Scanbot SDK 是一个 MAUI 相机控制软件,它将原生 iOS 和 Android 扫描 API 封装成一个精美的取景器组件。 ScanbotBarcodeSDK.BarcodeScanner.Open(configuration) 将控制权交给全屏摄像头体验,用户将设备对准条形码,SDK 会在实时视频流中检测到条形码,并将结果返回给您的应用程序。这种比较至关重要,因为 NuGet 包名称(ScanbotBarcodeSDK.MAUI)和产品类别("条形码 SDK")可能会误导开发人员将其用于服务器端文档处理、WPF 桌面应用程序或 ASP.NET Core API。本文将解释这两个工具之间的架构差异、各自的实际功能,以及IronBarcode在哪些方面可以满足 Scanbot 在结构上无法满足的需求。
了解 Scanbot SDK
Scanbot SDK 是由 Scanbot GmbH 开发的商业移动条码扫描 SDK。 其 .NET 产品是 ScanbotBarcodeSDK.MAUI,该软件包的目标平台为 net8.0-android 和 net8.0-ios。 该 SDK 需要一个 .NET MAUI Application 项目,其中包含 <UseMaui>true</UseMaui> 和移动目标 TargetFrameworks。 它无法在控制台应用程序、类库、 ASP.NET Core项目或面向 Windows 的 MAUI 应用程序中解析。
Scanbot 的设计理念是以摄像头为核心。 它的整个 API 界面都围绕着实时取景器体验而设计:配置对象控制相机 UI 的外观、实时视频管道监视的格式以及如何向用户提供反馈。 该库为 iOS 和 Android 消费者及Enterprise移动应用提供了一个完善的扫描组件。
-主要平台目标:通过.NET MAUI框架实现的 iOS 和 Android 移动设备; Windows 和 macOS 上的 MAUI 目标不受支持。 -输入模型:仅限实时设备摄像头画面——不存在文件路径、流或字节数组重载。
- API 设计:
BarcodeScanner.Open(configuration)将控制权交给全屏相机体验,并在用户确认扫描或取消扫描时返回OperationResult-相机用户界面功能:实时取景器(带扫描区域叠加显示)、手电筒控制、宽高比设置、音频和触觉反馈以及方向锁定 -支持的格式: 20 多种一维格式(Code 128、EAN-13、UPC 等)和多种二维格式(QR、DataMatrix、PDF417、Aztec) -无文件处理功能:没有从已保存的图像文件、流或 PDF 文档中读取条形码的机制。 -不生成条形码: SDK 读取条形码; 它不会产生它们 -授权模式:年度固定费用; 无论扫描量如何,年度费用都是固定的。 项目类型限制:无法在控制台、类库、 ASP.NET Core、WPF、WinForms、Azure Functions 或 Docker 托管项目中编译。
摄像机流水线架构
Scanbot 的架构需要在应用程序启动时进行初始化,然后调用摄像头进行扫描。 没有接受文件路径或流的 BarcodeScanner.Open() 重载; 方法签名需要 BarcodeScannerConfiguration,因为整个操作都是由摄像头驱动的:
// In MauiProgram.cs or App.xaml.cs — initialization required before any scan
ScanbotSDK.Initialize(new ScanbotSDKConfiguration
{
LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
EnableLogging = false
});
// Configure accepted formats and camera appearance
var configuration = new BarcodeScannerConfiguration();
configuration.BarcodeFormats = new[]
{
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
// In MauiProgram.cs or App.xaml.cs — initialization required before any scan
ScanbotSDK.Initialize(new ScanbotSDKConfiguration
{
LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
EnableLogging = false
});
// Configure accepted formats and camera appearance
var configuration = new BarcodeScannerConfiguration();
configuration.BarcodeFormats = new[]
{
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
};
// Open full-screen camera scanner — UI takes over the entire screen
var result = await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration);
if (result.Status == OperationResult.Ok)
{
foreach (var barcode in result.Barcodes)
Console.WriteLine($"{barcode.Format}: {barcode.Text}");
}
Imports System
' In MauiProgram.vb or App.xaml.vb — initialization required before any scan
ScanbotSDK.Initialize(New ScanbotSDKConfiguration With {
.LicenseKey = "YOUR-SCANBOT-LICENSE-KEY",
.EnableLogging = False
})
' Configure accepted formats and camera appearance
Dim configuration As New BarcodeScannerConfiguration()
configuration.BarcodeFormats = New BarcodeFormat() {
BarcodeFormat.Code128,
BarcodeFormat.QrCode,
BarcodeFormat.Ean13
}
' Open full-screen camera scanner — UI takes over the entire screen
Dim result = Await ScanbotBarcodeSDK.BarcodeScanner.Open(configuration)
If result.Status = OperationResult.Ok Then
For Each barcode In result.Barcodes
Console.WriteLine($"{barcode.Format}: {barcode.Text}")
Next
End If
SDK 实时处理实时视频帧,在取景器中突出显示检测到的条形码,并在条形码确认或用户取消时返回。 配置对象控制相机用户界面外观,而不是处理行为。 这就是完整的模型。
了解IronBarcode
IronBarcode是由Iron Software开发的商业.NET条形码读取和生成库。 它采用文件处理模型:输入源包括文件路径、流、字节数组和 PDF 文档。 没有相机用户界面,也不需要移动硬件。 该库可在所有.NET项目类型中运行。
IronBarcode 的静态 BarcodeReader.Read() 方法接受调用代码提供的任何源,无论该源是如何生成的。 通过 HTTP 上传的文件、磁盘上的 PDF 文件、blob 存储中的图像或从 base64 字符串解码的字节数组都是等效的输入。 该库返回一组解码结果,每个结果都包含条形码值、格式和页码(如适用)。
-输入源:文件路径、流、字节数组和 PDF 文档(原生 PDF 解析,而非图像提取)
支持的项目类型:控制台应用程序、 ASP.NET Core、WPF、WinForms、 Blazor Server、Azure Functions、AWS Lambda、Docker、Windows 服务、 .NET MAUI (所有目标平台,包括 Windows 和 macOS)以及.NET Framework 4.6.2 及更高版本。
条形码生成:生成条形码,格式可以是图像,也可以嵌入到 HTML 和 PDF 文档中。
-格式支持:支持 30 多种一维格式和 5 种二维格式,包括 QR 码、DataMatrix 码、PDF417 码、Aztec 码和 MaxiCode 码。
-阅读增强功能:基于机器学习的错误纠正和损坏条形码恢复,适用于难以读取的真实世界图像
-配置对象: BarcodeReaderOptions 控制处理行为(速度、多条形码检测),而非相机用户界面外观
-授权模式:一次性永久购买,分为四个级别(Lite749 美元, Plus1499 美元, Professional2999 美元,Unlimited 版 5999 美元); 无需每年续费
功能对比
下表列出了 Scanbot SDK 和IronBarcode之间的根本区别:
| 特征 | Scanbot SDK | IronBarcode |
|---|---|---|
| 主要用例 | 移动设备实时摄像头条形码扫描 | 文件和文档条形码读取和生成 |
| 输入模型 | 设备摄像头画面 | 文件路径、流、字节数组、PDF |
| 平台支持 | iOS 和 Android MAUI 系统 | 所有.NET平台和项目类型 |
| 条形码生成 | 否 | 是 |
| PDF条形码提取 | 否 | 是 |
| 许可模式 | 年度固定费用 | 一次性永久 |
| 实时摄像头界面 | 是的——精致的取景器组件 | 否(请使用 MediaPicker 进行照片拍摄) |
详细功能对比
| 特征 | Scanbot SDK | IronBarcode |
|---|---|---|
| 阅读 | ||
| 从文件路径输入 | 否 | 是 |
| 来自流的输入 | 否 | 是 |
| 从字节数组输入 | 否 | 是 |
| PDF条形码提取 | 否 | 是 |
| 实时相机取景器 | 是 | 否 |
| 实时帧扫描 | 是 | 否 |
| 自动格式检测 | 是 | 是 |
| 机器学习误差校正 | 否 | 是 |
| 条形码损坏恢复 | 否 | 是 |
| 一维格式计数 | 20岁以上 | 30+ |
| 二维格式计数 | QR码、DataMatrix码、PDF417码、Aztec码 | QR码、DataMatrix码、PDF417码、Aztec码、MaxiCode码 |
| 一代 | ||
| 条形码生成 | 否 | 是 |
| 平台 | ||
| iOS 主界面 | 是 | 是 |
| Android MAUI | 是 | 是 |
| Windows MAUI | 否 | 是 |
| macOS MAUI | 否 | 是 |
| 控制台应用程序 | 否 | 是 |
| ASP.NET Core | 否 | 是 |
| Blazor服务器 | 否 | 是 |
| WPF 应用程序 | 否 | 是 |
| WinForms应用程序 | 否 | 是 |
| Azure 功能 | 否 | 是 |
| AWS Lambda | 否 | 是 |
| Docker / Linux | 否 | 是 |
| Windows 服务 | 否 | 是 |
| .NET Framework 4.6.2+ | 否 | 是 |
| 许可 | ||
| 许可模式 | 年度固定费用 | 一次性永久 |
| 出版定价 | 联系销售 | 是的(749美元至5999美元) |
| 批量定价 | 不适用(固定费用) | 不适用(永久层级) |
架构:相机流水线与文件处理
Scanbot SDK 和IronBarcode之间最显著的区别不是功能上的差距,而是两个库在理解其输入方式上的根本架构差异。
Scanbot SDK 方法
Scanbot 的架构基于原生相机管道构建。当调用 BarcodeScanner.Open(configuration) 时,该库会将控制权交给设备在 iOS 和 Android 上的原生相机 API,从而实现全屏相机体验。 该库持续处理实时视频帧,对每一帧应用条形码检测,并在确认条形码或用户关闭扫描器时将控制权返回给调用应用程序。 Scanbot 模型中没有静态图像的概念——输入始终是来自设备摄像头的实时视频帧流。
该设计可带来流畅的扫描体验:实时条形码在取景器中突出显示,可配置的扫描区域具有纵横比控制,手电筒切换,音频和触觉反馈,以及方向锁定。 这些是 Scanbot 为移动相机使用场景投入开发的 UI 功能。 但缺点是,该库与相机硬件以及驱动它的移动操作系统密不可分。
IronBarcode方法
IronBarcode接受任何包含条形码的图像的二进制表示形式,并通过相同的静态方法返回解码结果,而不管图像是如何获得的:
// Install: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
// From a file path — works in any project type
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// From a PDF — reads all barcodes on all pages
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var result in pdfResults)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
// From a stream — useful for HTTP file uploads
using var stream = File.OpenRead("document.pdf");
var streamResults = BarcodeReader.Read(stream);
// With processing options
var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced };
var configuredResults = BarcodeReader.Read("image.png", options);
// Install: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
// From a file path — works in any project type
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// From a PDF — reads all barcodes on all pages
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var result in pdfResults)
Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
// From a stream — useful for HTTP file uploads
using var stream = File.OpenRead("document.pdf");
var streamResults = BarcodeReader.Read(stream);
// With processing options
var options = new BarcodeReaderOptions { Speed = ReadingSpeed.Balanced };
var configuredResults = BarcodeReader.Read("image.png", options);
Imports IronBarCode
Imports System.IO
' Install: dotnet add package IronBarcode
License.LicenseKey = "YOUR-KEY"
' From a file path — works in any project type
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
' From a PDF — reads all barcodes on all pages
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each result In pdfResults
Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
' From a stream — useful for HTTP file uploads
Using stream = File.OpenRead("document.pdf")
Dim streamResults = BarcodeReader.Read(stream)
End Using
' With processing options
Dim options = New BarcodeReaderOptions With {.Speed = ReadingSpeed.Balanced}
Dim configuredResults = BarcodeReader.Read("image.png", options)
同一个调用可以在控制台应用程序、 ASP.NET Core控制器、Azure 函数、WPF 表单或 MAUI 页面中运行。 IronBarcode可以直接从 PDF 中读取条形码——不是从 PDF 中提取图像,而是直接解析 PDF 结构,在每一页上查找条形码。
平台和部署覆盖范围
Scanbot SDK 的平台范围由其NuGet包支持的目标平台决定。IronBarcode的作用域与.NET运行时本身相匹配。
Scanbot SDK 方法
Scanbot 的软件包目标为 net8.0-android 和 net8.0-ios。 一个只声明了这两个目标的 .NET MAUI Application 项目将成功构建。 但是,当将 net8.0-windows 或 net8.0-maccatalyst 添加到 TargetFrameworks 时,Scanbot 包引用无法解析这些目标。 这不是配置问题——该软件包没有提供适用于 Windows 或 macOS 的程序集。 故障出现在桌面目标上的首次构建尝试期间,而不是NuGet安装时。
此限制意味着 Scanbot 在结构上与包含桌面平台的多目标 MAUI 项目不兼容,并且无论框架版本如何,它都不能用于任何非 MAUI 服务器或桌面项目类型。
IronBarcode方法
IronBarcode以单个NuGet包的形式分发,可在所有.NET项目类型和目标框架中正确解析:
// Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package IronBarcode
// Same package, same API — works in ASP.NET Core, WPF, console, MAUI, Azure Functions
dotnet add package IronBarcode
对于也面向 Windows 或 macOS 桌面的 MAUI 应用程序, IronBarcode通过单个软件包引用支持所有四个 MAUI 目标,无需平台条件配置。 构建面向 iOS、Android 和 Windows 的 MAUI 项目的团队可以添加一次 IronBarcode,然后在所有三个平台上使用 BarcodeReader.Read(),而无需进行任何修改。
MAUI集成模式
这两个库都可以在.NET MAUI项目中使用,但根据每个库的输入模型,集成模式有很大不同。
Scanbot SDK 方法
在面向 iOS 和 Android 的 MAUI 项目中,Scanbot 提供了一个嵌入在应用程序导航流程中的原生相机取景器。 BarcodeScanner.Open() 调用会显示全屏扫描器,当用户完成或关闭扫描时,结果会返回到调用页面。 这种集成使移动应用程序拥有专门的扫描用户界面,感觉就像是平台原生应用一样。
当项目规模扩大时,这种局限性就显现出来了。 在 MAUI 项目中添加 Windows 或 macOS 目标会导致这些平台上的构建失败。 添加需要条形码处理的服务器端组件需要单独的库。 Scanbot 依赖项无法跟随项目扩展到 iOS 和 Android 以外的平台。
IronBarcode方法
在 MAUI 项目中,IronBarcode 与该平台的 MediaPicker 配合使用,以捕获照片并从生成的图像中读取条形码。 扫描工作流程使用系统摄像头,而不是定制取景器:
// Works on iOS, Android, Windows, and macOS MAUI targets
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK");
}
// Works on iOS, Android, Windows, and macOS MAUI targets
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK");
}
Imports IronBarCode
Private Async Sub ScanButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
Await DisplayAlert("Scanned", $"{result.Format}: {result.Value}", "OK")
Next
End Using
End Using
End Sub
这项交易是实时取景器叠加。 用户看到的是系统相机界面,而不是自定义扫描区域,这对于只需对准拍摄即可满足的商业应用来说已经足够了。 .NET MAUI条形码扫描器教程涵盖了iOS和Android目标的完整 MAUI 集成模式,包括权限处理和项目配置。
许可模式
Scanbot SDK 和IronBarcode使用的商业许可结构截然不同。
扫描机器人方法
Scanbot采用年度固定收费模式。 无论扫描量多少,年度许可费用都是固定的——无论是每年扫描 100 次还是每年扫描 1000 万次,费用都一样。 这为拥有稳定纯移动端部署的团队提供了可预测的年度预算。 确切价格需联系 Scanbot 销售团队; 暂无已公布的数据。 每年续期义务意味着许可证是一项持续的运营成本。
IronBarcode方法
IronBarcode采用一次性永久购买模式,分为四个级别: Lite749美元, Plus版1499美元, Professional2999美元,Unlimited版5999美元。购买版本无需每年续费即可继续使用。 许可期限内的软件更新包含在内。 Iron Software网站上公布了产品定价,无需销售人员进行洽谈。
API 映射参考
评估这两个库架构差异的团队会发现此映射有助于理解概念等效性:
| Scanbot SDK | IronBarcode |
|---|---|
ScanbotSDK.Initialize(new ScanbotSDKConfiguration { LicenseKey = "..." }) |
IronBarCode.License.LicenseKey = "key" |
new BarcodeScannerConfiguration() |
new BarcodeReaderOptions() |
ScanbotBarcodeSDK.BarcodeScanner.Open(configuration) |
BarcodeReader.Read(path / stream / bytes) |
result.Status == OperationResult.Ok |
检查 results.Any() 或 results.FirstOrDefault() != null |
result.Barcodes |
返回值 BarcodeReader.Read() |
barcode.Format |
result.Format (IronBarCode.BarcodeEncoding) |
barcode.Text |
result.Value |
BarcodeFormat.Code128 |
BarcodeEncoding.Code128 |
BarcodeFormat.QrCode |
BarcodeEncoding.QRCode |
BarcodeFormat.Ean13 |
BarcodeEncoding.EAN13 |
BarcodeScannerConfiguration.FinderAspectRatio |
没有等效项——图像取景由 MediaPicker 处理 |
BarcodeScannerConfiguration.FlashEnabled |
没有等效选项——请使用 MediaPicker 选项 |
| 仅摄像头输入 | 文件路径、流、字节数组或 PDF |
| iOS 和 Android MAUI 系统 | 所有.NET平台 |
当团队考虑从 Scanbot SDK 迁移到IronBarcode时
通常情况下,开发团队会根据多种因素来评估IronBarcode ,看它能否替代 Scanbot SDK 或作为其补充。
服务器端和后端处理
使用 Scanbot 构建的移动应用程序通常会与处理文档上传、批量作业或 API 端点的服务器端组件一起存在。 当服务器端组件需要进行条形码处理时(例如从上传的 PDF 中提取条形码、验证传入文档中的条形码值或处理图像附件中的条形码数据),Scanbot 就无法使用了。 该软件包无法在ASP.NET Core、Azure Functions、控制台应用程序或任何非 MAUI 项目中编译。 在这种情况下,团队会发现自己既要维护移动条形码依赖项,又要维护单独的服务器端条形码解决方案,或者评估IronBarcode是否可以用一个软件包来满足这两个角色。
桌面应用程序要求
MAUI 的价值主张通常是跨平台覆盖:一个代码库即可覆盖 iOS、Android 和 Windows。 当 Windows MAUI 目标进入开发计划时(无论是最初的需求还是后来的添加),Scanbot 的软件包都无法在该目标上解析。 Windows 构建过程中,如果依赖项列表中包含 Scanbot,则无法继续进行。团队会在首次尝试构建桌面目标平台时发现此问题,解决方法是从共享依赖项列表中移除 Scanbot。对于必须使用 Windows 桌面目标平台的团队而言, IronBarcode成为唯一一款既支持移动端又支持桌面平台的条码库。
PDF和文档工作流程
从实时扫描向文档自动化发展的应用会遇到 Scanbot 的功能瓶颈。 从 PDF 发票中读取条形码、从扫描的货运标签图像中提取跟踪代码或处理存档文档中的条形码数据——这些工作流程在 Scanbot 模型中都不可能实现,因为输入必须始终是实时摄像头画面。 IronBarcode可以原生处理所有这些基于文件的输入。 MAUI 移动应用程序中使用的同一个软件包可以在后台处理作业中从 PDF 文档中提取条形码,而无需任何额外的依赖项。
可预测的许可成本
每年的续费费用需要在每个续费周期进行重新评估。 对于最初以小规模移动部署方式使用 Scanbot,后来扩展到拥有更多用户或平台的更广泛部署的团队来说,随着规模的扩大,他们可能会发现年费不再那么划算。IronBarcode的一次性永久授权模式免除了续费义务。 进行许可证续期评估的团队通常会考虑一次性购买是否更符合他们的长期成本规划,尤其是在扩展的项目范围包括 Scanbot 本身就不涵盖的服务器端或桌面平台时。
常见迁移注意事项
从 Scanbot SDK 迁移到IronBarcode 的团队应该做好准备,应对过渡过程中出现的一些技术差异。
没有实时取景器等效物
Scanbot 的实时相机取景器(具有扫描区域叠加、连续检测和触觉反馈)在IronBarcode中没有直接的对应功能。 替换模式使用 MAUI 的 MediaPicker.CapturePhotoAsync() 打开系统相机,拍摄照片,并将图像返回以进行处理。 用户体验是照片拍摄流程,而不是连续扫描流程。 对于商业应用(库存、物流、文档处理),这种区别很少具有重要意义。 对于以实时叠加层为核心产品体验的消费者应用而言,这是一个真正的用户体验差异,在决定迁移之前应该对其进行评估。
事件回调模式直接返回
Scanbot 的 BarcodeScanner.Open() 是异步的,并返回一个 OperationResult,其中包含一个状态字段和一个 Barcodes 集合。IronBarcode的 BarcodeReader.Read() 直接返回一个集合——没有带有状态字段的包装对象。 成功检查从 result.Status == OperationResult.Ok 变为 results.Any() 或对 results.FirstOrDefault() 进行空值检查。
格式枚举命名空间更改
Scanbot 的 BarcodeFormat 枚举(例如,BarcodeFormat.Code128)和IronBarcode的 BarcodeEncoding 枚举(例如,BarcodeEncoding.Code128)包含类似的成员,但它们是不同命名空间中的不同类型。 按枚举类型存储或比较格式值的代码需要更新类型引用。 基于 .ToString() 输出的字符串比较通常是兼容的,因为成员名称相似,但显式枚举类型比较需要更新为 BarcodeEncoding 值。
Windows 构建附加组件
如果在迁移之前 Scanbot 软件包导致 Windows MAUI 构建失败,则将其删除即可解决这些失败。 添加IronBarcode后,请验证 MAUI 应用程序代码中是否正确处理了 Windows 特有的功能(文件选择对话框、本地文件路径、Windows 权限),因为这些功能与 iOS 和 Android 的文件访问模式不同。
IronBarcode的其他功能
除了本次对比中涵盖的核心场景之外, IronBarcode还提供了一些随着项目扩展而变得重要的功能:
-条形码生成:以图像文件、流或嵌入 HTML 和 PDF 文档中的内容形式,生成所有主流的一维和二维条形码。 -多条形码文档处理:一次调用即可读取多页 PDF 文档中每一页上的条形码,每个结果都包含其所在页码。 -机器学习纠错:从标准检测算法无法解码的损坏、部分遮挡或低对比度图像中恢复条形码 -批量图像处理:在一次操作中处理图像路径或流数组,实现高吞吐量的文档工作流程 -条码读取器选项调优:控制读取速度、多条码检测、格式过滤和图像预处理,以在特定用例中平衡吞吐量和准确性。
- iOS MAUI 集成:全面支持使用 MediaPicker 模式在 iOS 主界面 应用程序中读取条形码
- Android MAUI 集成:全面支持 Android MAUI 应用中的条形码读取,API 与 iOS 相同
.NET兼容性和未来准备情况
IronBarcode支持.NET 6、 .NET 7、 .NET 8 和.NET 9,以及.NET Framework 4.6.2 及更高版本。 该库会定期更新,与.NET 的发布节奏保持一致,确保与预计在 2026 年底发布的.NET 10 及未来版本兼容。 由于IronBarcode是一个文件处理库,而不是特定于平台的相机 SDK,因此它不依赖于移动操作系统 API 或硬件功能,这意味着它的兼容性范围会随着.NET生态系统的发展而扩大,而不是受限于移动平台支持周期。
结论
Scanbot SDK 和IronBarcode属于不同的产品类别,但都属于"条形码 SDK"这一范畴。Scanbot 是一款移动摄像头扫描组件,可为 iOS 和 Android 应用提供流畅的实时取景器体验。 IronBarcode是一个文件和文档处理库,可以读取和生成各种.NET项目类型和部署目标的条形码。 比较的是范围和架构,而不是每个库在其预期领域内的质量。
Scanbot SDK 在其定义的范围内确实非常强大。 对于消费者和Enterprise移动应用,用户可以直接将设备摄像头对准物理条形码并期望获得实时视觉反馈——零售、票务、仓库查找——Scanbot 的摄像头管道和完善的取景器组件是专为这种交互模型而构建的。 如果部署仅限于 iOS 和 Android 移动设备,实时扫描体验是产品的核心,并且年度固定费用符合预算,那么 Scanbot 对于这种范围狭窄且定义明确的使用场景来说是一个合理的选择。
当条形码处理需求超出实时摄像头场景时, IronBarcode就显得尤为重要。 服务器端文档处理、接受文件上传的ASP.NET Core端点、Windows 或 macOS 上的桌面应用程序、由 Blob 存储触发的 Azure Functions、包含桌面平台的多目标 MAUI 项目以及批量 PDF 处理作业都属于IronBarcode的原生范围。 该单一软件包无需平台条件配置即可安装,并且无论代码是在移动设备、服务器还是桌面上运行,都提供相同的 BarcodeReader.Read() 调用。
对于既需要实时移动摄像头扫描又需要文件或服务器处理的团队来说,架构最简洁的解决方案是使用 Scanbot 处理移动摄像头 UI,而使用IronBarcode处理其他所有事情。 这种方法的代价是需要两个条形码依赖项和两份许可协议。 对于愿意接受系统摄像头而不是自定义取景器进行移动扫描交互的团队来说, IronBarcode仅凭一个软件包和一个许可证即可涵盖整个项目范围——从 MAUI 移动应用程序到服务器 API 和 Windows 桌面伴侣程序。
常见问题解答
什么是 Scanbot SDK?
Scanbot SDK 是一个 .NET 条形码库,用于在 C# 应用程序中生成和读取条形码。它是开发人员在为 .NET 项目选择条形码解决方案时评估的几个备选方案之一。
Scanbot SDK 和 IronBarcode 的主要区别是什么?
IronBarcode 使用静态、无状态的 API,无需实例管理,而 Scanbot SDK 通常需要先创建实例并进行配置才能使用。IronBarcode 还提供原生 PDF 支持、自动格式检测以及跨所有环境的单密钥许可。
IronBarcode 的授权比 Scanbot SDK 更容易吗?
IronBarcode 使用单一许可证密钥,同时涵盖开发和生产部署。与将 SDK 密钥与运行时密钥分开的许可系统相比,这简化了 CI/CD 流水线和 Docker 配置。
IronBarcode是否支持Scanbot SDK支持的所有条形码格式?
IronBarcode 支持超过 30 种条码符号体系,包括 QR 码、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自动检测功能意味着无需显式枚举格式。
IronBarcode是否支持原生PDF条码读取?
是的。IronBarcode 可以直接从 PDF 文件中读取条形码,使用 `BarcodeReader.Read("document.pdf")` 方法,无需单独的 PDF 渲染库。每页的读取结果包括页码、条形码格式、数值和置信度评分。
与 Scanbot SDK 相比,IronBarcode 在批量处理方面有何不同?
IronBarcode 的静态方法是无状态的,并且天然线程安全,因此可以直接使用 Parallel.ForEach,而无需进行线程级实例管理。所有定价层级均无吞吐量上限。
IronBarcode支持哪些.NET版本?
IronBarcode 在单个 NuGet 包中支持 .NET Framework 4.6.2+、.NET Core 3.1 以及 .NET 5、6、7、8 和 9。平台目标包括 Windows x64/x86、Linux x64 和 macOS x64/ARM。
如何在.NET项目中安装IronBarcode?
通过 NuGet 安装 IronBarcode:在程序包管理器控制台中运行“Install-Package IronBarCode”,或在命令行界面中运行“dotnet add package IronBarCode”。无需其他 SDK 安装程序或运行时文件。
与 Scanbot 不同,我可以在购买前评估 IronBarcode 的功能吗?
是的。IronBarcode 的试用模式会返回完整的解码条形码值——只有生成的输出图像才会带有水印。您可以在购买前,用自己的文档测试读取准确率。
Scanbot SDK 和 IronBarcode 的价格有什么区别?
IronBarcode 的永久单开发者许可证起价为 749 美元,涵盖开发和生产环境。定价详情和批量许可选项请访问 IronBarcode 许可页面。无需单独的运行时许可证。
从 Scanbot SDK 迁移到 IronBarcode 是否简单?
从 Scanbot SDK 迁移到 IronBarcode 主要涉及将基于实例的 API 调用替换为 IronBarcode 的静态方法、移除许可相关的样板代码以及更新结果属性名称。大多数迁移工作都是减少代码,而不是增加代码。
IronBarcode 能生成带有 logo 的二维码吗?
是的。`QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以将品牌图片原生嵌入二维码中,并支持配置纠错功能。此外,它还支持通过 `ChangeBarCodeColor()` 函数创建彩色二维码。

