IRONSOFTWAREHOME
VIDEOS

Migrating from Spire.Barcode to IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

El BarcodeScanner.Scan() de Spire.Barcode requiere un argumento BarCodeType en cada llamada. A medida que el código fuente crece para gestionar diversas fuentes de documentos, nuevas etiquetas de proveedores y nuevos formatos de códigos de barras, este diseño genera bucles de adivinación de tipos que acumulan costes de mantenimiento con el tiempo. Esta guía abarca el proceso completo de transición de Spire.Barcode a IronBarcode: los motivos por los que los equipos realizan esta transición, los pasos necesarios para llevarla a cabo y los patrones de código anteriores y posteriores para cada operación común.

¿Por qué migrar desde Spire.Barcode?

Especificación de formato como sobrecarga: Cada llamada a BarcodeScanner.Scan() en Spire.Barcode requiere un valor de enumeración BarCodeType que el código llamante debe proporcionar. Las aplicaciones que procesan códigos de barras procedentes de fuentes desconocidas o de formato mixto deben mantener una lista de posibles tipos y recorrerla iterativamente hasta encontrar una coincidencia. Cada formato que se añade al flujo de trabajo requiere actualizar la matriz de candidatos, volver a probar la lógica de detección y confirmar que el orden de iteración no provoque que un formato oculte a otro. Estos costes generales aumentan en proporción a la diversidad de formatos.

Restricciones de evaluación de la versión gratuita: FreeSpire.Barcode degrada intencionadamente el rendimiento de lectura y limita el conjunto de simbología disponible en comparación con el producto comercial. Las pruebas de rendimiento y de cobertura de formato realizadas durante una evaluación de FreeSpire.Barcode no representan el comportamiento comercial de Spire.Barcode. Los equipos que se comprometen a realizar una compra basándose en una evaluación gratuita de la versión de prueba pueden descubrir, después de la compra, que el producto se comporta de manera diferente en producción, especialmente en lo que respecta al rendimiento y las simbologías compatibles.

PDF que requiere dos bibliotecas: Spire.Barcode no puede leer códigos de barras directamente desde archivos PDF. Los flujos de trabajo basados en PDF requieren el paquete Spire.PDF separado con su propia licencia, además de código escrito por el desarrollador para iterar páginas, extraer imágenes de cada página y enviar esas imágenes al escáner de código de barras. Una tarea que conceptualmente pertenece a la lectura de códigos de barras se divide entre dos productos, dos acuerdos de licencia y una cantidad significativa de código de infraestructura.

Complejidad del tipo de retorno: BarcodeScanner.Scan() devuelve string[], que contiene solo valores decodificados. El formato de código de barras detectado no se incluye en la devolución. Las aplicaciones que necesitan enrutar los resultados por formato —por ejemplo, enviar valores de códigos QR a un procesador y valores Code128 a otro— deben mantener una variable de tipo separada derivada del paso de iteración que produjo el resultado, lo que crea una gestión de estado adicional más allá del escaneo en sí.

El problema fundamental

El bucle de adivinanza de tipo es el síntoma más visible de la restricción mandatoria BarCodeType. En un código fuente de Spire.Barcode que procesa documentos de múltiples fuentes, este patrón aparece repetidamente:

// Spire.Barcode: growing candidate loop with silent misses
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;
    }
}

IronBarcode elimina el bucle por completo. La detección de formato está integrada en la biblioteca:

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

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

IronBarcode vs Spire.Barcode: Comparación de características

CaracterísticaSpire.BarcodeIronBarcode
Detección automática de formatoNo
Se requiere el parámetro BarCodeTypeNo
Formatear metadatos en el resultadoNo
Lectura nativa de PDFNo (requiere Spire.PDF)
Biblioteca adicional para PDFSpire.PDF (licencia aparte)None
Rendimiento de lectura del nivel gratuitoDegradado intencionalmenteA toda velocidad
marcas de agua de nivel gratuitoGrande, cubre el código de barrasPequeño, solo borde
Simbologías de niveles gratuitos~20 tiposMás de 50 tipos
Registro para el nivel gratuitoNo
Modelo API de generaciónObjeto de configuración + generadorFábrica estática con cadena fluida
Código QR con logotipo personalizadoSolo para el nivel comercialTodos los niveles
Tipo de retorno de lecturastring[]BarcodeResults (con metadatos de tipo)
Recuento de simbología39+ (comercial)Más de 50
Modelo de licenciaLicencia perpetua por usuario + suscripciónPerpetuo con renovación opcional

