Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

Spire.Barcode vs IronBarcode: Comparación de bibliotecas de códigos de barras C#

Spire.BarCode requiere el tipo de código de barras al leer: scanner.Scan(path, BarCodeType.Code128). Si procesa documentos cuyos códigos de barras entrantes pueden tener cualquier formato, debe escribir un bucle de detección de formato antes de poder extraer un valor. Esa única decisión sobre la API determina por completo cómo se crean los flujos de trabajo de escaneo de códigos de barras con Spire.Barcode, y conviene comprenderla antes de adoptarla.

Entendiendo Spire.Barcode

Spire.Barcode es una biblioteca comercial de códigos de barras .NET desarrollada por E-iceblue, una empresa de software china que también produce las líneas de productos Spire.Doc, Spire.XLS y Spire.PDF. La biblioteca admite la generación y lectura de códigos de barras en una variedad de simbologías 1D y 2D, y está diseñada para integrarse con el ecosistema más amplio de procesamiento de documentos de E-iceblue.

E-iceblue publica dos paquetes: FreeSpire.Barcode de forma gratuita y Spire.Barcode como producto comercial. El paquete gratuito es un producto con un límite de precio permanente y restricciones intencionadas, en lugar de una prueba por tiempo limitado. El paquete comercial desbloquea el conjunto completo de simbología y elimina las restricciones presentes en la versión gratuita, pero requiere la compra de una licencia independiente de cualquier otro producto Spire que se esté utilizando.

Las principales características arquitectónicas de Spire.Barcode incluyen:

  • Parámetro obligatorio BarCodeType: Cada llamada a BarcodeScanner.Scan() requiere un valor enum BarCodeType. No existe ninguna sobrecarga que acepte únicamente una ruta de archivo y realice una detección automática del formato.
  • Modelo de generación de objetos de configuración: La generación de códigos de barras se centra en un objeto BarcodeSettings mutable que se pasa a una instancia BarCodeGenerator, lo que requiere múltiples asignaciones de propiedades antes de que se produzca ninguna salida.
  • Sin soporte nativo para PDF: Spire.Barcode no puede leer códigos de barras directamente desde archivos PDF. Los flujos de trabajo basados en PDF requieren un paquete Spire.PDF independiente, una licencia independiente y un código manual de extracción de páginas e imágenes escrito por el desarrollador.
  • Limitaciones de la versión gratuita de FreeSpire.Barcode: La versión gratuita aplica grandes marcas de agua de evaluación a los códigos de barras generados, degrada intencionalmente el rendimiento del escaneo, limita el conjunto de simbología disponible y requiere una clave de registro obtenida de E-iceblue antes de que se supriman los cuadros de diálogo de advertencia.
  • Integración con el ecosistema E-iceblue: Los equipos que ya utilizan Spire.Doc o Spire.XLS pueden encontrar ventajoso el conocimiento de la API y los posibles precios combinados. Los equipos que utilizan Spire.Barcode de forma aislada deben asumir el coste total de la licencia por producto sin beneficiarse del ecosistema.
  • Tipo de devolución: BarcodeScanner.Scan() devuelve string[], que no contiene metadatos de formato. El tipo detectado no está incluido en el resultado.

El requisito de especificación de tipo

El BarcodeScanner.Scan() de Spire.BarCode no tiene una sobrecarga que acepte sólo una ruta de archivo. Cada operación de lectura exige que el código que la realiza declare el formato del código de barras con antelación. Para flujos de trabajo de formato único esto funciona, pero para el procesamiento de documentos de formato mixto produce un bucle de iteración candidato:

// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: multi-format detection requires a guessing loop
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

Cada tipo que se agrega al array de candidatos supone una pasada de escaneo adicional. Cualquier formato que falte en la lista se omite silenciosamente. El desarrollador es responsable de mantener un inventario exhaustivo de tipos y de volver a realizar pruebas cada vez que se incorpore un nuevo formato al flujo de trabajo.

Entendiendo IronBarcode

IronBarcode es una biblioteca comercial de códigos de barras .NET desarrollada por Iron Software. Proporciona tanto la lectura como la generación de códigos de barras a través de un modelo de API estática que elimina la necesidad de gestionar instancias. La biblioteca se distribuye como un único paquete NuGet que incluye soporte nativo para el procesamiento de imágenes y archivos PDF sin necesidad de dependencias adicionales.

