Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

NetBarcode vs IronBarcode: Comparación de bibliotecas de códigos de barras C#

SDK de Scandit vs IronBarcode: Escaneo basado en tubería de cámara vs Procesamiento de documentos basado en archivos

Para empezar a leer códigos de barras con Scandit, configura un DataCaptureContext, crea BarcodeCaptureSettings, habilita explícitamente las simbologías, obtén una cámara, configúrala como fuente de fotogramas, cambia la cámara al estado On y habilita la captura. La fijación de precios es solo mediante contacto con ventas, sin lista de precios publicada.

Esa combinación — una tubería centrada en la cámara y un modelo de fijación de precios mediante contacto de ventas — da forma a qué escenarios de .NET se ajusta Scandit y a cuáles no. Para el procesamiento de documentos del lado del servidor, una API de ASP.NET Coreque lea códigos de barras de archivos subidos, o una Función de Azure que procese PDFs de envío, las suposiciones de la tubería de cámara se convierten en fricción en lugar de capacidad. Esta comparación examina de dónde proviene la arquitectura de Scandit, dónde encaja IronBarcode en su lugar, y cómo difieren en la práctica las dos bibliotecas.

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 está diseñada para soportar el escaneo de cámaras en tiempo real en dispositivos iOS, Android y MAUI, con líneas de productos especializadas que cubren 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 trabajadores de campo móviles, operaciones de almacén y escenarios de punto de interacción en retail donde hay presente una cámara física y un usuario en vivo.

La arquitectura de la biblioteca está organizada alrededor del pipeline DataCaptureContext, el cual coordina una sesión de cámara, configuraciones de análisis de fotogramas y configuración de captura de códigos de barras como un sistema unificado con estado. 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 DataCaptureContext y conectándolo a una instancia de cámara antes de que cualquier trabajo con códigos de barras pueda ocurrir.
  • Declaración explícita de simbologías: Los formatos de códigos de barras deben habilitarse individualmente usando EnableSymbologies antes de que comience la sesión de captura. La detección automática no está disponible.
  • Entrega de resultados impulsada por 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 ser devueltos de forma síncrona desde una llamada de 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 basados en cotización: Según la página de precios de Scandit, las ediciones pagadas se cotizan según la edición, los dispositivos, el volumen de escaneo y la duración del contrato; están disponibles una prueba gratuita y una Edición Comunitaria.
  • 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.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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.Maui
Imports Scandit.DataCapture.Barcode.Maui

' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui

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
$vbLabelText   $csharpLabel

Cada línea en este bloque configura la infraestructura de la cámara. La API no expone una ruta de archivo, PDF o argumento de secuencia en este punto de entrada: asume una cámara en funcionamiento antes de que comience el trabajo de 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 sola llamada estática a BarcodeReader.Read acepta una ruta de archivo, flujo, matriz de bytes o PDF y devuelve una colección de resultados.

IronBarcode se envía como un único paquete NuGet que contiene todas las capacidades de lectura y generación a través de más de 50 formatos de código 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, permitiendo Parallel.ForEach y patrones asíncronos para escenarios de 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 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 un objetivo documentado Objetivo de despliegue principal
Configuración de la simbología Obligatorio antes de escanear Opcional; auto-detection is default
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 un objetivo documentado 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
Detección automática de formato No (debe especificarse)
Formatos 1D (Código 128, EAN, UPC, etc.) Integral (según la documentación de simbología de Scandit) Más de 50
Formatos 2D (QR, DataMatrix, Aztec, PDF417)
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 No una característica documentada de procesamiento de archivos Sí (con tecnología de aprendizaje automático)
Generación
Generación de códigos de barras No soportado
Salida a archivo de imagen No soportado
Exportar a PDF No soportado
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 un objetivo documentado Soporte completo
Azure Functions/sin servidor No es práctico Soporte completo
Servidor Docker/Linux No soportado Soporte completo
Consola / servicio en segundo plano No un objetivo documentado 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 Posible (listado como variables de precios) No
Acceso a todas las funciones con un solo paquete. No (productos modulares)

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 fotogramas de cámara en tiempo real. El DataCaptureContext mantiene una sesión de cámara activa, y BarcodeCapture escucha códigos de barras en cada fotograma entrante. Los resultados de los códigos de barras 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
$vbLabelText   $csharpLabel

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, flujo o matriz de bytes, realiza toda la detección de forma síncrona 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-LICENSE-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-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
    Console.WriteLine($"{result.Value} ({result.Format})");
Imports IronBarCode

' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine($"{result.Value} ({result.Format})")
Next
$vbLabelText   $csharpLabel

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, la cual no tiene equivalente en entornos de computación sin servidor, implementaciones 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 un objetivo documentado
Azure Functions No es práctico
Servidor Docker/Linux No soportado
Consola / servicio en segundo plano No un objetivo documentado

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
Azure Functions/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