Inicio rápido

Paso 1: Sustituir el paquete NuGet

Elimine el paquete o los paquetes de Spire que esté utilizando actualmente:

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

Si Spire.PDF se utiliza para otras operaciones con documentos más allá de la extracción de código de barras, manténgalo y elimine solo las rutas de código relacionadas con códigos de barras.

Instalar IronBarcode:

dotnet add package IronBarcode
SHELL

Paso 2: Actualizar los espacios de nombres

Reemplace todas las importaciones del espacio de nombres de Spire con el espacio de nombres de IronBarcode:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;

Paso 3: Inicializar licencia

Sustituya la inicialización de la licencia de Spire por una única asignación de propiedad de IronBarcode al iniciar la aplicación. Consulte la página de licencias de IronBarcode para obtener información sobre los formatos clave y las opciones de implementación.

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Para entornos Docker y CI, la clave de licencia se puede proporcionar desde una variable de entorno:

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");

Ejemplos de migración de código

Lectura de un código de barras de formato conocido

Una lectura de formato único en Spire.Barcode pasa explícitamente el tipo y recibe un string[].

Enfoque Spire.Barcode:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}

Enfoque de IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}

Se elimina el parámetro BarCodeType. Si la lógica adicional necesita confirmar el formato detectado, results.First().Format lo proporciona sin requerir una variable de estado separada.

Colapsar un bucle de tipo de formato mixto

Cuando un código fuente de Spire.Barcode gestiona documentos que pueden contener varios formatos, el bucle de adivinación de tipos se acumula con el tiempo a medida que nuevos formatos entran en el flujo de trabajo.

Enfoque Spire.Barcode:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}

Enfoque de IronBarcode :

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();

El sistema de lectura de imágenes de IronBarcode procesa las más de 50 simbologías en una sola pasada. Cuando se necesita ajustar la velocidad de lectura para el procesamiento por lotes de alto volumen, BarcodeReaderOptions proporciona ese control sin agregar ramas específicas de formato:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);

Para obtener orientación sobre cómo seleccionar el valor ReadingSpeed adecuado, consulte la documentación de opciones de velocidad de lectura.

Generación de un código de barras

La generación de Spire.Barcode requiere instanciar un objeto BarcodeSettings, asignar cada propiedad individualmente, pasar la configuración a un BarCodeGenerator y luego llamar a GenerateImage() antes de escribir cualquier archivo.

Enfoque Spire.Barcode:

using Spire.Barcode;

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

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);

Enfoque de IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");

El objeto mutable BarcodeSettings y la instancia BarCodeGenerator separada se reemplazan por una única llamada de fábrica estática con una cadena fluida. No hay riesgo de que la configuración se comparta accidentalmente en llamadas concurrentes porque cada invocación de CreateBarcode() es independiente.

Lectura de códigos de barras desde un documento PDF

Spire.Barcode no puede leer archivos PDF directamente. El enfoque basado en Spire requiere el paquete Spire.PDF separado para abrir el archivo, iterar sus páginas, extraer imágenes rasterizadas de cada página y luego pasar esas imágenes una por una al escáner de código de barras.

Enfoque Spire.Barcode:

using Spire.Pdf;
using Spire.Barcode;

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

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}

Enfoque de IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

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

IronBarcode lee documentos PDF directamente sin requerir Spire.PDF o cualquier gestión manual de páginas. El número de página de la que se extrajo cada código de barras está disponible en el objeto de resultados. Una vez que se reemplaza el código de lectura de PDF, se puede eliminar la referencia al paquete Spire.PDF y todas las importaciones using Spire.Pdf; del proyecto.

Referencia de mapeo de la API Spire.Barcode a IronBarcode