El motor de lectura de IronBarcode realiza la detección automática de formatos en más de 50 simbologías en una sola pasada de escaneo. Los objetos de resultado devueltos por BarcodeReader.Read() incluyen el tipo de código de barras detectado, el valor descodificado y metadatos contextuales como el número de página para fuentes PDF y las coordenadas de delimitación dentro de la imagen de origen.

Las características clave de IronBarcode incluyen:

  • Detección automática de formato: BarcodeReader.Read() no requiere ningún parámetro de tipo. La biblioteca identifica la simbología durante el escaneo y la incluye en el objeto resultante.
  • Soporte PDF de un solo paquete: Los archivos PDF son aceptados directamente por BarcodeReader.Read() sin ningún paquete NuGet adicional, licencia o código de extracción de página manual.
  • Fluent generation API: BarcodeWriter.CreateBarcode() es un método de fábrica estático que devuelve un objeto encadenable para dimensionar, estilizar y guardar en una única expresión.
  • Modo de prueba con todas las funciones: La versión de prueba de IronBarcode se ejecuta desde el mismo paquete que el producto con licencia, ofreciendo la máxima velocidad de lectura, compatibilidad total con la simbología y el conjunto completo de funciones. La salida generada en modo de prueba lleva una pequeña marca de agua en el borde; El comportamiento lector no se ve afectado.
  • BarcodeReaderOptions para el ajuste: La velocidad de lectura, la detección de múltiples códigos de barras, el preprocesamiento de imágenes y los filtros de simbología esperados se pueden configurar sin cambiar de producto de biblioteca.
  • Objetos de resultado con metadatos: Cada resultado de una colección BarcodeResults expone datos Value, BarcodeType, PageNumber y de región de imagen.

Comparación de características

La siguiente tabla resume las principales diferencias entre Spire.Barcode e IronBarcode:

Característica Spire.Barcode IronBarcode
Lectura de códigos de barras Sí (Se requiere el tipo de código de barras) Sí (detección automática)
Generación de códigos de barras
Detección de formato automático No
Compatibilidad nativa con PDF No (requiere Spire.PDF)
Nivel gratuito FreeSpire.Barcode (restringido) Modo de prueba (funciones completas)
Recuento de simbología 39+ (comercial) Más de 50
Modelo de licencia Niveles por usuario y suscripción Perpetuo con soporte opcional

Comparación detallada de características

Característica Spire.Barcode IronBarcode
Lectura
Detección de formato automático No
Se requiere el tipo de código de barras No
Devuelve metadatos de formato No
Múltiples códigos de barras por imagen
Control de velocidad de lectura No Sí (Opciones del lector de códigos de barras)
Corrección de errores asistida por aprendizaje automático No
Generación
modelo API Objeto de configuración + generador Fábrica estática con cadena fluida
Código QR con logotipo personalizado Solo para el nivel comercial Todos los niveles
Formatos de salida Imagen (PNG, JPEG, BMP) PNG, JPEG, BMP, SVG, HTML, flujo
encadenamiento fluido No
Soporte para PDF
Leer códigos de barras desde PDF Requiere Spire.PDF Producto nativo, sin paquete adicional.
Número de página en el resultado Seguimiento manual
Se requiere licencia adicional Sí (Spire.PDF) No
Plataforma
.NET Framework
.NET Core / .NET 5+
Docker / Linux
Simbologías
1D (Código 128, Código 39, EAN, UPC)
2D (QR, DataMatrix, PDF417)
Recuento total de simbología 39+ (comercial) Más de 50
Licencias
Nivel gratuito FreeSpire.Barcode (con marca de agua, degradado) Modo de prueba (velocidad máxima, pequeña marca de agua)
Es necesario registrarse para acceder al nivel gratuito. No
Modelo de licencia Licencia perpetua por usuario + suscripción Perpetuo con renovación opcional
Punto de entrada de precios $349 (desarrollador único) 749 $ (Lite)

Lectura de códigos de barras

Spire. Enfoque de código de barras

Spire.Barcode's BarcodeScanner.Scan() requiere un parámetro BarCodeType en cada llamada. La llamada de un solo tipo es apropiada cuando el formato es conocido y está garantizado:

// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);

