Saltar al pie de página
VIDEOS

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

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

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
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
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.
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
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
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:


<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>
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
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;
// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

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

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

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

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

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

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

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

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

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

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

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

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" .
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");
// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
' Temporary disambiguation during phased migration
Dim results = IronBarCode.BarcodeReader.Read("file.png")
$vbLabelText   $csharpLabel

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

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" .
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 notaAspose, 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.

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.

Curtis Chau
Escritor Técnico

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

Leer más

Equipo de soporte de Iron

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