Spire.BarcodeIronBarcodeNotas
new BarcodeScanner()BarcodeReader.Read() (estático)No se necesita ninguna instancia de escáner
scanner.Scan(path, BarCodeType.X)BarcodeReader.Read(path)Parámetro de tipo eliminado
BarCodeType.Code128 (requerido)Detectado automáticamenteNo se requiere equivalente
BarCodeType.QRCode (requerido)Detectado automáticamenteNo se requiere equivalente
string[] results de Scan()Colección BarcodeResultsAcceder a los valores a través de .Value
results[0] (cadena)results[0].Value
Formato desconocido en el resultadoresult.FormatTipo incluido en el objeto de resultado
new BarcodeSettings()Parámetros en CreateBarcode()No se necesita ningún objeto de configuración
settings.Type = BarCodeType.XBarcodeEncoding.X como segundo parámetro
settings.Data = "value"Primer parámetro de CreateBarcode()
new BarCodeGenerator(settings)No es necesarioLa fábrica estática lo reemplaza
generator.GenerateImage().SaveAsPng() / .SaveAsJpeg()Métodos de salida específicos del formato
BarcodeSettings.ApplyKey("key")IronBarCode.License.LicenseKey = "key"Establecer una vez al inicio
Spire.License.LicenseProvider.SetLicenseKey("key")IronBarCode.License.LicenseKey = "key"Mismo reemplazo de una sola línea
Spire.PDF (para lectura de PDF)No es necesarioSoporte nativo para PDF integrado

Problemas comunes de migración y soluciones

Problema 1: Eliminación del parámetro BarCodeType

Spire.Barcode: scanner.Scan(path, BarCodeType.Code128) — el argumento de tipo es requerido por la firma del método. Eliminarlo provoca un error de compilación.

Solución: Reemplazar la llamada completa con BarcodeReader.Read(path). Buscar en el código base BarCodeType. para localizar cada ocurrencia. Los bucles de adivinanza de tipo (bloques foreach que iteran sobre una matriz de candidatos BarCodeType[]) pueden eliminarse en su totalidad; una única llamada a BarcodeReader.Read() reemplaza el bucle.

Problema 2: Tipo de retorno de string[]

Spire.Barcode: Scan() returns string[]. El código posterior que asigna esto a una variable string[] o lo pasa a un método que espera string[] fallará al compilar después de la migración.

Solución: Actualizar los sitios de llamada para trabajar con BarcodeResults. Para obtener un array de cadenas simple, utilize .Select(r => r.Value).ToArray(). Para acceder al primer resultado, utilize .First()?.Value. Si el formato detectado se necesita posteriormente, está disponible en el objeto resultado a través de .Format — no se requiere una variable de estado separada.

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;

Problema 3: Limpieza del paquete Spire.PDF

Spire.Barcode: Los flujos de trabajo de lectura de PDF dependen de Spire.PDF para el acceso a páginas y la extracción de imágenes. El proyecto hace referencia al paquete y contiene importaciones using Spire.Pdf; y usos de PdfDocument / PdfPageBase distribuidos en varios archivos.

Solución: Después de reemplazar todo el código de extracción de códigos de barras en PDF con BarcodeReader.Read("file.pdf"), realice una auditoría con grep para confirmar que no quedan referencias Spire.Pdf antes de eliminar el paquete:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

Elimine el paquete solo cuando se hayan borrado todas las referencias:

dotnet remove package Spire.PDF
SHELL

Problema 4: Cambios en el espacio de nombres

Spire.Barcode: El espacio de nombres Spire.Barcode contiene BarcodeScanner, BarcodeSettings, BarCodeGenerator y BarCodeType. El espacio de nombres IronBarCode contiene BarcodeReader, BarcodeWriter, BarcodeEncoding y BarcodeReaderOptions.

Solución: Reemplazar using Spire.Barcode; por using IronBarCode; globalmente. El enum BarCodeType usado en la generación es reemplazado por BarcodeEncoding. El enum BarCodeType usado en la lectura no tiene equivalente en IronBarcode — simplemente se elimina, ya que la detección de formato es automática.

Lista de verificación para la migración de Spire.Barcode

Tareas previas a la migración

Antes de realizar cambios, revise el código fuente para identificar todos los usos de Spire.Barcode:

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • Documentar todos los archivos que contienen matrices de candidatos BarCodeType (bucles de adivinanza de tipo que deben eliminarse)
  • Identificar cualquier variable string[] que reciba resultados de Scan() y necesite actualizaciones de tipo
  • Confirmar si Spire.PDF se utiliza para operaciones distintas a la extracción de códigos de barras