El pipeline de cámara de Scandit fue diseñado para una sola sesión de cámara que sirve a un solo usuario o dispositivo. El modelo FrameSourceState asume una sesión de cámara continua y persistente, no una cola de documentos siendo procesados con rendimiento. 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 es sin estado, es inherentemente seguro llamarlo desde múltiples hilos simultáneamente. El procesamiento de lotes concurrentes 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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 de lista. La página del producto enumera características y nombres de producto — SparkScan, MatrixScan, ID Scanning, AR Overlays, Parser — y redirige las consultas sobre precios a través de una conversación de ventas. El proceso de cotización normalmente implica describir el caso de uso, estimar el volumen de escaneo, especificar dispositivos, discutir niveles de soporte y seleccionar una duración de contrato antes de proporcionar una cifra de costo. Cada línea de productos de Scandit se cotiza y se contrata por separado, por lo que expandir el acceso a características puede requerir un ciclo de ventas adicional.

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
Plus $1,499 pago único 3 3
Profesional $2,999 pago único 10 10
Ilimitado $5,999 ú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
Manejador de eventos BarcodeScanned += Iteración sobre el valor de retorno BarcodeReader.Read() 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 de Azure encuentran que la arquitectura de Scandit está orientada alrededor de supuestos que no se sostienen en un entorno de servidor. El DataCaptureContext y el pipeline de cámara esperan hardware de cámara y una fuente de fotograma en vivo. Cuando los requisitos de códigos de barras de un proyecto son completamente del lado del servidor — leyendo archivos subidos, procesando colas de documentos, extrayendo datos de códigos de barras de PDFs entrantes — la tubería de cámara agrega pasos de inicialización y restricciones de plataforma que no son relevantes para la carga de trabajo.

Procesamiento de documentos por lotes

Las organizaciones que procesan altos volúmenes de documentos portadores de códigos de barras — manifiestos de envío, facturas, registros de inventario, formularios médicos — encuentran que el modelo de fuente de marco de Scandit está orientado hacia sesiones de cámara continuas en lugar de documentos discretos con puntos de inicio y fin determinados. Cuando el volumen de documentos crece y el procesamiento en paralelo se vuelve necesario, el diseño con estado de la tubería de cámara requiere ingeniería adicional para adaptarse.

Transparencia en los precios

Los equipos de desarrollo que trabajan en propuestas de presupuesto, comparaciones de proveedores o análisis de costo-beneficio para nuevos proyectos necesitan una conversación de ventas para determinar el costo de licencia de Scandit. Cuando un proyecto tiene un presupuesto definido y un cronograma definido, requerir una conversación de ventas para obtener una cotización agrega pasos a la evaluación y planificación. Los equipos que evalúan múltiples opciones de biblioteca simultáneamente pueden encontrar que la ausencia de precios publicados hace que la comparación estructurada lado a lado sea más difícil.

Reducción de la complejidad de los procesos

Incluso cuando Scandit ya está desplegado para escaneo de cámaras móviles, los requisitos de códigos de barras del lado del servidor en la misma aplicación pueden requerir una herramienta diferente. La tubería de cámara que se adapta al escaneo móvil en tiempo real añade complejidad cuando se aplica al procesamiento de documentos estáticos. Los equipos que llegan a este punto a menudo adoptan IronBarcode para el procesamiento del lado del servidor junto con un despliegue de Scandit existente, en lugar de extender la tubería de cámara para cubrir flujos de trabajo de documentos.

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ías, adquisición de cámara, asignación de fuente de fotograma 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. El reemplazo 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 resultados de códigos de barras a través del evento BarcodeScanned porque la exploración de cámara en vivo es asíncrona 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
$vbLabelText   $csharpLabel

Eliminación de la declaración de simbología

Scandit requiere llamadas EnableSymbologies explícitas antes de que comience la exploración. IronBarcode no requiere la declaración previa de la simbología; todos los formatos se detectan automáticamente. Durante la migración, todas las llamadas settings.EnableSymbologies(...) son eliminadas. Si el código original de Scandit estaba restringiendo simbologías por razones de rendimiento, la optimización equivalente en IronBarcode está disponible 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 sola llamada BarcodeReader.Read detecta todos los códigos de barras presentes en un documento, incluidos los formatos mixtos en la misma página, usando la opción ExpectMultipleBarcodes.
  • Lectura de códigos de barras MAUI: En aplicaciones MAUI usando un modelo de captura y proceso, IronBarcode maneja el paso de procesamiento después de que se captura una foto usando MediaPicker.
  • Entrada de flujo y matriz de bytes: Además de rutas de archivos, BarcodeReader.Read acepta entradas Stream y byte[], permitiendo la integración con manejadores de carga, búferes de memoria, y flujos de red sin creación de archivos temporales.

Compatibilidad con .NET y preparación para el futuro

IronBarcode admite .NET Framework 4.6.2 y posteriores, .NET Standard 2.0, y versiones modernas de .NET incluyendo .NET 6, .NET 8, .NET 9 y .NET 10. La biblioteca recibe actualizaciones regulares para mantener la compatibilidad con las versiones actuales de .NET. Su diseño de API sin estado se adapta al modelo de programación asincrónica utilizado en .NET moderno, y su soporte para Linux y despliegues en contenedores se adapta a cargas de trabajo nativas de la nube. 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 precio publicado, acceso a características en un solo paquete y API de lectura de archivos directa están diseñados para estos escenarios, donde el modelo de tubería de cámara de Scandit y la fijación de precios mediante contacto de ventas están orientados hacia una forma de despliegue diferente.

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().

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame