Cómo Personalizar y Estilizar Códigos de Barras en C#
Migrando de OnBarcodea IronBarcode
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;
// 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;
Imports OnBarcode.Barcode
Imports OnBarcode.Barcode
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";
// IronBarcode: one package, one key, one line
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports 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ística | OnBarcode | IronBarcode |
|---|---|---|
| Generación de códigos de barras | Sí | Sí |
| Lectura de códigos de barras | Producto diferente, compra diferente | Se incluye |
| Lectura de códigos de barras PDF | No es compatible de forma nativa. | Nativo: no requiere biblioteca externa. |
| Detección automática de formato al leer | No — no se requiere BarcodeType[] explícito |
Sí |
| Metadatos del resultado (formato, posición, página) | No disponible — solo string[] en bruto |
Sí — BarcodeResults con metadatos completos |
| Código QR con superposición de logotipo | Se requiere código GDI+ manual | Incorporado en |
| Precios publicados | Sí — 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. | Sí |
| Distribución NuGet | Disponible, junto con descargas de DLL heredadas | Disponible desde su lanzamiento |
| Acceso al código fuente | Solo para el nivel ilimitado | No disponible |
| Compatibilidad con .NET 8/9 | Sí | Sí |
| Configuración de licencia de Docker/nube | Manual | Soporte 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
dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
Si su proyecto utiliza la distribución más antigua basada en DLL, también elimine el bloque de referencia manual de su .csproj:
<ItemGroup>
<Reference Include="OnBarcode.Barcode">
<HintPath>lib\OnBarcode.Barcode.dll</HintPath>
<Private>true</Private>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Include="OnBarcode.Barcode">
<HintPath>lib\OnBarcode.Barcode.dll</HintPath>
<Private>true</Private>
</Reference>
</ItemGroup>
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
dotnet add package IronBarcode
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;
// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;
// Add
using IronBarCode;
Imports 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";
// Remove the OnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove the OnBarcodeDLL references and Imports statements
' Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
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");
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");
Imports OnBarcode.Barcode
Dim barcode As 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");
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
Imports 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");
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");
Imports OnBarcode.Barcode
Imports System.Drawing
Dim qr As 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
Dim qrImage As Image = qr.drawBarcode()
Using g As Graphics = Graphics.FromImage(qrImage)
Dim logo As Image = Image.FromFile("brand-logo.png")
Dim logoSize As Integer = qrImage.Width \ 5
Dim x As Integer = (qrImage.Width - logoSize) \ 2
Dim y As Integer = (qrImage.Height - logoSize) \ 2
g.DrawImage(logo, x, y, logoSize, logoSize)
End Using
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");
using IronBarCode;
var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");
Imports IronBarCode
Dim 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);
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);
Imports OnBarcode.Barcode
' OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}
Dim results As String() = scanner.Scan("received-label.png")
For Each value As String In results
Console.WriteLine(value)
Next
Enfoque de IronBarcode :
using IronBarCode;
var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
using IronBarCode;
var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode
Dim results = BarcodeReader.Read("received-label.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
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);
}
// 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);
}
Imports OnBarcode.Barcode
' OnBarcode has no native PDF support.
' A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
Dim pageImages = RenderPdfPagesToImages("invoices.pdf") ' external library call
Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}
For Each pageImage In pageImages
Dim results As String() = scanner.Scan(pageImage)
For Each value As String In results
Console.WriteLine(value)
Next
Next
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}");
using IronBarCode;
var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}");
Imports IronBarCode
Dim results = BarcodeReader.Read("invoices.pdf")
For Each result In results
Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}")
Next
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");
}
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");
}
Imports OnBarcode.Barcode
For Each item In inventoryItems
Dim barcode As 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")
Next
Enfoque de IronBarcode :
using IronBarCode;
foreach (var item in inventoryItems)
{
BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
.SaveAsPng($"labels/{item.Id}.png");
}
using IronBarCode;
foreach (var item in inventoryItems)
{
BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
.SaveAsPng($"labels/{item.Id}.png");
}
Imports IronBarCode
For Each item In inventoryItems
BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128) _
.SaveAsPng($"labels/{item.Id}.png")
Next
Referencia de mapeo de la API de OnBarcodea IronBarcode
| OnBarcode | IronBarcode | Notas |
|---|---|---|
| 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 único | Un paquete cubre todas las capacidades |
new Linear() |
BarcodeWriter.CreateBarcode(data, encoding) |
Fábrica estática; sin instancia de objeto |
barcode.BarcodeType = BarcodeType.CODE128 |
BarcodeEncoding.Code128 como parámetro |
Pasado como segundo argumento a CreateBarcode |
barcode.Data = "..." |
Primer parámetro de CreateBarcode |
Los 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.CODE128 |
BarcodeEncoding.Code128 |
Constante renombrada |
BarcodeType.QRCode |
BarcodeEncoding.QRCode |
Mapeo directo |
BarcodeType.EAN13 |
BarcodeEncoding.EAN13 |
Mapeo directo |
BarcodeType.DataMatrix |
BarcodeEncoding.DataMatrix |
Mapeo directo |
BarcodeType.PDF417 |
BarcodeEncoding.PDF417 |
Mapeo directo |
new BarcodeScanner() { BarcodeTypes = [...] } |
BarcodeReader.Read(path) — estático |
Sin instancia, sin especificación de formato |
scanner.Scan("file.png") → string[] |
BarcodeReader.Read("file.png") → BarcodeResults |
Tipo de retorno más rico |
results[0] (cadena en bruto) |
result.Value |
Valor de cadena decodificado |
| N/A | result.Format |
Formato detectado: no disponible en OnBarcode |
| N/A | result.PageNumber |
El código fuente de la página para PDF lee: |
| N/A | BarcodeReader.Read("document.pdf") |
Lectura nativa de PDF; no existe un equivalente en OnBarcode |
| Superposición manual GDI+ para logotipo QR | QRCodeWriter.CreateQrCodeWithLogo() |
Soporte para logotipos integrado |
Configuración de BarcodeType[] |
No es necesario | La 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" .
# Search for lingering OnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
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");
// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
' Temporary disambiguation during phased migration
Dim 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");
// No format configuration required
var results = BarcodeReader.Read("label.png");
Dim 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" .
# 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" .
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
- Elimine el paquete NuGet
OnBarcode.Barcode.Generator - Elimine el paquete NuGet
OnBarcode.Barcode.Reader - Elimine cualquier entrada manual de DLL
<Reference>de archivos.csproj - Elimine los archivos DLL de OnBarcodedel repositorio.
- Ejecute
dotnet add package IronBarcode - Reemplace
using OnBarcode.Barcodeconusing IronBarCodeen cada archivo - Reemplace
using OnBarcode.Barcode.Readerconusing IronBarCodeen cada archivo - Elimine ambas entradas de
<Reference>de OnBarcodeDLL (generador y lector) — no hay llamadas de licencia en tiempo de ejecución para reemplazar - Agregue
IronBarCode.License.LicenseKey = "YOUR-KEY"una vez al inicio de la aplicación - Convierta cada bloque de asignación de propiedades
new Linear()onew QRCode()+ aBarcodeWriter.CreateBarcode(data, encoding) - Reemplace
barcode.drawBarcode("file.png")con.SaveAsPng("file.png")(o el método de formato apropiado) - Reemplace
new BarcodeScanner() { BarcodeTypes = [...] }+.Scan(path)conBarcodeReader.Read(path) - Actualice la gestión de resultados de la indexación
string[]aresult.Valueyresult.FormatenBarcodeResults - Elimine cualquier código de conversión de PDF a imagen utilizado para sortear la limitación de PDF de OnBarcode.
- 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
OnBarcodeen.cs,.csprojo 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.
Preguntas Frecuentes
¿Por qué debería migrar de OnBarcode a IronBarcode?
Entre las razones más comunes se incluyen la simplificación de licencias (eliminando la complejidad de SDK + clave de tiempo de ejecución), la eliminación de límites de rendimiento, la obtención de compatibilidad nativa con PDF, la mejora de la implementación de Docker/CI/CD y la reducción de la repetición de API en el código de producción.
¿Cómo puedo sustituir las llamadas a la API de OnBarcode por IronBarcode?
Sustituya la creación de instancias y la repetición de licencias por IronBarCode.License.LicenseKey = "key". Sustituya las llamadas al lector por BarcodeReader.Read(path) y las llamadas al escritor por BarcodeWriter.CreateBarcode(data, encoding). Los métodos estáticos no requieren gestión de instancias.
¿Cuánto código cambia al migrar de OnBarcode a IronBarcode?
La mayoría de las migraciones se traducen en menos líneas de código. Se eliminan la repetición de licencias, los constructores de instancias y la configuración explícita de formatos. Las operaciones básicas de lectura/escritura se traducen a equivalentes IronBarcode más cortos con objetos de resultado más limpios.
¿Necesito mantener instalados OnBarcode e IronBarcode durante la migración?
No. La mayoría de las migraciones son sustituciones directas en lugar de operaciones paralelas. Migre una clase de servicio cada vez, sustituya la referencia NuGet y actualice los patrones de instanciación y llamada a la API antes de pasar a la siguiente clase.
¿Cuál es el nombre del paquete NuGet para IronBarcode?
El paquete es 'IronBarCode' (con B y C mayúsculas). Instálalo con 'Install-Package IronBarCode' o 'dotnet add package IronBarCode'. La directiva using en el código es 'using IronBarCode;'.
¿Cómo simplifica IronBarcode el despliegue de Docker en comparación con OnBarcode?
IronBarcode es un paquete NuGet sin archivos SDK externos ni configuración de licencia montada. En Docker, establezca la variable de entorno IRONBARCODE_LICENSE_KEY y el paquete se encargará de la validación de la licencia al inicio.
¿IronBarcode detecta automáticamente todos los formatos de código de barras tras migrar desde OnBarcode?
Sí, IronBarcode detecta automáticamente la simbología de todos los formatos compatibles. No es necesaria la enumeración explícita de BarcodeTypes. Si ya se conoce el formato y el rendimiento es importante, BarcodeReaderOptions permite restringir el espacio de búsqueda como optimización.
¿Puede IronBarcode leer códigos de barras de PDF sin una biblioteca independiente?
Sí. BarcodeReader.Read("document.pdf") procesa archivos PDF de forma nativa. Los resultados incluyen PageNumber, Format, Value y Confidence para cada código de barras encontrado. No es necesario ningún paso externo de procesamiento de PDF.
¿Cómo gestiona IronBarcode el procesamiento paralelo de códigos de barras?
Los métodos estáticos de IronBarcode no tienen estado y son seguros para los hilos. Utilice Parallel.ForEach directamente sobre listas de archivos sin gestión de instancias por subproceso. BarcodeReaderOptions.MaxParallelThreads controla el presupuesto interno de hilos.
¿Qué propiedades de los resultados cambian al migrar de OnBarcode a IronBarcode?
Cambios de nombre comunes: BarcodeValue se convierte en Value, BarcodeType se convierte en Format. Los resultados de IronBarcode también añaden Confidence y PageNumber. Una búsqueda y sustitución en toda la solución gestiona los cambios de nombre en el código de procesamiento de resultados existente.
¿Cómo configuro las licencias de IronBarcode en un proceso CI/CD?
Almacene IRONBARCODE_LICENSE_KEY como un secreto de canalización y asigne IronBarCode.License.LicenseKey en el código de inicio de la aplicación. Un secreto cubre todos los entornos, incluidos los de desarrollo, prueba, montaje y producción.
¿Admite IronBarcode la generación de códigos QR con estilos personalizados?
Sí. QRCodeWriter.CreateQrCode() admite colores personalizados mediante ChangeBarCodeColor(), incrustación de logotipos mediante AddBrandLogo(), niveles de corrección de errores configurables y múltiples formatos de salida, incluidos PNG, JPG, PDF y stream.

