IRONSOFTWAREHOME
VIDEOS

Migrando de OnBarcodea IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

Esta guía cubre el proceso completo de migración de OnBarcodea IronBarcode . Aborda el cambio de configuración en tres pasos, proporciona ejemplos de código antes y después para cada patrón común, asigna la API de OnBarcodea sus equivalentes de IronBarcode , documenta los problemas que surgen durante la migración y proporciona una lista de verificación de términos de búsqueda para auditar su base de código antes de considerar que la migración está completa.

¿Por qué migrar desde OnBarcode?

Superación de adquisición de dos SKU: OnBarcodepublica precios perpetuos para el SDK del Generador (solo lineal y niveles lineales + 2D) y enumera el SDK del Lector como un producto con precio separado. Una organización que necesita ambas capacidades debe completar dos procesos de adquisición contra dos SKU: seleccionar el nivel de Generador correcto para los simbologías que se utilizan, luego comprar el Lector por separado, antes de que se establezca el costo total. La fricción es duplicación a través de dos compras en lugar de un solo elemento de línea.

Sobrecarga del producto dividido: La generación y la lectura son productos separados con paquetes NuGet separados, espacios de nombres de licencia separados, claves de licencia separadas y calendarios de versiones separados. Un proyecto que utilice ambos productos debe configurar dos claves de licencia al iniciarse, realizar un seguimiento de dos versiones de paquetes durante las actualizaciones y mantener un conocimiento de dos ciclos de lanzamiento independientes. Cuando se añade el requisito de lectura a un proyecto que originalmente solo contemplaba la generación de datos, es necesario repetir todo el proceso de adquisición e integración para el segundo producto.

Deficiencias en el flujo de trabajo de PDF: OnBarcodeno ofrece soporte nativo para leer códigos de barras de documentos PDF. Los proyectos que procesan códigos de barras integrados en facturas, manifiestos de envío, órdenes de compra o escaneos de archivo deben adquirir una biblioteca de renderizado de PDF a imagen independiente, integrarla en el flujo de trabajo, gestionar su licencia por separado y pasar las páginas renderizadas al SDK de OnBarcodeReader una a una. Esto genera una solución con dos dependencias, cuando una solución con una sola dependencia sería suficiente.

Verbosidad de la API: El generador OnBarcoderequiere instanciar un objeto Barcode, asignando múltiples propiedades — incluyendo propiedades con valores predeterminados sensatos como Resolution, BarWidth y BarHeight — y luego llamando a un método de generación. Se puede obtener el mismo resultado con mucho menos código utilizando una API de fábrica estática. Al multiplicarse a lo largo de la generación por lotes, el patrón de asignación de propiedades produce grandes volúmenes de código repetitivo que deben revisarse y mantenerse.

El problema fundamental

La configuración de doble licencia es el punto de fricción más inmediato para cualquier proyecto que necesite tanto generación como lectura. OnBarcoderequiere dos llamadas separadas a dos espacios de nombres de licencia separados al iniciarse:

// OnBarcode: two products, two DLL references, no runtime key
// OnBarcodeuses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;
C#

IronBarcode reduce esto a una única asignación de propiedad que abarca todas las capacidades (generación, lectura, compatibilidad con PDF y operaciones por lotes) bajo una sola clave:

// IronBarcode: one package, one key, one line
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Todas las operaciones con códigos de barras en la aplicación, independientemente de si generan, leen o procesan archivos PDF, se ejecutan bajo esa única configuración.

IronBarcode vs OnBarcode: Comparación de funciones

CaracterísticaOnBarcodeIronBarcode
Generación de códigos de barras
Lectura de códigos de barrasProducto diferente, compra diferenteSe incluye
Lectura de códigos de barras PDFNo es compatible de forma nativa.Nativo: no requiere biblioteca externa.
Detección automática de formato al leerNo — no se requiere BarcodeType[] explícito
Metadatos del resultado (formato, posición, página)No disponible — solo string[] en brutoSí — BarcodeResults con metadatos completos
Código QR con superposición de logotipoSe requiere código GDI+ manualIncorporado en
Precios publicadosSí — por páginas de producto (niveles de Generador + Lector separado)Sí — una sola página cubre todas las capacidades
Una única clave de licencia para todas las funcionalidades.No, claves separadas por producto.
Distribución NuGetDisponible, junto con descargas de DLL heredadasDisponible desde su lanzamiento
Acceso al código fuenteSolo para el nivel ilimitadoNo disponible
Compatibilidad con .NET 8/9
Configuración de licencia de Docker/nubeManualSoporte para variables de entorno