foreach (string value in results)
{
    Console.WriteLine(value);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("barcode.png", BarCodeType.Code128)

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

Cuando el formato no se conoce de antemano, el único método disponible es iterar a través de los tipos candidatos. Cada iteración consiste en un escaneo completo, y cualquier formato que no esté en la lista se omite silenciosamente. El resultado es un string[] que no contiene información de tipo, por lo que el enrutamiento descendente basado en el formato requiere una gestión de estado adicional por parte de la persona que llama.

Enfoque IronBarcode

El BarcodeReader.Read() de IronBarcode no requiere ningún parámetro de tipo. La biblioteca detecta automáticamente el formato en todas las simbologías compatibles en una sola pasada. La lectura de códigos de barras a partir de imágenes se realiza mediante una única llamada a un método, independientemente de la cantidad de formatos diferentes que pueda contener la fuente:

// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
// IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
Imports IronBarCode

' IronBarcode — auto-detection built in
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Cada objeto resultante incluye BarcodeType, Value y metadatos de posición. El enrutamiento descendente basado en el formato no requiere ningún estado adicional; el tipo está presente en el propio resultado.

Limitaciones del nivel gratuito

Spire.Barcode Nivel gratuito

FreeSpire.Barcode aplica una marca de agua de evaluación grande a las imágenes de códigos de barras generadas. La marca de agua cubre el código de barras de tal manera que lo hace inadecuado para su uso en producción y dificulta una evaluación significativa de la calidad de generación. En la versión gratuita, el rendimiento del escaneo se ve intencionadamente reducido, lo que significa que las mediciones de rendimiento realizadas durante la evaluación no representan el rendimiento de la versión comercial de Spire.Barcode. El paquete gratuito también requiere una clave de registro obtenida de E-iceblue para que se supriman los cuadros de diálogo de advertencia durante la ejecución. La simbología disponible en el nivel gratuito es un subconjunto de la oferta comercial. En conjunto, estas restricciones implican que una evaluación basada en FreeSpire.Barcode no representa con precisión lo que ofrece el producto comercial.

Modo de prueba de IronBarcode

La versión de prueba de IronBarcode es el paquete con licencia que se utiliza sin una clave de licencia. La lectura se realiza a máxima velocidad con soporte completo para la simbología y sin restricciones de comportamiento. Las opciones de velocidad y precisión de lectura funcionan de forma idéntica tanto en el modo de prueba como en el modo con licencia. El código de barras generado en modo de prueba incluye una pequeña marca de agua en el borde de la imagen; No oculta el código de barras en sí. El comportamiento que se mide durante una evaluación de IronBarcode es el comportamiento que se implementa en producción.

Aspecto FreeSpire.Barcode Prueba del IronBarcode
Marcas de agua en la salida generada Grande, cubre el código de barras Pequeño, solo el borde de la imagen
Rendimiento de lectura Degradado intencionalmente A toda velocidad
Soporte de simbología Subconjunto limitado (~20 tipos) Juego completo (más de 50 tipos)
Se requiere registro Sí (clave gratuita de E-iceblue) No
Características disponibles Subconjunto limitado Conjunto completo de funciones
Límite de tiempo Ninguno 30 días

Compatibilidad con códigos de barras PDF

Spire. Enfoque de código de barras

Spire.Barcode no tiene capacidad nativa para leer archivos PDF. Para extraer códigos de barras de un archivo PDF, un desarrollador debe instalar el paquete Spire.PDF por separado, adquirir una licencia de Spire.PDF por separado y escribir un código manual de iteración de páginas y extracción de imágenes antes de poder comenzar a escanear códigos de barras:

// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;

var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");

var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
    var images = page.ExtractImages();
    foreach (var image in images)
    {
        // BarCodeType is still required even here
        string[] results = scanner.Scan(image, BarCodeType.QRCode);
    }
}
Imports Spire.Pdf

Dim pdf As New PdfDocument()
pdf.LoadFromFile("document.pdf")

Dim scanner As New BarcodeScanner()
For Each page As PdfPageBase In pdf.Pages
    Dim images = page.ExtractImages()
    For Each image In images
        ' BarCodeType is still required even here
        Dim results As String() = scanner.Scan(image, BarCodeType.QRCode)
    Next
Next
$vbLabelText   $csharpLabel

Este patrón requiere dos paquetes NuGet , dos acuerdos de licencia y código de gestión de páginas escrito por el desarrollador. Si los códigos de barras están incrustados en contenido vectorial en lugar de imágenes rasterizadas dentro del PDF, el método de extracción de imágenes podría no detectarlos por completo.

Enfoque IronBarcode

IronBarcode maneja archivos PDF de forma nativa sin ninguna dependencia adicional. Leer códigos de barras de documentos PDF es una llamada a un único método que utiliza la misma API BarcodeReader.Read() que se utiliza para los archivos de imagen. Los números de página se incluyen en cada objeto de resultado:

// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
Imports IronBarcode

Dim results = BarcodeReader.Read("document.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

No se requiere extracción manual de páginas, ni paquete secundario, ni compra de licencias adicionales.

API de generación

Spire. Enfoque de código de barras

El modelo de generación de Spire.Barcode se centra en un objeto de configuración mutable BarcodeSettings. Un desarrollador instancia la configuración, asigna propiedades individualmente, pasa el objeto de configuración a un BarCodeGenerator, y luego llama a GenerateImage():

// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
// Spire.Barcode generation
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "12345678"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("barcode.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

El hecho de que el objeto de configuración sea mutable implica que las configuraciones pueden compartirse accidentalmente entre llamadas cuando se reutiliza una única instancia en múltiples operaciones de generación. La clase generadora añade un paso de instanciación adicional que no contiene lógica de configuración propia.

Enfoque IronBarcode

IronBarcode utiliza un método de fábrica estático con encadenamiento fluido opcional. No hay ningún objeto de configuración ni ninguna instancia de generador que gestionar:

// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
// IronBarcode generation
using IronBarCode;

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")

' With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Los códigos QR con logotipos personalizados están disponibles en todos los niveles de licencia de IronBarcode :

var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-with-logo.png")
$vbLabelText   $csharpLabel

Precios

La estructura de precios de Spire.Barcode incluye cuatro niveles:

Licencia Precio
Desarrollador único $349
Licencia del sitio $1,398
OEM $6,990
Suscripción $999 al año

Los niveles perpetuos cubren una versión específica. Las actualizaciones y el soporte continuos requieren una suscripción activa además de la licencia perpetua. Un equipo que pasa de un desarrollador a dos pasa directamente del plan de un solo desarrollador de 349 dólares a la licencia de sitio de 1398 dólares. Si también se requiere Spire.PDF para la extracción de códigos de barras de PDF, esa licencia supone un coste adicional.

El sistema de licencias de IronBarcode utiliza tres niveles perpetuos:

Licencia Precio Desarrolladores
Lite $749 1
Profesional $1,499 10
Ilimitado $2,999 Ilimitado

Todos los planes son permanentes, con la opción de añadir una suscripción anual de soporte y actualizaciones. Un equipo de cinco desarrolladores con la licencia Site de Spire.Barcode (1398 dólares) más un año de suscripción (999 dólares) suman un total de 2397 dólares en el primer año, comparable a IronBarcode Profesional, que cuesta 1499 dólares como compra única sin coste adicional para el segundo año.

Referencia de mapeo de API

Spire.Barcode IronBarcode
new BarcodeScanner() Estática BarcodeReader.Read()
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path)
BarCodeType.Code128 (parámetro obligatorio) Detectado automáticamente; no se necesita equivalente
string[] results BarcodeResults colección
results[0] (cadena) results[0].Value (cadena)
new BarcodeSettings() Parámetros para BarcodeWriter.CreateBarcode()
settings.Type = BarCodeType.Code128 BarcodeEncoding.Code128 como segundo parámetro
settings.Data = "value" Primer parámetro de CreateBarcode()
new BarCodeGenerator(settings) No es necesario; static factory sustituye a
generator.GenerateImage() + image.Save() .SaveAsPng(path) o .SaveAsJpeg(path)
Spire.PDF (para leer en PDF) No es necesario; Soporte nativo para PDF integrado
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key"
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key"

Cuando los equipos consideran migrar de Spire.Barcode a IronBarcode

Procesamiento de documentos de formato mixto

Los equipos que comienzan con un único formato de código de barras conocido suelen descubrir que la diversidad de formatos aumenta con el tiempo. Una aplicación de almacenamiento que empezó con etiquetas Code128 puede recibir envíos de proveedores que utilizan DataMatrix, GS1-128 o códigos QR. Cada nuevo formato que entra en el flujo de trabajo requiere actualizar la matriz de candidatos en el bucle de adivinación de tipos, volver a probar la lógica de detección y confirmar que ningún formato existente se ve desplazado por el orden de iteración. Cuando la diversidad de formatos alcanza un punto en el que la sobrecarga de mantenimiento de ese bucle se convierte en un coste de desarrollo recurrente, los equipos evalúan si la detección automática eliminaría por completo esa carga.

Integración de PDF

Las aplicaciones que manejan gran cantidad de documentos a menudo se encuentran con un momento en el que deben extraer códigos de barras de archivos PDF en lugar de imágenes independientes. En un flujo de trabajo de Spire.Barcode, esta transición requiere adquirir una licencia de Spire.PDF, integrar un segundo paquete y desarrollar la infraestructura de iteración de páginas y extracción de imágenes antes de que se pueda realizar cualquier lectura de códigos de barras. Los equipos que no previeron este requisito al realizar la compra inicial se encuentran gestionando dos licencias de producto y dos interfaces API para una tarea que, conceptualmente, pertenece a la lectura de códigos de barras. Descubrir que la compatibilidad con archivos PDF requiere una compra aparte es un motivo frecuente para reevaluar la selección del producto.

Limitaciones de la evaluación del nivel gratuito

Los equipos que evaluaron FreeSpire.Barcode y luego adquirieron la licencia comercial a veces informan que el producto comercial se comporta de manera diferente a como lo indicaba su evaluación. Esto es intencional: el nivel gratuito degrada deliberadamente el rendimiento de lectura y restringe el conjunto de símbolos, lo que significa que las pruebas de rendimiento y de cobertura de formato realizadas durante la evaluación no se transfieren a la implementación comercial. Cuando un equipo descubre esta discrepancia después de la compra, suele buscar alternativas cuyo comportamiento en las pruebas sea representativo del comportamiento en producción.

Reducción del número de productos

Las organizaciones que estandarizan su conjunto de tecnologías a veces identifican Spire.Barcode como un componente más en un inventario creciente de productos E-iceblue, cada uno con su propio costo de licencia y ciclo de renovación. Si el principal objetivo de Spire.Barcode es la lectura de códigos de barras dentro de un proceso de gestión de documentos, en lugar de una integración profunda con Spire.Doc o Spire.XLS, los equipos evalúan si una única biblioteca de códigos de barras independiente reduciría tanto la complejidad de las licencias como la superficie de soporte.

Consideraciones comunes sobre la migración

Eliminación del parámetro BarCodeType

Cada llamada scanner.Scan() en una base de código Spire.Barcode lleva un argumento BarCodeType. La sustitución de estas llamadas por BarcodeReader.Read() elimina por completo el parámetro de tipo. Los bucles de búsqueda de tipo - bloques foreach que iteran a través de valores candidatos BarCodeType - pueden ser eliminados en su totalidad; una sola llamada BarcodeReader.Read() sustituye a todo el bucle.

Actualización del tipo de retorno

El Scan() de Spire.BarCode devuelve el string[]. IronBarcode devuelve una colección BarcodeResults. Los sitios de llamadas que asignan a string[] o pasan resultados a métodos que esperan ese tipo requieren actualización. La extracción de valores como una matriz utiliza .Select(r => r.Value).ToArray(); para acceder al primer resultado se utiliza .First()?.Value.

Eliminación del paquete Spire.PDF

Si Spire.PDF se instaló únicamente para permitir la extracción de códigos de barras de archivos PDF, puede eliminarse después de migrar a IronBarcode. Todas las importaciones using Spire.Pdf; y los bloques de iteración manual de páginas se sustituyen por una única llamada BarcodeReader.Read("file.pdf"). Si Spire.PDF se utiliza para otras operaciones documentales además de la extracción de códigos de barras, debe conservarse y sustituir únicamente las rutas de código relacionadas con los códigos de barras.

Cambios en el espacio de nombres

Sustituya using Spire.Barcode; por using IronBarCode;. El BarCodeType enum se sustituye por BarcodeEncoding para la generación y no requiere ningún equivalente para la lectura. La inicialización de la licencia cambia de BarcodeSettings.ApplyKey() o Spire.License.LicenseProvider.SetLicenseKey() a una única asignación de propiedad IronBarCode.License.LicenseKey al inicio de la aplicación.

Funcionalidades adicionales de IronBarcode

Las siguientes características de IronBarcode no se incluyeron en las comparaciones anteriores:

  • Lectura de imágenes por lotes: BarcodeReader.Read() acepta matrices de rutas de archivos, objetos Stream e instancias Bitmap, lo que permite el procesamiento por lotes sin necesidad de bucles manuales sobre la colección de entrada.
  • BarcodeReaderOptions: La velocidad de lectura, la detección de múltiples códigos de barras, los candidatos máximos y el preprocesamiento de mejora de imágenes se pueden configurar mediante un único objeto de opciones que se pasa a Read().
  • Salida en formato SVG y HTML: BarcodeWriter.CreateBarcode() admite .SaveAsSvg() y .SaveAsHtmlFile() además de formatos de imagen de trama, lo que permite la salida de códigos de barras integrables en la web.
  • Código QR con logotipo: QRCodeWriter.CreateQrCode() admite AddBrandLogo() en todos los niveles de licencia, lo que permite componer una imagen personalizada en el centro del código QR sin afectar a la fiabilidad del escaneado con los niveles de corrección de errores adecuados.
  • Salida de flujo y matriz de bytes: Los códigos de barras generados pueden exportarse como Stream o byte[] para almacenamiento directo o escritura de respuesta HTTP sin archivo intermedio.
  • GS1-128 y simbologías estructuradas: IronBarcode incluye compatibilidad con simbologías GS1 estructuradas que van más allá de lo disponible en el nivel comercial de Spire.Barcode.

Compatibilidad con .NET y preparación para el futuro

IronBarcode es compatible con .NET Framework4.6.2 y versiones posteriores, .NET Core 3.1 y todas las versiones de .NET desde la 5 hasta la 9. Se esperan actualizaciones de compatibilidad para .NET 10 a medida que avance el ciclo de lanzamiento hasta 2026. La biblioteca se ha probado en Windows, Linux y macOS, y se ejecuta en contenedores Docker sin necesidad de configurar dependencias nativas adicionales. Spire.Barcode también admite la implementación multiplataforma de .NET , aunque sus configuraciones para Linux y Docker pueden requerir una configuración adicional de la biblioteca nativa, dependiendo de la versión que se utilice. El ritmo de lanzamiento regular de IronBarcode garantiza que las nuevas características del lenguaje C# y las mejoras del entorno de ejecución .NET se incorporen junto con las actualizaciones de compatibilidad de la plataforma.

Conclusión

Spire.Barcode e IronBarcode abordan el problema de la lectura de códigos de barras desde perspectivas fundamentalmente diferentes. Spire.Barcode traslada el conocimiento del formato al usuario: cada operación de escaneo requiere que el desarrollador declare la simbología con antelación, lo cual es una limitación manejable en flujos de trabajo de formato cerrado y una carga de mantenimiento en los de formato abierto. IronBarcode integra la detección de formato dentro de la biblioteca, sin requerir ningún parámetro de tipo y devolviendo el formato detectado como parte del resultado.

Spire.Barcode es una opción razonable para aplicaciones que procesan un único formato de código de barras garantizado, especialmente cuando el equipo ya está familiarizado con el ecosistema de productos E-iceblue. El modelo de generación de objetos de configuración resulta familiar para los desarrolladores que prefieren la configuración explícita, y la licencia comercial es competitiva para proyectos de un solo desarrollador. Los equipos que puedan garantizar BarCodeType.Code128 en cada llamada no pagan ningún coste práctico por el parámetro de tipo obligatorio.

IronBarcode es más adecuado para aplicaciones donde la diversidad de formatos es impredecible o creciente, donde la extracción de códigos de barras de PDF es un requisito fundamental y donde la precisión de la evaluación es importante. La prueba se ejecuta a velocidad de producción completa con el conjunto completo de simbología, lo que hace que las pruebas de rendimiento y de cobertura de formato realizadas durante la evaluación sean directamente aplicables al despliegue en producción. La compatibilidad nativa con PDF elimina la necesidad de una biblioteca secundaria y los costes de licencia asociados. Para los equipos que estén considerando IronBarcode como una alternativa a Spire.Barcode, la descripción general de Spire.Barcode proporciona contexto adicional para la comparación.

La decisión final depende de la previsibilidad del formato y del alcance del flujo de trabajo. Un sistema de almacén con un estándar de etiquetas Code128 fijo y sin documentos fuente en formato PDF no tiene ninguna razón práctica para preferir la detección automática de IronBarcode. Un sistema de procesamiento de documentos que recibe códigos de barras de proveedores externos, maneja simbologías mixtas y lee archivos PDF adjuntos encontrará que el parámetro de tipo obligatorio y el requisito de dos bibliotecas de PDF representan costos de mantenimiento continuos que IronBarcode elimina.

Preguntas Frecuentes

¿Qué es Spire.BarCode?

Spire.Barcode 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 Spire.Barcode e IronBarcode?

IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que Spire.Barcode 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 Spire.Barcode?

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 Spire.Barcode?

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 Spire.Barcode?

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 Spire.Barcode?

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 Spire.Barcode 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 Spire.Barcode a IronBarcode?

La migración de Spire.Barcode 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().

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Equipo de soporte de Iron

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