Tareas de actualización de código

  1. Eliminar el paquete NuGet FreeSpire.Barcode o Spire.Barcode
  2. Eliminar el paquete NuGet Spire.PDF si la extracción de códigos de barras era su único uso
  3. Instalar el paquete NuGet IronBarcode
  4. Reemplazar todos using Spire.Barcode; con using IronBarCode;
  5. Eliminar todas las importaciones using Spire.Pdf; donde ya no sean necesarias
  6. Reemplazar la inicialización de licencias: ApplyKey() o SetLicenseKey() con IronBarCode.License.LicenseKey = "key"
  7. Eliminar todas las instancias new BarcodeScanner()
  8. Reemplazar todas las llamadas scanner.Scan(path, BarCodeType.X) con BarcodeReader.Read(path)
  9. Eliminar los bucles foreach que intentan adivinar el tipo de datos; reemplazar cada uno con una única llamada BarcodeReader.Read()
  10. Eliminar los bloques de iteración de página PDF y extracción de imágenes; reemplazar con BarcodeReader.Read("file.pdf")
  11. Actualizar las asignaciones de resultados string[] para usar .Value o .Select(r => r.Value).ToArray()
  12. Reemplazar bloques new BarcodeSettings() con cadenas BarcodeWriter.CreateBarcode(data, encoding)
  13. Eliminar instancias new BarCodeGenerator(settings)
  14. Reemplazar .GenerateImage() + image.Save() con .SaveAsPng() o .SaveAsJpeg()
  15. Reemplazar valores del enum BarCodeType.X en la generación con BarcodeEncoding.X

Pruebas posteriores a la migración

  • Confirmar que todos los formatos previamente escaneados vía el bucle de candidatos sean detectados correctamente por BarcodeReader.Read()
  • Medir el rendimiento del procesamiento por lotes y confirmar que cumple con los requisitos de producción.
  • Verificar que la extracción del código de barras del PDF produzca valores y números de página correctos.
  • Confirme la calidad y la capacidad de escaneo del código de barras generado con un escáner físico o de software.
  • Compruebe que la clave de licencia esté cargada correctamente en todos los entornos de despliegue (local, preproducción, producción, CI/CD).
  • Ejecute los comandos grep audit de Tareas previas a la migración para confirmar que no queden referencias a Spire.

Principales ventajas de migrar a IronBarcode

Eliminación de la sobrecarga de mantenimiento de formatos: Tras la migración, no hay que mantener ninguna lista de tipos candidatos ni actualizar ningún bucle de detección de tipos cuando un nuevo formato de código de barras entra en el flujo de trabajo. BarcodeReader.Read() maneja el conjunto completo de simbología automáticamente, y el formato detectado se incluye en cada objeto de resultado para la ruta posterior.

Evaluación precisa antes de comprometerse: La versión de prueba de IronBarcode se ejecuta desde el mismo archivo binario que el producto con licencia, a máxima velocidad de lectura y con el conjunto completo de simbología. Los parámetros de rendimiento y las pruebas de cobertura de formato realizadas durante la evaluación de la fase de prueba se transfieren directamente a la producción. Los equipos pueden tomar una decisión de compra con la seguridad de que el comportamiento evaluado es el comportamiento que se implementará.

Soporte de PDF de paquete único: La extracción de códigos de barras de archivos PDF es manejada por la misma llamada BarcodeReader.Read() utilizada para imágenes. No se requiere ninguna biblioteca secundaria, ninguna licencia adicional ni código para la iteración manual de páginas. Los equipos que anteriormente mantenían tanto Spire.Barcode como Spire.PDF se reducen a una sola dependencia para todo el flujo de trabajo de códigos de barras.

Objetos de resultado con metadatos de formato: Cada entrada en una colección BarcodeResults lleva el valor decodificado, la simbología detectada, el número de página de origen para entradas PDF y la región delimitadora dentro de la imagen fuente. Las aplicaciones que necesitan enrutar, filtrar o registrar por formato tienen esa información disponible en el resultado sin necesidad de una gestión de estado adicional.

API de generación simplificada: El patrón de fábrica estática en BarcodeWriter.CreateBarcode() elimina el objeto mutable BarcodeSettings y la instancia BarCodeGenerator separada. Cada llamada de generación es independiente, lo que reduce el riesgo de que la configuración se filtre entre operaciones concurrentes.

Compatibilidad con versiones futuras: IronBarcode recibe actualizaciones periódicas que coinciden con las versiones del entorno de ejecución de .NET . A medida que la adopción de .NET 10 aumente hasta 2026, las actualizaciones de compatibilidad garantizarán que las bases de código migradas continúen compilándose y ejecutándose sin necesidad de realizar cambios en las bibliotecas con cada nueva versión de .NET .

Por favor nota: Spire es una marca registrada de su propietario respectivo. Este sitio no está afiliado, respaldado ni patrocinado por e-iceblue. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.
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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta