Scandit SDK vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
Para empezar a leer códigos de barras con Scandit, se configura un DataCaptureContext, se crea un BarcodeCaptureSettings, se habilitan las simbologías explícitamente, se obtiene una cámara, se establece como fuente de fotogramas, se activa la cámara y se habilita la captura. El precio aún no aparece en la página web.
Esa combinación —un sistema de integración de cámaras obligatorio y precios Enterprise poco transparentes— define exactamente cuándo Scandit no es la herramienta adecuada para un proyecto .NET . Si está desarrollando un flujo de trabajo de procesamiento de documentos del lado del servidor, una API de ASP.NET Coreque lee códigos de barras de archivos cargados o una función de Azure que procesa archivos PDF de envío, la arquitectura de Scandit le juega en contra en cada paso. Esta comparación analiza el origen de dicha arquitectura, dónde encaja IronBarcode y cuánto cuesta averiguarlo en ambos casos.
Comprensión del SDK de Scandit
Scandit SDK es una plataforma comercial de escaneo de códigos de barras Enterprise , diseñada para entornos de computación móvil y de borde. La biblioteca fue diseñada para admitir el escaneo de cámaras en tiempo real en dispositivos iOS, Android y MAUI, con líneas de productos especializadas que abarcan superposiciones de realidad aumentada, detección simultánea de múltiples códigos de barras y escaneo de documentos de identidad. El contexto de implementación principal de Scandit son los trabajadores móviles de campo, las operaciones de almacén y los escenarios de interacción en puntos de venta minoristas donde una cámara física, un usuario en vivo y un tiempo de respuesta inferior a 100 ms están presentes simultáneamente.
La arquitectura de la biblioteca se organiza en torno al DataCaptureContext pipeline, que coordina una sesión de cámara, los ajustes de análisis de fotogramas y la configuración de captura de códigos de barras como un sistema unificado lleno de estados. Dado que cada línea de productos de la plataforma Scandit (SparkScan, MatrixScan, ID Scanning, AR Overlays y Parser) tiene una licencia independiente y un precio que se determina mediante un modelo de venta por contacto, el coste total de cualquier integración de Scandit no se puede determinar hasta después de una conversación de ventas.
Las características arquitectónicas clave del SDK de Scandit incluyen:
- Diseño centrado en la cámara: El SDK presupone una cámara física y una fuente de fotogramas en funcionamiento. La lectura de códigos de barras se realiza sobre fotogramas de vídeo en directo, no sobre archivos estáticos ni secuencias de vídeo.
- Inicialización obligatoria de DataCaptureContext: Cada integración comienza construyendo un
DataCaptureContexty conectándolo a una instancia de cámara antes de que pueda producirse cualquier trabajo de código de barras. - Declaración explícita de simbología: Los formatos de código de barras deben habilitarse individualmente mediante
EnableSymbologiesantes de iniciar la sesión de captura. La detección automática no está disponible. - Entrega de resultados basada en eventos: Los resultados de los códigos de barras se entregan de forma asíncrona a través de devoluciones de llamada de eventos (
BarcodeScanned) en lugar de devolverse de forma síncrona desde una llamada a un método. - Arquitectura de producto modular: SparkScan, MatrixScan, escaneo de identificación, superposiciones de realidad aumentada y analizador son funciones con precios independientes que requieren partidas contractuales individuales.
- Precios de venta por contacto: No hay precios publicados. Para cada integración se requiere una consulta comercial antes de conocer el costo de la licencia.
- Plataforma orientada principalmente a dispositivos móviles: El soporte principal es para iOS y Android. Las implementaciones en servidores, Docker y sin servidor quedan fuera del alcance de diseño del SDK.
La canalización DataCaptureContext
Cada integración de Scandit comienza con esta secuencia de inicialización de la cámara antes de que se pueda leer un solo código de barras:
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
Imports Scandit.DataCapture.Core
Imports Scandit.DataCapture.Barcode
Imports Scandit.DataCapture.Barcode.Capture
Imports Scandit.DataCapture.Core.Source
Imports System.Collections.Generic
' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.BarcodePicker
Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")
Dim settings = BarcodeCaptureSettings.Create()
settings.EnableSymbologies(New HashSet(Of Symbology) From {
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
})
Dim barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings)
Dim camera = Camera.GetDefaultCamera()
Await dataCaptureContext.SetFrameSourceAsync(camera)
Await camera.SwitchToDesiredStateAsync(FrameSourceState.On)
barcodeCapture.IsEnabled = True
Cada línea de este bloque corresponde a la infraestructura de la cámara. No hay ningún argumento de ruta de archivo. No hay PDF. No hay ningún arroyo. La biblioteca da por sentado que la cámara está en funcionamiento antes de que pueda comenzar cualquier trabajo con códigos de barras.
Entendiendo IronBarcode
IronBarcode es una biblioteca .NET comercial para la lectura y generación de códigos de barras. La biblioteca está diseñada para entornos de servidor, escritorio y nube donde los datos de códigos de barras llegan como archivos, flujos, matrices de bytes o contenido incrustado dentro de documentos PDF. Su API no tiene estado: no hay objeto de sesión, ni canalización de cámara que inicializar, ni contexto persistente que gestionar entre lecturas. Una única llamada estática a BarcodeReader.Read acepta una ruta de archivo, un flujo, una matriz de bytes o un PDF y devuelve una colección de resultados.
IronBarcode se distribuye como un único paquete NuGet que contiene todas las capacidades de lectura y generación para más de 30 formatos de códigos de barras 1D y 2D. La biblioteca admite la detección automática de formatos, lo que significa que quien la utiliza no necesita especificar qué simbologías buscar. Los precios se publican en la página del producto sin necesidad de realizar ninguna conversación de venta.
Las características clave de IronBarcode incluyen:
- API sin estado basada en archivos: La lectura comienza con una única llamada a un método que acepta una ruta de archivo, un flujo de datos, una matriz de bytes o un documento PDF.
- Detección automática de formato: Todos los formatos de código de barras compatibles se detectan automáticamente. La configuración explícita de la simbología es una optimización de rendimiento opcional, no un requisito previo.
- Compatibilidad nativa con PDF: Los documentos PDF de varias páginas se leen directamente, y los resultados se indexan por número de página. No se requiere ninguna biblioteca externa para la generación de PDF.
- Preparado para servidores y la nube: Admite ASP.NET Core, Azure Functions, Docker en Linux e implementaciones en contenedores sin necesidad de soluciones arquitectónicas alternativas.
- Procesamiento concurrente: La API sin estado es inherentemente segura para hilos, lo que permite patrones
Parallel.ForEachy asíncronos para escenarios por lotes de alto rendimiento. - Generación de códigos de barras: Produce códigos de barras en formato de imagen y PDF para todas las simbologías compatibles. La generación y la lectura están incluidas en el mismo paquete.
- Licencia perpetua publicada: Los precios se muestran públicamente como compras perpetuas únicas, sin cargos por escaneo ni por dispositivo.
Comparación de características
La siguiente tabla destaca las diferencias fundamentales entre SDK de Scandit e IronBarcode:
| Característica | SDK de Scandit | IronBarcode |
|---|---|---|
| Caso de uso principal | Escaneo de cámara en tiempo real en dispositivos móviles | Lectura de códigos de barras de archivos, transmisiones y PDF en el servidor |
| Se requiere cámara | Sí | No |
| Extracción de códigos de barras PDF | No soportado | Soporte nativo |
| Modelo de precios | Contacte con el departamento de ventas, por producto. | Niveles perpetuos publicados |
| Procesamiento del lado del servidor | No diseñado para | Objetivo de despliegue principal |
| Configuración de la simbología | Obligatorio antes de escanear | Opcional; detección automática por defecto |
| Generación de códigos de barras | No soportado | Incluido en un solo paquete |
Comparación detallada de características
| Característica | SDK de Scandit | IronBarcode |
|---|---|---|
| Lectura | ||
| Lectura de archivos de imagen | No diseñado para | Enfoque principal |
| Extracción de códigos de barras PDF | No soportado | Páginas múltiples nativas |
| Entrada de flujo/matriz de bytes | No soportado | Sí |
| Detección automática de formato | No (debe especificarse) | Sí |
| Formatos 1D (Código 128, EAN, UPC, etc.) | 30+ | 30+ |
| Formatos 2D (QR, DataMatrix, Aztec, PDF417) | Sí | Sí |
| Detección de múltiples códigos de barras por documento | MatrixScan (producto aparte) | Sí (paquete individual) |
| Recuperación de códigos de barras dañados | Limitado | Sí (con tecnología de aprendizaje automático) |
| Generación | ||
| Generación de códigos de barras | No soportado | Sí |
| Salida a archivo de imagen | No soportado | Sí |
| Exportar a PDF | No soportado | Sí |
| Arquitectura | ||
| Modelo de inicialización | Canalización de cámara con estado | Llamada a método sin estado |
| Entrega de resultados | Devolución de llamada de evento (asíncrona) | Valor de retorno síncrono |
| dependencia de la cámara | Requerido | No procede |
| Predeclaración de simbología | Requerido | Opcional |
| Plataforma | ||
| iOS / Android (MAUI) | Objetivo principal | Uso programático |
| ASP.NET Core | No diseñado para | Soporte completo |
| Funciones Azure/ sin servidor | No es práctico | Soporte completo |
| Servidor Docker/Linux | No soportado | Soporte completo |
| Consola / servicio en segundo plano | No diseñado para | Soporte completo |
| Licencias | ||
| Transparencia en los precios | Se requiere contactar con el departamento de ventas. | Publicado en el sitio web |
| Tipo de licencia | Anual (por producto) | Perpetuo único |
| Tarifas por escaneo o por dispositivo | Sí | No |
| Acceso a todas las funciones con un solo paquete. | No (productos modulares) | Sí |
Arquitectura de lectura de códigos de barras
La diferencia estructural más significativa entre estas dos bibliotecas radica en cómo modelan la relación entre la entrada y la salida.
Enfoque del SDK de Scandit
Scandit procesa los fotogramas de la cámara en tiempo real. El DataCaptureContext mantiene una sesión de cámara activa, y el BarcodeCapture escucha los códigos de barras en cada fotograma entrante. Los resultados del BarCode se entregan de forma asíncrona a través del evento BarcodeScanned. Para leer un archivo de imagen estática con Scandit, es necesario adaptar el flujo de trabajo de la cámara para que trate el archivo como una fuente de fotogramas; un flujo de trabajo que no es compatible de forma nativa y que requiere un esfuerzo de ingeniería para su aproximación.
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
Imports System
' Scandit SDK: event-callback result delivery
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
Dim value As String = barcode.Data
Dim symbology As String = barcode.Symbology.ToString()
ProcessBarcode(value, symbology)
Next
End Sub
El modelo basado en eventos es apropiado para el escaneo continuo en tiempo real, donde los códigos de barras llegan de forma impredecible en una transmisión de vídeo. Para el procesamiento basado en archivos, el modelo introduce una complejidad innecesaria: la entrada tiene un límite de finalización conocido, la sesión de la cámara nunca termina de forma natural y el patrón de devolución de llamada asíncrono no se integra bien con las arquitecturas de servidor de solicitud-respuesta.
Enfoque IronBarcode
IronBarcode trata cada entrada como un documento independiente con un resultado determinista. El método BarcodeReader.Read acepta una ruta de archivo, un flujo o una matriz de bytes, realiza toda la detección de forma sincrónica y devuelve una colección de resultados. No hay ninguna sesión que abrir, ninguna fuente de trama que configurar y ningún evento al que suscribirse.
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
Para leer códigos de barras a partir de imágenes , la API sin estado no requiere ninguna inicialización más allá de la clave de licencia. La detección de formato es automática. El programa completo que se muestra arriba lee cualquier formato de código de barras compatible desde un archivo de imagen en tan solo tres líneas de código operativo.
Soporte para la plataforma y la implementación
El contexto de implementación de una biblioteca de códigos de barras determina si puede ejecutarse en el entorno de destino, independientemente de las capacidades de sus funcionalidades.
Enfoque del SDK de Scandit
La arquitectura de Scandit requiere hardware de cámara y una plataforma móvil que pueda exponerlo a través de una API de cámara nativa. iOS y Android son las plataformas principales compatibles. El escritorio de Windows es un objetivo secundario. ASP.NET Core, Azure Functions, los contenedores Docker y los servidores Linux quedan fuera del ámbito de diseño de la biblioteca. El DataCaptureContext asume una sesión de cámara en ejecución, que no tiene equivalente en entornos de computación sin servidor, despliegues en contenedores o servicios de procesamiento en segundo plano.
| Plataforma | SDK de Scandit |
|---|---|
| iOS / Android (MAUI) | Objetivo principal |
| Escritorio de Windows | Apoyo secundario |
| ASP.NET Core | No diseñado para |
| Funciones Azure | No es práctico |
| Servidor Docker/Linux | No soportado |
| Consola / servicio en segundo plano | No diseñado para |
Enfoque IronBarcode
IronBarcode fue diseñado para entornos de servidor, nube y contenedores. La API sin estado no tiene dependencias de hardware ni requisitos de inicialización específicos de la plataforma. La implementación en Azure Functions para el procesamiento de códigos de barras es una ruta compatible y documentada. Docker en Linux es un entorno de despliegue estándar. Los puntos finales de ASP.NET Coreque leen códigos de barras desde archivos cargados representan un escenario compatible de forma nativa que no requiere soluciones arquitectónicas alternativas.
| Plataforma | IronBarcode |
|---|---|
| iOS / Android (MAUI) | Procesamiento programático de archivos |
| ASP.NET Core | Soporte completo |
| Funciones Azure/ Lambda | Soporte completo |
| Servidor Docker/Linux | Soporte completo |
| Consola / servicio en segundo plano | Soporte completo |
| Servidor Blazor | Soporte completo |
Procesamiento por lotes concurrente
El procesamiento de grandes volúmenes de documentos con códigos de barras es un requisito común del lado del servidor que las dos bibliotecas abordan desde perspectivas fundamentalmente diferentes.
Enfoque del SDK de Scandit
La canalización de la cámara de Scandit se diseñó para una única sesión de cámara que sirve a un único usuario o dispositivo. El modelo FrameSourceState asume una sesión de cámara persistente y continua, no una cola de documentos que se procesan a un ritmo constante. Adaptar la biblioteca para procesar lotes de archivos requiere simular una sesión de cámara por documento o serializar el procesamiento de documentos a través de una canalización compartida, ninguno de los cuales representa un patrón compatible o eficiente.
Enfoque IronBarcode
Debido a que el método BarcodeReader.Read de IronBarcode no tiene estado, es intrínsecamente seguro llamarlo desde varios subprocesos simultáneamente. El procesamiento concurrente por lotes no requiere ninguna configuración especial más allá de definir BarcodeReaderOptions:
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
' IronBarcode: concurrent batch processing
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim files = Directory.GetFiles("./incoming/", "*.pdf")
Dim allResults As New ConcurrentBag(Of BarcodeResult)()
Parallel.ForEach(files, Sub(file)
Dim results = BarcodeReader.Read(file, options)
For Each r In results
allResults.Add(r)
Next
End Sub)
Para obtener información detallada sobre la lectura de códigos de barras asíncrona y multihilo , la documentación de IronBarcode cubre patrones seguros para subprocesos y opciones de ajuste del rendimiento.
Procesamiento de documentos PDF
La extracción de códigos de barras de archivos PDF es una capacidad distinta de la lectura basada en imágenes y representa una divergencia significativa entre las dos bibliotecas.
Enfoque del SDK de Scandit
Scandit no tiene soporte nativo para PDF. La extracción de códigos de barras de un PDF mediante Scandit requiere convertir cada página del PDF en una imagen rasterizada utilizando una biblioteca de renderizado de PDF independiente, para luego procesar esas imágenes mediante la simulación de la cámara. Este método introduce una dependencia adicional, un coste de licencia extra y un esfuerzo de ingeniería considerable para una tarea que es habitual en los flujos de trabajo de procesamiento de documentos. Los documentos de varias páginas requieren iterar sobre las páginas, gestionar la memoria para las imágenes renderizadas y coordinar manualmente los resultados entre las páginas.
Enfoque IronBarcode
IronBarcode lee códigos de barras de documentos PDF de forma nativa. Una ruta de archivo a un PDF es un argumento válido para BarcodeReader.Read, y los resultados incluyen una propiedad PageNumber que indica en qué página del documento se encontró cada código de barras:
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarcode
' IronBarcode: extract barcodes from every page of a PDF
Dim results = BarcodeReader.Read("shipping-manifest.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
Para obtener una guía completa sobre la lectura de códigos de barras en archivos PDF , incluidas las opciones para la selección de rangos de páginas y la extracción de múltiples códigos de barras, la documentación de IronBarcode cubre toda la gama de escenarios de procesamiento de PDF.
Precios y licencias
La estructura de licencias afecta no solo al coste de una biblioteca, sino también al tiempo necesario para evaluarla y adoptarla.
Enfoque escandinavo
Scandit no publica precios. La página del producto enumera las características y los nombres de los productos (SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser) y dirige todas las consultas a través de una conversación de ventas. El proceso de cotización implica explicar el caso de uso, estimar el volumen de escaneo, especificar los dispositivos, analizar los niveles de soporte y negociar la duración del contrato antes de proporcionar una cifra de costo. Las reseñas en plataformas como G2 y DiscoverSDK señalan sistemáticamente los costes impredecibles para las pequeñas y medianas empresas, así como las dificultades para elaborar presupuestos. Cada línea de productos Scandit tiene un precio y un contrato independientes, lo que significa que el acceso a funciones ampliadas requiere ciclos de venta adicionales.
Enfoque IronBarcode
IronBarcode publica sus niveles de licencia en la página del producto sin necesidad de enviar un formulario ni realizar una consulta de ventas:
| Licencia | Precio | Desarrolladores | Proyectos |
|---|---|---|---|
| Lite | 749 $ una sola vez | 1 | 1 |
| Profesional | $1,499 pago único | 10 | 10 |
| Ilimitado | $2,999 pago único | Ilimitado | Ilimitado |
Las licencias son perpetuas. No hay tarifas por escaneo, ni tarifas por dispositivo, ni umbrales de volumen que desencadenen cambios de nivel. La renovación anual es opcional y tiene un coste equivalente a la mitad del precio original, pero la licencia adquirida sigue siendo válida sin necesidad de renovación. Todas las funciones del paquete IronBarcode (lectura, generación, compatibilidad con PDF, detección de múltiples códigos de barras) están incluidas en todos los niveles.
Referencia de mapeo de API
La siguiente tabla relaciona los conceptos del SDK de Scandit con sus equivalentes en IronBarcode para los equipos que evalúan el coste de traducción de una migración:
| SDK de Scandit | IronBarcode | Notas |
|---|---|---|
DataCaptureContext.ForLicenseKey("key") |
IronBarCode.License.LicenseKey = "key" |
Una tarea; no se requiere objeto contextual |
BarcodeCaptureSettings.Create() |
new BarcodeReaderOptions() |
Opcional en IronBarcode |
settings.EnableSymbologies(Symbology.Code128, ...) |
(not needed) | La detección automática es la opción predeterminada. |
Camera.GetDefaultCamera() |
(not applicable) | No hay concepto de cámara en el procesamiento de archivos. |
dataCaptureContext.SetFrameSourceAsync(camera) |
(not applicable) | No hay fuente de marco en IronBarcode |
camera.SwitchToDesiredStateAsync(FrameSourceState.On) |
(not applicable) | Máquina de estados sin cámara |
barcodeCapture.IsEnabled = true |
BarcodeReader.Read(path) |
Una sola llamada inicia la lectura |
BarcodeScanned += manejador de eventos |
Iteración sobre BarcodeReader.Read() valor de retorno |
Recopilación síncrona; ningún sistema de eventos |
args.Session.NewlyRecognizedBarcodes |
Valor de retorno de BarcodeReader.Read() |
Acceso directo a la colección |
barcode.Data |
result.Value |
Mismo contenido semántico |
barcode.Symbology |
result.Format |
Enumeración de formato equivalente |
| SparkScan, MatrixScan, escaneo de identificación (productos separados) | Paquete único IronBarcode |
No hay complementos adicionales |
Cuando los equipos consideran migrar del SDK de Scandit a IronBarcode
Requisitos de procesamiento del lado del servidor
Los equipos que desarrollan API de ASP.NET Core, servicios de procesamiento en segundo plano o Funciones Azurese topan con la arquitectura de Scandit como una incompatibilidad fundamental desde la primera línea de integración. El DataCaptureContext y el pipeline de la cámara suponen un hardware que no existe en un entorno de servidor. Cuando los requisitos de códigos de barras de un proyecto dependen completamente del servidor (leer archivos cargados, procesar colas de documentos, extraer datos de códigos de barras de archivos PDF entrantes), la canalización de la cámara añade complejidad de inicialización, sobrecarga de máquina de estados asíncrona y limitaciones de plataforma que no contribuyen en nada al requisito empresarial real.
Procesamiento de documentos por lotes
Las organizaciones que procesan grandes volúmenes de documentos con códigos de barras (manifiestos de envío, facturas, registros de inventario, formularios médicos) descubren que el modelo de origen de marcos de Scandit no se integra con las colas de documentos. La biblioteca fue diseñada para sesiones de cámara continuas, no para documentos discretos con puntos de inicio y fin deterministas. Cuando aumenta el volumen de documentos y se hace necesario el procesamiento en paralelo, la capacidad de mantener el estado del sistema de la cámara se convierte en un obstáculo de ingeniería en lugar de una ventaja.
Transparencia en los precios
Los equipos de desarrollo que trabajan en propuestas presupuestarias, comparaciones de proveedores o análisis de costo-beneficio para nuevos proyectos no pueden completar ese trabajo con Scandit sin antes iniciar un ciclo de ventas. Cuando un proyecto tiene un presupuesto y un cronograma definidos, la imposibilidad de determinar el costo de la licencia sin una conversación con el departamento de ventas genera retrasos e incertidumbre que repercuten en la planificación del proyecto. Los equipos que evalúan simultáneamente varias opciones de bibliotecas descubren que la ausencia de precios publicados dificulta la inclusión de Scandit en una comparación estructurada.
Reducción de la complejidad de los procesos
Incluso cuando Scandit ya está implementado para el escaneo con cámara móvil, algunos equipos descubren que los requisitos de códigos de barras del lado del servidor en la misma aplicación requieren una herramienta diferente. El sistema de procesamiento de imágenes de la cámara, adecuado para el escaneo móvil en tiempo real, introduce una complejidad innecesaria cuando se aplica al procesamiento de documentos estáticos. Los equipos que llegan a este punto suelen adoptar IronBarcode para el procesamiento del lado del servidor junto con una implementación existente de Scandit, en lugar de intentar extender el flujo de trabajo de la cámara a casos de uso para los que no fue diseñado.
Consideraciones comunes sobre la migración
El flujo de trabajo de la cámara no tiene un archivo equivalente.
Todo el bloque de inicialización DataCaptureContext (creación de contexto, configuración de ajustes, habilitación de simbología, adquisición de cámara, asignación de fuente de fotogramas y transición de estado) no tiene equivalente en la API basada en archivos de IronBarcode. Al migrar el código de integración del lado del servidor, este bloque se elimina por completo. No está traducido; Se elimina. La sustitución de IronBarcode es una asignación de clave de licencia seguida de una llamada BarcodeReader.Read.
Devolución de llamada de evento a retorno directo
Scandit entrega los resultados de los códigos de barras a través del evento BarcodeScanned, ya que el escaneado con cámara en directo es asíncrono por naturaleza. IronBarcode devuelve los resultados de forma síncrona como una colección tipificada porque la lectura basada en archivos tiene un límite de finalización conocido. La migración implica convertir la lógica del controlador de eventos a una iteración estándar:
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
// IronBarcode direct return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
// IronBarcode direct return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
Imports System
' Scandit callback pattern (removed during migration)
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
ProcessBarcode(barcode.Data, barcode.Symbology.ToString())
Next
End Sub
' IronBarcode direct return (replacement)
For Each result In BarcodeReader.Read("document.png")
ProcessBarcode(result.Value, result.Format.ToString())
Next
Eliminación de la declaración de simbología
Scandit requiere llamadas explícitas al EnableSymbologies antes de iniciar el escaneo. IronBarcode no requiere la declaración previa de la simbología; todos los formatos se detectan automáticamente. Durante la migración, se eliminan todas las llamadas settings.EnableSymbologies(...). Si el código Scandit original restringía las simbologías por motivos de rendimiento, se puede obtener una optimización equivalente en IronBarcode a través de BarcodeReaderOptions.ExpectBarcodeTypes, pero no es necesario para empezar.
Funcionalidades adicionales de IronBarcode
Más allá de las áreas cubiertas en la comparación anterior, IronBarcode ofrece capacidades que amplían su utilidad en escenarios de procesamiento de documentos y datos:
- Generación de códigos de barras : Genere códigos de barras como archivos de imagen o insértelos en archivos PDF para todas las simbologías compatibles, incluidos los códigos QR, Code 128, Data Matrix y PDF417.
- Análisis de datos estructurados y GS1 : Decodifica formatos de datos de códigos de barras estructurados, incluidos los identificadores de aplicación GS1-128, directamente a partir de los resultados del código de barras.
- Corrección y preprocesamiento de imágenes : La corrección automática de imágenes para códigos de barras deformados, de bajo contraste o dañados mejora la velocidad de lectura de los documentos escaneados sin necesidad de preprocesamiento manual.
- Detección de múltiples códigos de barras: Una única llamada
BarcodeReader.Readdetecta todos los códigos de barras presentes en un documento, incluidos los formatos mixtos en la misma página, utilizando la opciónExpectMultipleBarcodes. - Lectura de códigos de barras en MAUI: En las aplicaciones MAUI que utilizan un modelo de captura y procesamiento, IronBarcode se encarga del paso de procesamiento después de capturar una foto utilizando
MediaPicker. - Entrada de flujos y matrices de bytes: Además de rutas de archivos,
BarcodeReader.Readacepta entradasStreamybyte[], lo que permite la integración con gestores de carga, búferes de memoria y flujos de red sin necesidad de crear archivos temporales.
Compatibilidad con .NET y preparación para el futuro
IronBarcode es compatible con .NET Framework 4.6.2 y versiones posteriores, .NET Standard 2.0 y todas las versiones modernas de .NET , incluidas .NET 6, .NET 7, .NET 8 y .NET 9. La biblioteca recibe actualizaciones periódicas para mantener la compatibilidad con las versiones actuales y futuras de .NET , incluida .NET 10, prevista para finales de 2026. Su diseño de API sin estado es compatible con el modelo de programación asíncrona introducido en las versiones modernas de .NET, y su compatibilidad con Linux y las implementaciones en contenedores la posiciona para cargas de trabajo nativas de la nube, donde la adopción de .NET sigue creciendo. Dado que la biblioteca se distribuye como un único paquete NuGet sin dependencias de tiempo de ejecución específicas de la plataforma más allá del propio entorno de ejecución de .NET , la actualización entre versiones de .NET no requiere actualizaciones de biblioteca separadas ni configuración adicional.
Conclusión
Scandit SDK e IronBarcode representan enfoques fundamentalmente diferentes para el procesamiento de códigos de barras que reflejan diferentes contextos de implementación previstos. Scandit se diseñó para el escaneo de cámaras en tiempo real en dispositivos móviles, con una arquitectura que coordina una sesión de cámara en directo, ajustes de análisis por fotograma y la entrega de resultados en función de los eventos. IronBarcode se diseñó para el procesamiento basado en archivos y centrado en documentos en servidores, ordenadores de escritorio e infraestructura en la nube, con una API sin estado que acepta archivos, flujos de datos y PDF, y devuelve resultados síncronos. No se trata de implementaciones contrapuestas de la misma idea, sino de ideas diferentes que responden a distintos casos de uso.
El SDK de Scandit es la opción adecuada para aplicaciones móviles en las que el usuario apunta la cámara de su dispositivo a un código de barras físico y necesita una respuesta visual inferior a 100 ms. Sus capacidades de superposición de realidad aumentada, la detección simultánea de múltiples códigos de barras mediante MatrixScan y el escaneo de documentos de identidad mediante ID Scanning son características diseñadas específicamente que ninguna biblioteca de códigos de barras basada en archivos reproduce. Las organizaciones que despliegan trabajadores móviles de campo a gran escala, que gestionan experiencias de escaneo orientadas al consumidor o que requieren acuerdos de nivel de servicio (SLA) para el escaneo móvil Enterprise, están considerando al público al que Scandit está destinado a servir.
IronBarcode es la opción adecuada cuando los datos de códigos de barras llegan como archivos (imágenes, PDF, matrices de bytes o flujos de datos cargados) y el procesamiento se realiza sin cámara, sin usuario y sin interfaz de usuario. El procesamiento de documentos del lado del servidor, los puntos finales de la API de ASP.NET Core, Azure Functions, los trabajos por lotes programados y los microservicios en contenedores representan los entornos para los que se diseñó IronBarcode . Su política de precios publicados, el acceso a funciones en un solo paquete y la API de lectura directa de archivos eliminan la fricción arquitectónica y la incertidumbre presupuestaria que introducen el modelo de canalización de cámaras y el modelo de ventas por contacto de Scandit en estos escenarios.
La valoración honesta indica que la elección está determinada en gran medida por el contexto de implementación más que por las preferencias personales. Un proyecto que requiere escaneo en tiempo real con cámaras móviles tiene una respuesta clara. Un proyecto que requiere la extracción de códigos de barras PDF del lado del servidor tiene una respuesta igualmente clara. El punto donde a veces se confunden las dos bibliotecas es en el medio: aplicaciones MAUI, arquitecturas híbridas y organizaciones que tienen requisitos tanto de escaneo móvil como de procesamiento de documentos. En esos casos, las dos bibliotecas pueden coexistir: Scandit se encarga del trabajo frente a la cámara, IronBarcode se encarga del procesamiento de documentos y ninguna de las bibliotecas se ve obligada a desempeñar una función para la que no fue diseñada.
Preguntas Frecuentes
¿Qué es Scandit SDK?
Scandit 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 Scandit SDK e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que Scandit 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 más fácil licenciar IronBarcode que Scandit 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 Scandit 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 Scandit 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 Scandit?
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 Scandit 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 Scandit SDK a IronBarcode?
La migración de Scandit 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().

