Scanbot SDK vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
El SDK de Scanbot abre una vista de escaneo de códigos de barras a pantalla completa utilizando la cámara del dispositivo. No existe el método BarcodeScanner.Read(imagePath). El escáner es la interfaz de usuario de la cámara. Si su código de barras se encuentra en una factura en formato PDF alojada en un servidor, Scanbot no podrá ayudarle. Esto no es una crítica, sino una descripción de la arquitectura del sistema. SDK de Scanbot es un control de cámara para MAUI que integra las API de escaneo nativas de iOS y Android en un componente de visor pulido. ScanbotBarcodeSDK.BarcodeScanner.Open(configuration)entrega el control a una experiencia de cámara a pantalla completa, el usuario apunta el dispositivo a un código de barras, el SDK lo detecta en la transmisión de vídeo en directo y el resultado vuelve a su aplicación. La comparación es importante porque el nombre del paquete NuGet - ScanbotBarcodeSDK.MAUI - y la categoría del producto - "SDK de código de barras" - puede llevar a los desarrolladores a evaluarlo para el procesamiento de documentos del lado del servidor, aplicaciones de escritorio WPF o APIs ASP.NET Core. Este artículo explica la diferencia arquitectónica entre las dos herramientas, lo que cada una hace realmente, y donde IronBarcode cubre escenarios que Scanbot estructuralmente no puede.
Comprensión del SDK de Scanbot
Scanbot SDK es un kit de desarrollo de software (SDK) comercial para el escaneo de códigos de barras en dispositivos móviles, desarrollado por Scanbot GmbH. Su oferta para .NET es ScanbotBarcodeSDK.MAUI, un paquete dirigido a net8.0-android y net8.0-ios. El SDK requiere un proyecto .NET MAUI Application con <UseMaui>true</UseMaui> y objetivos móviles en su TargetFrameworks. No se resolverá en una aplicación de consola, una biblioteca de clases, un proyecto ASP.NET Coreo una aplicación MAUI dirigida a Windows.
Scanbot está diseñado como un producto que prioriza la cámara. Toda su interfaz de programación de aplicaciones (API) está orientada a la experiencia del visor en tiempo real: los objetos de configuración controlan el aspecto de la interfaz de usuario de la cámara, los formatos que monitoriza el sistema de vídeo en directo y cómo se proporciona información al usuario. La biblioteca ofrece un componente de escaneo optimizado para aplicaciones móviles de consumo y Enterprise para iOS y Android.
- Plataforma principal de destino: dispositivos móviles iOS y Android a través del framework .NET MAUI ; No se admiten destinos MAUI para Windows y macOS.
- Modelo de entrada: Transmisión de video en vivo de la cámara del dispositivo exclusivamente; no existen sobrecargas de ruta de archivo, flujo o matriz de bytes.
- Diseño de la API:
BarcodeScanner.Open(configuration)entrega el control a una experiencia de cámara a pantalla completa y devuelve unOperationResultcuando el usuario confirma una exploración o la cancela - Características de la interfaz de usuario de la cámara: Visor en tiempo real con superposición de la región de escaneo, control de la linterna, configuración de la relación de aspecto, retroalimentación háptica y de audio, y bloqueo de orientación.
- Formatos compatibles: Más de 20 formatos unidimensionales (Code 128, EAN-13, UPC y otros) y varios formatos bidimensionales (QR, DataMatrix, PDF417, Aztec).
- Sin procesamiento de archivos: No existe ningún mecanismo para leer un código de barras desde un archivo de imagen guardado, una secuencia de datos o un documento PDF.
- Sin generación de códigos de barras: El SDK lee códigos de barras; no las produce
- Modelo de licencia: Tarifa plana anual; el coste anual es fijo independientemente del volumen de escaneado
- Restricción de tipo de proyecto: No se compilará en proyectos de consola, bibliotecas de clases, ASP.NET Core, WPF, WinForms, Funciones Azureo proyectos alojados en Docker.
Arquitectura del flujo de trabajo de la cámara
La arquitectura de Scanbot requiere una inicialización al iniciar la aplicación, seguida de una llamada de escaneo controlada por la cámara. No hay sobrecarga de BarcodeScanner.Open() que acepte una ruta de archivo o flujo; la firma del método requiere un BarcodeScannerConfiguration porque toda la operación está dirigida por una cámara:
// 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
El SDK procesa los fotogramas de vídeo en directo en tiempo real, resalta los códigos de barras detectados en el visor y regresa cuando se confirma un código de barras o el usuario cancela la operación. El objeto de configuración controla la apariencia de la interfaz de usuario de la cámara, no el comportamiento de procesamiento. Ese es el modelo completo.
Entendiendo IronBarcode
IronBarcode es una biblioteca comercial .NET para la lectura y generación de códigos de barras, desarrollada por Iron Software. Funciona según un modelo de procesamiento de archivos: las fuentes de entrada son rutas de archivo, flujos de datos, matrices de bytes y documentos PDF. No hay interfaz de usuario para la cámara ni se requiere hardware móvil. La biblioteca funciona en cualquier tipo de proyecto .NET .
El método estático BarcodeReader.Read() de IronBarcode acepta cualquier fuente que proporcione el código de llamada, independientemente de cómo se haya producido dicha fuente. Un archivo subido a través de HTTP, un PDF en disco, una imagen desde almacenamiento binario o una matriz de bytes decodificada a partir de una cadena base64 son todos datos de entrada equivalentes. La biblioteca devuelve una colección de resultados decodificados, cada uno de los cuales incluye el valor del código de barras, el formato y el número de página, cuando corresponda.
- Fuentes de entrada: Rutas de archivo, flujos de datos, matrices de bytes y documentos PDF (análisis nativo de PDF, no extracción de imágenes).
- Tipos de proyectos compatibles: Aplicaciones de consola, ASP.NET Core, WPF, WinForms, Blazor Server, Azure Functions, AWS Lambda, Docker, Windows Services, .NET MAUI (todos los destinos, incluidos Windows y macOS) y .NET Framework 4.6.2+
- Generación de códigos de barras: Produce códigos de barras como imágenes o incrustados en documentos HTML y PDF.
- Cobertura de formatos: más de 30 formatos unidimensionales y cinco formatos bidimensionales, incluidos QR, DataMatrix, PDF417, Aztecy MaxiCode.
- Mejoras en la lectura: Corrección de errores basada en aprendizaje automático y recuperación de códigos de barras dañados para imágenes difíciles del mundo real.
- Objeto de configuración:
BarcodeReaderOptionscontrola el comportamiento del procesamiento (velocidad, detección de múltiples códigos de barras) en lugar de la apariencia de la interfaz de usuario de la cámara - Modelo de licencia: Compra única y perpetua en cuatro niveles (Lite $749, Plus $1,499, Professional $2,999, Unlimited $5,999); no se requiere renovación anual
Comparación de características
La siguiente tabla destaca las diferencias fundamentales entre SDK de Scanbot e IronBarcode:
| Característica | SDK de Scanbot | IronBarcode |
|---|---|---|
| Caso de uso principal | Escaneo de códigos de barras con cámara en directo desde el móvil | Lectura y generación de códigos de barras de archivos y documentos |
| Modelo de entrada | Solo la señal de la cámara del dispositivo | Ruta de archivo, flujo, matriz de bytes, PDF |
| Soporte de Plataforma | Solo para iOS y Android MAUI | Todas las plataformas y tipos de proyectos .NET |
| Generación de códigos de barras | No | Sí |
| Extracción de códigos de barras PDF | No | Sí |
| Modelo de licencia | Tarifa plana anual | Perpetuo de una sola vez |
| Interfaz de usuario de la cámara en directo | Sí, componente del visor pulido | No (utiliza MediaPicker para capturar fotos) |
Comparación detallada de características
| Característica | SDK de Scanbot | IronBarcode |
|---|---|---|
| Lectura | ||
| Entrada desde la ruta del archivo | No | Sí |
| Entrada desde el flujo | No | Sí |
| Entrada desde una matriz de bytes | No | Sí |
| Extracción de códigos de barras PDF | No | Sí |
| Visor de la cámara en directo | Sí | No |
| Escaneo de fotogramas en tiempo real | Sí | No |
| Detección de formato automático | Sí | Sí |
| Corrección de errores de aprendizaje automático | No | Sí |
| Recuperación de códigos de barras dañados | No | Sí |
| Recuento de formato 1D | Más de 20 años | 30+ |
| Recuento de formato 2D | QR, DataMatrix, PDF417, Aztec | QR, DataMatrix, PDF417, Aztec, MaxiCode |
| Generación | ||
| Generación de códigos de barras | No | Sí |
| Plataforma | ||
| iOS MAUI | Sí | Sí |
| Android MAUI | Sí | Sí |
| MAUI de Windows | No | Sí |
| macOS MAUI | No | Sí |
| Aplicación de consola | No | Sí |
| ASP.NET Core | No | Sí |
| Servidor Blazor | No | Sí |
| Aplicación WPF | No | Sí |
| Aplicación WinForms | No | Sí |
| Funciones Azure | No | Sí |
| AWS Lambda | No | Sí |
| Docker / Linux | No | Sí |
| Servicio de Windows | No | Sí |
| .NET Framework 4.6.2 o superior | No | Sí |
| Licencias | ||
| Modelo de licencia | Tarifa plana anual | Perpetuo de una sola vez |
| Precios publicados | Contacto de ventas | Sí (entre 749 y 5999 dólares) |
| Precios por volumen | No disponible (tarifa fija) | No aplica (niveles perpetuos) |
Arquitectura: Procesamiento de la cámara frente al procesamiento de archivos
La diferencia más significativa entre SDK de Scanbot e IronBarcode no radica en la falta de funcionalidades, sino en una diferencia arquitectónica fundamental en la forma en que cada biblioteca conceptualiza su entrada.
Enfoque del SDK de Scanbot
La arquitectura de Scanbot está construida alrededor de una tubería de cámara nativa. Cuando se llama a BarcodeScanner.Open(configuration), la biblioteca cede el control a una experiencia de cámara a pantalla completa impulsada por las API de cámara nativas del dispositivo en iOS y Android. La biblioteca procesa continuamente los fotogramas de vídeo en directo, aplica la detección de códigos de barras a cada fotograma y devuelve el control a la aplicación que la llamó cuando se confirma un código de barras o el usuario desactiva el escáner. En el modelo de Scanbot no existe el concepto de imagen estática: la entrada es siempre una secuencia de fotogramas de vídeo en directo procedentes de la cámara del dispositivo.
Este diseño ofrece una experiencia de escaneo impecable: códigos de barras resaltados en tiempo real en el visor, región de escaneo configurable con control de relación de aspecto, activación/desactivación de la linterna, retroalimentación háptica y de audio, y bloqueo de orientación. Estas son las características de la interfaz de usuario en las que Scanbot ha invertido para el caso de uso de la cámara móvil. La desventaja es que la biblioteca es inseparable del hardware de la cámara y del sistema operativo móvil que la controla.
Enfoque IronBarcode
IronBarcode acepta cualquier representación binaria de una imagen que contenga un código de barras y devuelve los resultados decodificados mediante el mismo método estático, independientemente de cómo se haya obtenido la imagen:
// 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)
La misma llamada se ejecuta en una aplicación de consola, un controlador ASP.NET Core, una función de Azure, un formulario WPF o una página MAUI. IronBarcode lee los códigos de barras de los archivos PDF de forma nativa , no como imágenes extraídas de los PDF, sino analizando directamente la estructura del PDF y buscando los códigos de barras en cada página.
Cobertura de plataforma e implementación
El ámbito de la plataforma del SDK de Scanbot está determinado por los destinos que admite su paquete NuGet . El ámbito de IronBarcode coincide con el del propio entorno de ejecución de .NET .
Enfoque del SDK de Scanbot
El paquete de Scanbot está dirigido a net8.0-android y net8.0-ios. Un proyecto .NET MAUI Application que declare sólo esos dos objetivos se construirá con éxito. Sin embargo, cuando net8.0-windows o net8.0-maccatalyst se añade a TargetFrameworks, la referencia del paquete Scanbot no se resuelve en esos destinos. Esto no es un problema de configuración; el paquete no proporciona ensamblados para Windows ni macOS. El fallo se produce durante el primer intento de compilación en el equipo de escritorio, no en el momento de la instalación de NuGet .
Esta limitación implica que Scanbot es estructuralmente incompatible con proyectos MAUI multiobjetivo que incluyen plataformas de escritorio, y no se puede utilizar en ningún tipo de proyecto de servidor o escritorio que no sea MAUI, independientemente de la versión del framework.
Enfoque IronBarcode
IronBarcode se distribuye como un único paquete NuGet que se resuelve correctamente en todos los tipos de proyectos .NET y marcos de destino:
// 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
Para las aplicaciones MAUI que también están dirigidas a Windows o macOS , IronBarcode admite las cuatro plataformas MAUI desde una única referencia de paquete sin necesidad de configuración condicional por plataforma. Los equipos que crean un proyecto MAUI dirigido a iOS, Android y Windows pueden añadir IronBarcode una vez y utilizar BarcodeReader.Read() en las tres plataformas sin modificaciones.
Patrones de integración de MAUI
Ambas bibliotecas se pueden usar en proyectos .NET MAUI , pero el patrón de integración difiere significativamente según el modelo de entrada de cada biblioteca.
Enfoque del SDK de Scanbot
En un proyecto MAUI dirigido a iOS y Android, Scanbot proporciona un visor de cámara nativo integrado en el flujo de navegación de la aplicación. La llamada BarcodeScanner.Open() presenta el escáner a pantalla completa, y el resultado vuelve a la página de llamada cuando el usuario completa o descarta el escáner. Esta integración proporciona a la aplicación móvil una interfaz de escaneo especializada que se siente como propia de la plataforma.
La limitación aparece cuando el proyecto se expande. Agregar un destino de Windows o macOS al proyecto MAUI provoca que la compilación falle en esas plataformas. Agregar un componente del lado del servidor que necesite procesar códigos de barras requiere una biblioteca independiente. La dependencia de Scanbot no puede seguir al proyecto más allá de iOS y Android.
Enfoque IronBarcode
En un proyecto MAUI, IronBarcode trabaja con la plataforma MediaPicker para capturar fotos y leer códigos de barras de las imágenes resultantes. El flujo de trabajo de escaneo utiliza la cámara del sistema en lugar de un visor personalizado:
// Works on iOS, Android, Windows, and macOS MAUItargets
// 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 MAUItargets
// 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
La ventaja es la superposición en tiempo real del visor. El usuario ve la interfaz de usuario de la cámara del sistema en lugar de una región de escaneo personalizada, lo cual es adecuado para aplicaciones comerciales donde basta con apuntar y capturar. El tutorial del escáner de códigos de barras .NET MAUI cubre el patrón de integración completo de MAUI para dispositivos iOS y Android , incluyendo la gestión de permisos y la configuración del proyecto.
Modelo de licenciamiento
Scanbot SDK e IronBarcode utilizan estructuras de licencias comerciales fundamentalmente diferentes.
Enfoque de Scanbot
Scanbot funciona con un modelo de tarifa plana anual. El coste de la licencia anual es fijo independientemente del volumen de escaneos: ya sean 100 escaneos al año o 10 millones de escaneos al año, la tarifa es la misma. Esto proporciona una presupuestación anual predecible para equipos con implementaciones estables exclusivamente móviles. Para conocer el precio exacto, póngase en contacto con el equipo de ventas de Scanbot. Las cifras publicadas no están disponibles. La obligación de renovación anual implica que la licencia supone un coste operativo continuo.
Enfoque IronBarcode
IronBarcode se vende como una compra única y perpetua en cuatro niveles: Lite por $749, Plus por $1,499, Professional por $2,999 e Unlimited por $5,999. No se requiere renovación anual para seguir utilizando la versión adquirida. Las actualizaciones de software dentro del período de licencia están incluidas. Los precios se publican en el sitio web de Iron Software sin necesidad de una conversación de ventas.
Referencia de mapeo de API
Los equipos que evalúen la diferencia arquitectónica entre las dos bibliotecas encontrarán útil este mapeo para comprender las equivalencias de conceptos:
| SDK de Scanbot | 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 |
Compruebe results.Any() o results.FirstOrDefault() != null |
result.Barcodes |
Valor de retorno de 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 |
No existe un equivalente: el encuadre de la imagen lo gestiona MediaPicker. |
BarcodeScannerConfiguration.FlashEnabled |
No existe un equivalente; utilice las opciones de MediaPicker. |
| Entrada solo para cámara | Ruta de archivo, flujo, matriz de bytes o PDF |
| Solo para iOS y Android MAUI | Todas las plataformas .NET |
Cuando los equipos consideran migrar del SDK de Scanbot a IronBarcode
Es común que existan diversas situaciones que lleven a los equipos de desarrollo a evaluar IronBarcode como un sustituto o un complemento del SDK de Scanbot.
Procesamiento del lado del servidor y del backend
Una aplicación móvil desarrollada con Scanbot suele coexistir con un componente del lado del servidor que gestiona la carga de documentos, los trabajos por lotes o los puntos finales de la API. Cuando ese componente del servidor necesita procesar códigos de barras (extraer códigos de barras de archivos PDF cargados, validar valores de códigos de barras en documentos entrantes o procesar datos de códigos de barras de archivos adjuntos de imagen), Scanbot no está disponible. El paquete no se compila en ASP.NET Core, Azure Functions, aplicaciones de consola ni en ningún proyecto que no sea MAUI. Los equipos que se encuentran en esta situación deben mantener una dependencia de códigos de barras para dispositivos móviles junto con una solución de códigos de barras independiente para servidores, o bien, evaluar si IronBarcode puede cubrir ambas funciones con un solo paquete.
Requisitos de la aplicación de escritorio
La propuesta de valor de MAUI suele ser la compatibilidad multiplataforma: un único código base que sirve para iOS, Android y Windows. Cuando el destino MAUI de Windowsentra en la hoja de ruta, ya sea como requisito inicial o como adición posterior, el paquete de Scanbot no se resuelve en ese destino. La compilación para Windows no puede continuar con Scanbot en la lista de dependencias. Los equipos descubren esto durante el primer intento de compilar la versión de escritorio, y la solución requiere eliminar Scanbot de la lista de dependencias compartidas. Para los equipos donde la versión de escritorio para Windows es un requisito indispensable, IronBarcode se convierte en la única opción entre las bibliotecas de códigos de barras para dispositivos móviles que también cubre la plataforma de escritorio.
Flujos de trabajo de PDF y documentos
Las aplicaciones que pasan del escaneo en tiempo real a la automatización de documentos se topan con una limitación de capacidades en Scanbot. Leer códigos de barras de una factura en PDF, extraer códigos de seguimiento de una imagen escaneada de una etiqueta de envío o procesar datos de códigos de barras de un documento archivado: ninguno de estos flujos de trabajo es posible dentro del modelo Scanbot, porque la entrada siempre debe ser una transmisión de cámara en vivo. IronBarcode gestiona de forma nativa todas estas entradas basadas en archivos. El mismo paquete que se ejecuta en la aplicación móvil MAUI puede extraer códigos de barras de documentos PDF mediante un procesamiento en segundo plano, sin dependencias adicionales.
Costes de licencia predecibles
Los costes de renovación anuales invitan a una reevaluación en cada ciclo de renovación. Los equipos que comenzaron con Scanbot en una implementación móvil a pequeña escala y se expandieron a una implementación más amplia con más usuarios o plataformas pueden encontrar que la tarifa anual es menos favorable a medida que aumenta el alcance. El modelo perpetuo de pago único de IronBarcode elimina la obligación de renovación. Los equipos que realizan evaluaciones de renovación de licencias a menudo consideran si una compra única se ajusta mejor a su planificación de costos a largo plazo, especialmente cuando el alcance ampliado del proyecto incluye plataformas de servidor o de escritorio que, de todos modos, quedan fuera de la cobertura de Scanbot.
Consideraciones comunes sobre la migración
Los equipos que migren del SDK de Scanbot a IronBarcode deben prepararse para varias diferencias técnicas que surgen durante la transición.
No tiene equivalente a un visor en directo.
El visor de cámara en tiempo real de Scanbot, con la superposición de la región de escaneo, la detección continua y la retroalimentación háptica, no tiene un equivalente directo en IronBarcode. El patrón de sustitución utiliza MediaPicker.CapturePhotoAsync() de MAUI para abrir la cámara del sistema, capturar una foto, y devolver la imagen para su procesamiento. La experiencia del usuario consiste en un proceso de captura de fotos, en lugar de un proceso de escaneo continuo. En las aplicaciones empresariales (inventario, logística, procesamiento de documentos), esta distinción rara vez es significativa. En el caso de las aplicaciones de consumo donde la superposición en tiempo real es fundamental para la experiencia del producto, esta es una diferencia real en la experiencia del usuario que debe evaluarse antes de comprometerse con la migración.
Patrón de devolución de llamada de evento para retorno directo
El BarcodeScanner.Open() de Scanbot es asíncrono y devuelve un OperationResult con un campo de estado y una colección Barcodes. El BarcodeReader.Read() de IronBarcode devuelve una colección directamente - no existe un objeto envoltorio con un campo de estado. La comprobación de éxito cambia de result.Status == OperationResult.Oka results.Any() o una comprobación nula en results.FirstOrDefault().
Cambio de espacio de nombres de enumeración de formato
El enum BarcodeFormat de Scanbot (por ejemplo, BarcodeFormat.Code128) y el enum BarcodeEncoding de IronBarcode (por ejemplo, BarcodeEncoding.Code128) contienen miembros similares pero son tipos diferentes en espacios de nombres diferentes. El código que almacena o compara valores de formato por tipo de enumeración requiere que se actualice la referencia de tipo. Las comparaciones de cadenas basadas en la salida .ToString() son generalmente compatibles ya que los nombres de los miembros son similares, pero las comparaciones explícitas de tipo enum requieren la actualización a valores BarcodeEncoding.
Complementos de compilación de Windows
Si el paquete Scanbot estaba causando fallos en la compilación de MAUI de Windowsantes de la migración, eliminarlo resuelve esos fallos. Tras añadir IronBarcode, verifique que las funcionalidades específicas de Windows (cuadros de selección de archivos, rutas de archivos locales, permisos de Windows) se gestionen correctamente en el código de la aplicación MAUI, ya que difieren de los patrones de acceso a archivos de iOS y Android.
Funcionalidades adicionales de IronBarcode
Más allá de los escenarios principales que se abordan en esta comparación, IronBarcode ofrece funcionalidades que cobran relevancia a medida que los proyectos se expanden:
- Generación de códigos de barras: Genera códigos de barras en todos los principales formatos unidimensionales y bidimensionales como archivos de imagen, flujos de datos o contenido incrustado en documentos HTML y PDF.
- Procesamiento de documentos con múltiples códigos de barras: Lee todos los códigos de barras de todas las páginas de un PDF de varias páginas en una sola llamada, y cada resultado lleva el número de página donde se encontró.
- Corrección de errores mediante aprendizaje automático: Recupera códigos de barras de imágenes dañadas, parcialmente ocultas o de bajo contraste que los algoritmos de detección estándar no pueden decodificar.
- Procesamiento de imágenes por lotes: Procese conjuntos de rutas o secuencias de imágenes en una sola operación para flujos de trabajo de documentos de alto rendimiento.
- Ajuste de BarcodeReaderOptions: Controle la velocidad de lectura, la detección de múltiples códigos de barras, el filtrado de formato y el preprocesamiento de imágenes para equilibrar el rendimiento y la precisión para casos de uso específicos.
- Integración con iOS MAUI : Compatibilidad total con la lectura de códigos de barras en aplicaciones iOS MAUImediante el patrón MediaPicker.
- Integración con Android MAUI : Compatibilidad total con la lectura de códigos de barras en aplicaciones Android MAUIcon la misma API que iOS.
Compatibilidad con .NET y preparación para el futuro
IronBarcode es compatible con .NET 6, .NET 7, .NET 8 y .NET 9, así como con .NET Framework 4.6.2 y versiones posteriores. La biblioteca recibe actualizaciones periódicas que se ajustan al ritmo de lanzamiento de .NET , lo que garantiza la compatibilidad con .NET 10, previsto para finales de 2026, y con futuras versiones. Dado que IronBarcode es una biblioteca de procesamiento de archivos y no un SDK de cámara específico para una plataforma, no depende de las API del sistema operativo móvil ni de las capacidades de hardware, lo que significa que su superficie de compatibilidad crece con el ecosistema .NET en lugar de estar limitada por los ciclos de soporte de la plataforma móvil.
Conclusión
Scanbot SDK e IronBarcode pertenecen a categorías de productos diferentes que comparten la etiqueta "SDK de códigos de barras". Scanbot es un componente de escaneo para cámaras móviles que ofrece una experiencia de visor en tiempo real optimizada para aplicaciones iOS y Android. IronBarcode es una biblioteca de procesamiento de archivos y documentos que lee y genera códigos de barras en toda la gama de tipos de proyectos .NET y destinos de implementación. La comparación se centra en el alcance y la arquitectura, no en la calidad dentro del ámbito previsto de cada biblioteca.
El SDK de Scanbot es realmente potente dentro de su ámbito de aplicación definido. Para aplicaciones móviles de consumo y Enterprise en las que el usuario apunta directamente la cámara de un dispositivo a un código de barras físico y espera una retroalimentación visual en tiempo real (venta minorista, venta de entradas, consulta de almacenes), el sistema de cámara y el componente de visor optimizado de Scanbot están diseñados específicamente para ese modelo de interacción. Si la implementación se limita a dispositivos móviles iOS y Android, la experiencia de escaneo en tiempo real es fundamental para el producto y la tarifa plana anual se ajusta al presupuesto, Scanbot es una opción razonable para ese caso de uso específico y bien definido.
IronBarcode es apropiado cuando el requisito de procesamiento de códigos de barras va más allá del escenario de la cámara en directo. El procesamiento de documentos del lado del servidor, los puntos finales de ASP.NET Coreque aceptan cargas de archivos, las aplicaciones de escritorio en Windows o macOS, las funciones de Azure activadas por el almacenamiento de blobs, los proyectos MAUI de múltiples objetivos que incluyen plataformas de escritorio y los trabajos de procesamiento de PDF por lotes se encuentran dentro del ámbito nativo de IronBarcode. El paquete único se instala sin configuración condicional de plataforma y proporciona la misma llamada BarcodeReader.Read() independientemente de si el código se ejecuta en un dispositivo móvil, un servidor o un ordenador de sobremesa.
Para los equipos cuyos requisitos abarcan tanto el escaneo en tiempo real con cámaras móviles como el procesamiento de archivos o servidores, la solución arquitectónicamente más limpia es usar Scanbot para la interfaz de usuario de la cámara móvil e IronBarcode para todo lo demás. El coste de ese enfoque reside en dos dependencias de códigos de barras y dos acuerdos de licencia. Para los equipos que prefieran usar la cámara del sistema en lugar de un visor personalizado para la interacción de escaneo móvil, IronBarcode por sí solo puede cubrir todo el alcance del proyecto, desde la aplicación móvil MAUI hasta la API del servidor y la aplicación complementaria para escritorio de Windows, con un solo paquete y una sola licencia.
Preguntas Frecuentes
¿Qué es Scanbot SDK?
Scanbot SDK es una biblioteca de códigos de barras .NET para generar y leer códigos de barras en aplicaciones C#. Es una de las varias alternativas que los desarrolladores evalúan cuando seleccionan una solución de código de barras para proyectos .NET.
¿Cuáles son las principales diferencias entre Scanbot SDK e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que Scanbot SDK suele requerir la creación y configuración de instancias antes de su uso. IronBarcode también ofrece compatibilidad nativa con PDF, detección automática de formatos y licencia de clave única en todos los entornos.
¿Es IronBarcode más fácil de licenciar que Scanbot SDK?
IronBarcode utiliza una única clave de licencia que cubre tanto el desarrollo como los despliegues de producción. Esto simplifica las canalizaciones de CI/CD y las configuraciones de Docker en comparación con los sistemas de licencias que separan las claves de SDK de las claves de tiempo de ejecución.
¿Es IronBarcode compatible con todos los formatos de código de barras que admite Scanbot SDK?
IronBarcode es compatible con más de 30 simbologías de códigos de barras, incluidos QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 y muchos más. La autodetección de formatos significa que no se requiere una enumeración explícita de formatos.
¿Es IronBarcode compatible con la lectura nativa de códigos de barras en PDF?
Sí. IronBarcode lee códigos de barras directamente desde archivos PDF utilizando BarcodeReader.Read("document.pdf") sin necesidad de una biblioteca de renderizado de PDF independiente. Los resultados por página incluyen el número de página, el formato del código de barras, el valor y la puntuación de confianza.
¿Cómo gestiona IronBarcode el procesamiento por lotes en comparación con Scanbot SDK?
Los métodos estáticos de IronBarcode no tienen estado y son naturalmente seguros para subprocesos, lo que permite el uso directo de Parallel.ForEach sin gestión de instancias por subproceso. No hay límite de rendimiento en ningún nivel de precios.
¿Qué versiones de .NET admite IronBarcode ?
IronBarcode es compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5, 6, 7, 8 y 9 en un único paquete NuGet. Las plataformas de destino incluyen Windows x64/x86, Linux x64 y macOS x64/ARM.
¿Cómo instalo IronBarcode en un proyecto .NET?
Instale IronBarcode a través de NuGet: ejecute 'Install-Package IronBarCode' en la consola del gestor de paquetes, o 'dotnet add package IronBarCode' en la CLI. No se necesitan instaladores SDK ni archivos de ejecución adicionales.
¿Puedo evaluar IronBarcode antes de comprarlo, a diferencia de Scanbot?
Sí. El modo de prueba de IronBarcode devuelve los valores completos de los códigos de barras descodificados; sólo las imágenes de salida generadas reciben una marca de agua. Puede comprobar la precisión de la lectura en sus propios documentos antes de comprometerse con la compra.
¿Cuál es la diferencia de precio entre Scanbot SDK e IronBarcode?
IronBarcode cuesta a partir de 749 dólares por una licencia perpetua de desarrollador único que cubre el desarrollo y la producción. Los detalles de precios y opciones de volumen están disponibles en la página de licencias de IronBarcode. No se requiere una licencia de ejecución por separado.
¿Es fácil migrar de Scanbot SDK a IronBarcode?
La migración de Scanbot SDK a IronBarcode implica principalmente la sustitución de las llamadas a la API basadas en instancias por los métodos estáticos de IronBarcode, la eliminación de la repetición de licencias y la actualización de los nombres de las propiedades de los resultados. La mayoría de las migraciones implican reducir código en lugar de añadirlo.
¿IronBarcode genera códigos QR con logotipos?
Sí. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incrusta una imagen de marca en un código QR de forma nativa con corrección de errores configurable. Los códigos QR coloreados también son compatibles con ChangeBarCodeColor().