Inicio rápido: Migración de OnBarcodea IronBarcode

Paso 1: Eliminar las referencias al paquete OnBarcode

Si su proyecto utiliza los paquetes NuGet , elimine ambos:

dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
SHELL

Si su proyecto utiliza la distribución más antigua basada en DLL, también elimine el bloque de referencia manual de su .csproj:

<!-- Remove this block entirely -->
<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>
XML

Elimine los archivos DLL del directorio lib/ o de donde sea que estén almacenados. Dejar los ensamblados antiguos junto con el nuevo paquete NuGet producirá conflictos de espacio de nombres en tiempo de compilación.

Paso 2: Añadir IronBarcode

Un único paquete cubre la generación, lectura y compatibilidad con archivos PDF:

dotnet add package IronBarcode
SHELL

No se requiere ningún segundo paquete para la lectura. No se requiere ningún paquete adicional para la compatibilidad con PDF.

Paso 3: Actualizar los espacios de nombres y reemplazar la configuración de licencia dual.

Reemplace ambas directivas OnBarcodeusing con una única importación de IronBarcode :

// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;

Reemplaza las referencias duales de DLL con una asignación de clave única. Coloque esto una sola vez, al inicio de la aplicación, antes de que se ejecute cualquier operación con códigos de barras:

// Remove the OnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
C#

Ejemplos de migración de código

Generación de códigos de barras Code 128

El caso básico del Código 128 ilustra el patrón de asignación de propiedades frente al patrón de fábrica estática.

Enfoque OnBarcode:

using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");

Enfoque de IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

Los datos y el tipo de codificación se pasan como argumentos a CreateBarcode. No se requieren propiedades como la resolución y la altura de las barras para producir una salida escaneable; La configuración predeterminada es adecuada para la mayoría de los usos. Cuando se necesitan dimensiones personalizadas, se pueden agregar como llamadas encadenadas entre CreateBarcode y SaveAsPng sin introducir estado de objeto mutable.

Generación de código QR con logotipo

Los códigos QR con logotipo requieren que OnBarcoderecurra a System.Drawing para el paso de superposición de imagen. IronBarcode proporciona esto como una operación incorporada.

Enfoque OnBarcode:

using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");

Enfoque de IronBarcode :

using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");

El nivel de corrección de errores, el cálculo del tamaño del logotipo y la composición de la imagen se gestionan internamente. No se requiere dependencia de System.Drawing.

Lectura de códigos de barras a partir de una imagen

La lectura de un archivo de imagen ilustra la consolidación del producto de la forma más clara. Con OnBarcode, la lectura requiere el SDK de lector independiente, una llamada de licencia independiente y la especificación explícita del formato. Con IronBarcode, se trata de una única llamada estática que utiliza el mismo paquete y la misma clave que ya están configurados.

Enfoque OnBarcode:

using OnBarcode.Barcode;

// OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);
C#

Enfoque de IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");

Sin creación de instancias, sin matriz de formato, sin configuración de licencia separada. El formato se detecta automáticamente. Cada resultado incluye el valor decodificado y el formato detectado. Para obtener más información sobre las opciones de lectura y los tipos de imagen compatibles, consulte la guía sobre cómo leer códigos de barras a partir de imágenes .

Lectura de códigos de barras desde un PDF

Este ejemplo de migración se aplica a los equipos que convertían páginas PDF en imágenes utilizando una biblioteca de terceros antes de pasar esas imágenes al SDK de OnBarcodeReader.

Enfoque OnBarcode:

// OnBarcodehas no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}
C#

Enfoque de IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format}{result.Value}");

Sin paso de renderizado, sin biblioteca PDF externa, sin matriz de formatos. La función de lectura de códigos de barras de PDF procesa todas las páginas automáticamente e incluye el número de página en cada resultado.

Generación de lotes

La generación de códigos de barras para una colección de artículos sigue el mismo patrón que la generación de un solo artículo.

Enfoque OnBarcode:

using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}

Enfoque de IronBarcode :

using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}

Referencia de mapeo de la API de OnBarcodea IronBarcode

OnBarcodeIronBarcodeNotas
DLL pre-licenciado (no se requiere llamada de clave de tiempo de ejecución)IronBarCode.License.LicenseKey = "key"Asignación de propiedad; se llama una vez al inicio
Dos referencias de DLL (generador + lector)Paquete NuGet únicoUn paquete cubre todas las capacidades
new Linear()BarcodeWriter.CreateBarcode(data, encoding)Fábrica estática; sin instancia de objeto
barcode.BarcodeType = BarcodeType.CODE128BarcodeEncoding.Code128 como parámetroPasado como segundo argumento a CreateBarcode
barcode.Data = "..."Primer parámetro de CreateBarcodeLos datos son el primer argumento
barcode.drawBarcode("file.png").SaveAsPng("file.png")Método con formato definido
barcode.drawBarcode("file.jpg").SaveAsJpeg("file.jpg")Método con formato definido
barcode.drawBarcode("file.pdf").SaveAsPdf("file.pdf")Salida PDF nativa
BarcodeType.CODE128BarcodeEncoding.Code128Constante renombrada
BarcodeType.QRCodeBarcodeEncoding.QRCodeMapeo directo
BarcodeType.EAN13BarcodeEncoding.EAN13Mapeo directo
BarcodeType.DataMatrixBarcodeEncoding.DataMatrixMapeo directo
BarcodeType.PDF417BarcodeEncoding.PDF417Mapeo directo
new BarcodeScanner() { BarcodeTypes = [...] }BarcodeReader.Read(path) — estáticoSin instancia, sin especificación de formato
scanner.Scan("file.png")string[]BarcodeReader.Read("file.png")BarcodeResultsTipo de retorno más rico
results[0] (cadena en bruto)result.ValueValor de cadena decodificado
N/Aresult.FormatFormato detectado: no disponible en OnBarcode
N/Aresult.PageNumberEl código fuente de la página para PDF lee:
N/ABarcodeReader.Read("document.pdf")Lectura nativa de PDF; no existe un equivalente en OnBarcode
Superposición manual GDI+ para logotipo QRQRCodeWriter.CreateQrCodeWithLogo()Soporte para logotipos integrado
Configuración de BarcodeType[]No es necesarioLa detección automática es la opción predeterminada.

Problemas comunes de migración y soluciones

Problema 1: Conflictos de referencias a DLL

OnBarcode: Los proyectos en la distribución de DLL antigua tienen elementos de <Reference> en .csproj apuntando a lib\OnBarcode.Barcode.dll o rutas similares. Si la DLL antigua permanece en el disco cuando se agrega IronBarcode , el compilador detectará dos ensamblados que proporcionan los mismos prefijos de espacio de nombres y producirá errores de referencia ambiguos.

Solución: Elimine el bloque de referencia <ItemGroup> de .csproj antes de ejecutar dotnet add package IronBarcode. Elimine los archivos DLL del disco. Verifique con una compilación limpia que no queden referencias de ensamblados obsoletas.

# Search for lingering OnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
SHELL

Problema 2: Conflictos de nombres de tipos durante la migración por fases

OnBarcode: El espacio de nombres del lector exporta una clase llamada BarcodeScanner. IronBarcode tiene una clase estática llamada BarcodeReader. Estos nombres no entran en conflicto directamente, pero cualquier archivo que importe ambos OnBarcode.Barcode.Reader y IronBarCode simultáneamente puede ver ambigüedad en el enum BarcodeType — OnBarcodedefine BarcodeType para su selección de formato, e IronBarcode usa BarcodeEncoding. Mantener ambos espacios de nombres activos durante la migración producirá errores de compilación en cualquier referencia BarcodeType.

Solución: Complete la migración de cada archivo atómicamente — elimine la directiva using OnBarcode.Barcode.Reader y agregue using IronBarCode en la misma edición. No deje ambas directivas de uso presentes en ningún archivo. Si se requiere un enfoque por fases, utilice nombres completos temporalmente:

// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");

Problema 3: Eliminación de la matriz BarcodeType

OnBarcode: El lector requiere reader.BarcodeTypes = new BarcodeType[] { ... } para funcionar. Los desarrolladores que migran el código del lector a veces tienen la costumbre de especificar los formatos explícitamente y buscan una configuración equivalente en IronBarcode.

Solución: Eliminar por completo la especificación del formato. BarcodeReader.Read realiza detección automática en todos los formatos compatibles. No se necesita configuración, y no existe un equivalente de BarcodeType[] en IronBarcode porque no es requerido.

// No format configuration required
var results = BarcodeReader.Read("label.png");

Lista de verificación de migración de OnBarcode

Tareas previas a la migración

Antes de realizar cambios, revise el código fuente para localizar todos los usos de OnBarcode:

# Find all OnBarcodenamespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
SHELL

Documentar qué archivos utilizan solo generación, cuáles utilizan lectura y cuáles utilizan ambas. Tenga en cuenta cualquier archivo que incluya el bloque manual de DLL <Reference> en lugar de una referencia de paquete NuGet.

Tareas de actualización de código

  1. Elimine el paquete NuGet OnBarcode.Barcode.Generator
  2. Elimine el paquete NuGet OnBarcode.Barcode.Reader
  3. Elimine cualquier entrada manual de DLL <Reference> de archivos .csproj
  4. Elimine los archivos DLL de OnBarcodedel repositorio.
  5. Ejecute dotnet add package IronBarcode
  6. Reemplace using OnBarcode.Barcode con using IronBarCode en cada archivo
  7. Reemplace using OnBarcode.Barcode.Reader con using IronBarCode en cada archivo
  8. Elimine ambas entradas de <Reference> de OnBarcodeDLL (generador y lector) — no hay llamadas de licencia en tiempo de ejecución para reemplazar
  9. Agregue IronBarCode.License.LicenseKey = "YOUR-KEY" una vez al inicio de la aplicación
  10. Convierta cada bloque de asignación de propiedades new Linear() o new QRCode() + a BarcodeWriter.CreateBarcode(data, encoding)
  11. Reemplace barcode.drawBarcode("file.png") con .SaveAsPng("file.png") (o el método de formato apropiado)
  12. Reemplace new BarcodeScanner() { BarcodeTypes = [...] } + .Scan(path) con BarcodeReader.Read(path)
  13. Actualice la gestión de resultados de la indexación string[] a result.Value y result.Format en BarcodeResults
  14. Elimine cualquier código de conversión de PDF a imagen utilizado para sortear la limitación de PDF de OnBarcode.
  15. Reemplace los bucles de escaneo + renderizado de PDF en varios pasos con una sola llamada de BarcodeReader.Read("file.pdf")

Pruebas posteriores a la migración

  • Verificar que cada tipo de código de barras utilizado en el proyecto (Code 128, QR, EAN, Data Matrix, PDF417) genere una salida escaneable.
  • Escanee los códigos de barras generados con un escáner físico o un dispositivo móvil para confirmar su legibilidad.
  • Verificar que la lectura del código de barras devuelva valores correctos para las imágenes de prueba conocidas.
  • Confirmar que la lectura de PDF devuelve valores y números de página correctos para documentos de prueba de varias páginas.
  • Ejecute la aplicación en cualquier entorno de integración continua (CI) para confirmar que la configuración de la clave de licencia funciona correctamente en el pipeline.
  • Verifique que no quede ninguna cadena OnBarcode en .cs, .csproj o archivos de configuración luego de completar la migración

Principales ventajas de migrar a IronBarcode

Paquete y licencia consolidados: Tras la migración, un único paquete NuGet y una única clave de licencia cubren todas las operaciones con códigos de barras. No es necesario adquirir productos por separado, ni realizar un seguimiento de versiones independientes, ni mantener una configuración de doble licencia al inicio. La complejidad de un sistema de dos productos se reemplaza por una única dependencia.

Adquisiciones transparentes: IronBarcode publica los precios de las licencias perpetuas en su sitio web. De esta forma, las organizaciones pueden determinar el coste total, enviar una orden de compra y completar el proceso sin necesidad de una conversación con el departamento de ventas. La página de licencias de IronBarcode incluye precios para todos los niveles y detalles sobre la configuración clave para entornos Docker y en la nube.

Compatibilidad nativa con PDF: Los proyectos que anteriormente requerían una biblioteca de renderizado de PDF independiente para procesar archivos PDF con códigos de barras incrustados pueden eliminar por completo esa dependencia. Una sola llamada de BarcodeReader.Read procesa todas las páginas de un documento PDF sin ningún paso de renderizado, y cada resultado incluye el número de página del cual fue extraído.

Resultados de Lectura Más Ricos: El tipo de retorno BarcodeResults proporciona el valor decodificado, el formato de código de barras detectado, las coordenadas de la caja delimitadora dentro de la imagen fuente y el número de página para lecturas de PDF. Las aplicaciones que anteriormente trabajaban con un string[] plano ahora pueden mostrar información de formato, soportar flujos de trabajo de anotaciones o implementar filtros basados en confianza sin procesamiento adicional.

Superficie de API reducida: El patrón de fábrica estática reemplaza el modelo de asignación de propiedades. Las operaciones de generación comunes requieren menos líneas de código, y las operaciones de lectura no requieren la creación de instancias ni la preconfiguración del formato. Las operaciones por lotes se benefician de un menor número de códigos por artículo, lo que facilita su revisión y mantenimiento a lo largo del tiempo.

Por favor nota: Aspose, OnBarcodey PDFium son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado, respaldado ni patrocinado por Aspose Pty Ltd, Chromium Project, Google, o OnBarcode. 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