IRONSOFTWAREHOME
VIDEOS

Migrando desde Código de barras DevExpress a IronBarcode

Curtis Chau
Curtis Chau
Updated: 20 de junio de 2026

Si utiliza DevExpress por sus controles de cuadrícula, gráficos, programador o tabla dinámica, consérvelos. Esta migración se refiere específicamente a reemplazar BarCodeControl con una biblioteca que también pueda leer códigos de barras, funcionar sin interfaz de usuario y desplegarse fuera de un contexto de UI. Los controles de interfaz de usuario de DevExpress que utiliza para su aplicación WinForms o Blazor no se verán afectados por esta migración. Solo cambia el código específico del código de barras.

El escenario típico que motiva esta migración es uno de estos tres: surge un requisito de lectura y DevExpress no puede satisfacerlo; Un nuevo servicio requiere la generación de códigos de barras en ASP.NET Core o en una función en la nube donde no estén presentes los ensamblados de WinForms; o llega el momento de renovar la Suite y el cálculo del coste por función de usar un conjunto completo de herramientas de interfaz de usuario solo para la salida de códigos de barras deja de tener sentido.

Paso 1: Instalar IronBarcode

dotnet add package BarCode

Si va a mantener otros controles de DevExpress en el mismo proyecto, deje los paquetes NuGet de DevExpress en su lugar. Solo cambia el código relacionado con el código de barras en tus archivos fuente. Si la generación de códigos de barras fue la única razón por la que DevExpress apareció en un proyecto en particular y no utiliza ningún otro control de DX allí, puede eliminar los paquetes de DevExpress de ese proyecto después de la migración:

# Only remove DevExpress packages if no other DX controls are used in this project
dotnet remove package DevExpress.Win.Navigation
SHELL

Paso 2: Agregar inicialización de licencia

Agrega la activación de la licencia de IronBarcode una vez al inicio de la aplicación — en Program.cs, App.xaml.cs o tu host builder:

// In Program.cs (ASP.NET Core) or application entry point
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

No hay llamada de red. No hay código de error que comprobar. Validación local.

Paso 3: Reemplazar el código específico del código de barras

Busque en su código fuente los tipos de códigos de barras de DevExpress. Todo lo demás permanece igual:

# Find barcode-related DevExpress usage — ignore grid, chart, and other DX components
grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator\|DevExpress.XtraPrinting.BarCode" --include="*.cs" .
grep -r "barCode\.Module\|DrawToBitmap\|BarCode\.Symbology" --include="*.cs" .
SHELL

Los resultados de esta búsqueda son exactamente lo que reemplazarás. Nada más.

Ejemplos de migración de código

Generación del código 128

Esta es la migración más común. Un BarCodeControl con una simbología Code128Generator se convierte en una única llamada BarcodeWriter.CreateBarcode.

Antes — Control DevExpress WinForms:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new Code128Generator();
    symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
    barCode.Symbology = symbology;
    barCode.Text = data;
    barCode.Module = 0.02f;
    barCode.ShowText = true;

    barCode.Width = 400;
    barCode.Height = 100;
    var bitmap = new Bitmap(barCode.Width, barCode.Height);
    barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
    bitmap.Save(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Después — IronBarcode:

// NuGet: dotnet add package BarCode
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .SaveAsPng(outputPath);
}

El dimensionamiento del documento-unidad de barCode.Module = 0.02f ha desaparecido. .ResizeTo(400, 100) toma píxeles directamente. La asignación manual de Bitmap y la llamada a DrawToBitmap se reemplazan por .SaveAsPng(), que maneja el dimensionamiento automáticamente.

Generación de códigos QR

Antes: DevExpress QR con corrección de errores:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateQrCode(string url, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new QRCodeGenerator();
    symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
    symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
    barCode.Symbology = symbology;
    barCode.Text = url;

    barCode.Width = 500;
    barCode.Height = 500;
    var bitmap = new Bitmap(barCode.Width, barCode.Height);
    barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
    bitmap.Save(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Después — IronBarcode:

using IronBarCode;

public void GenerateQrCode(string url, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}

QRCodeErrorCorrectionLevel.H se asigna a QRCodeWriter.QrErrorCorrectionLevel.Highest. La configuración de CompactionMode.AlphaNumeric es manejada automáticamente por IronBarcode según el contenido.

Código QR con el logotipo de la marca (funcionalidad totalmente nueva, no posible con DevExpress):

using IronBarCode;

public void GenerateBrandedQrCode(string url, string logoPath, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .AddBrandLogo(logoPath)
        .SaveAsPng(outputPath);
}

Generación de matriz de datos

Antes — DevExpress:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
var symbology = new DataMatrixGenerator();
symbology.MatrixSize = DataMatrixSize.Matrix26x26;
barCode.Symbology = symbology;
barCode.Text = "PART-7734-X";
// ... DrawToBitmap pattern

Después — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("PART-7734-X", BarcodeEncoding.DataMatrix)
    .ResizeTo(260, 260)
    .SaveAsPng("datamatrix.png");

Generación PDF417

Antes — DevExpress:

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
barCode.Symbology = new PDF417Generator();
barCode.Text = "SHIPMENT-DATA-2026";
// ... DrawToBitmap pattern

Después — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIPMENT-DATA-2026", BarcodeEncoding.PDF417)
    .ResizeTo(400, 150)
    .SaveAsPng("pdf417.png");

Agregar capacidad de lectura (nueva funcionalidad)

DevExpress no proporciona ninguna API de lectura. Si surge la necesidad de realizar una lectura, es aquí donde IronBarcode se amortiza de inmediato:

using IronBarCode;

// Read from an image file
var results = BarcodeReader.Read("uploaded-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Found {result.Format}: {result.Value}");
}

// Read with options for better accuracy on difficult images
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};
var detailedResults = BarcodeReader.Read("multi-barcode-sheet.png", options);

Punto final de código de barras de ASP.NET Core

Esto no era posible con BarCodeControl sin soluciones alternativas en WinForms. IronBarcode lo admite de forma nativa:

using IronBarCode;

// In Program.cs or a controller
app.MapGet("/label/{sku}", (string sku) =>
{
    var pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png", $"{sku}.png");
});

app.MapGet("/qr/{data}", (string data) =>
{
    var pngBytes = QRCodeWriter.CreateQrCode(data, 300, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png");
});

Lectura de códigos de barras en archivos PDF

IronBarcode lee archivos PDF de forma nativa. Sin PdfiumViewer, sin bucle de renderizado, sin paquetes adicionales:

using IronBarCode;

// Read all barcodes from all pages of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Barcode: {result.Value} | Format: {result.Format}");
}

Problemas comunes de migración

barCode.Module utiliza unidades de documento, no píxeles.

barCode.Module controla el ancho de la barra más estrecha en unidades de documento (dependiente del contexto de DPI de renderización). Esto no es un recuento de píxeles. Al migrar, no intentes convertir el valor del módulo a píxeles; en su lugar, decide qué dimensiones en píxeles deseas y usa .ResizeTo(width, height) directamente.

// Before: barCode.Module = 0.02f  — document units, indirect sizing
// After:
.ResizeTo(400, 100)  // explicit pixel dimensions

DrawToBitmap requiere un mapa de bits preasignado.

El patrón antiguo asignaba un Bitmap de un tamaño específico, luego llamaba a DrawToBitmap para renderizar en él. El .SaveAsPng() de IronBarcode maneja todo esto internamente. No se asigna nada previamente.

// Before: must know size upfront, allocate, draw, save, dispose
barCode.Width = 400;
barCode.Height = 100;
var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save(path, ImageFormat.Png);
bitmap.Dispose();

// After: size specified once, everything else handled
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(path);

Enlace de datos de WinForms

Si BarCodeControl estaba vinculado a una fuente de datos en un diseñador de WinForms, el equivalente en IronBarcode es leer el valor de tu modelo explícitamente y pasarlo a BarcodeWriter.CreateBarcode. IronBarcode no participa en el enlace de datos de WinForms; es una API programática, no un control de interfaz de usuario. Si necesitas mostrar el código de barras generado en un formulario, genera los bytes de imagen y establécelos en un PictureBox:

using IronBarCode;

// Generate and display in a WinForms PictureBox
private void UpdateBarcodeDisplay(string value)
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    using var ms = new System.IO.MemoryStream(bytes);
    pictureBox1.Image = System.Drawing.Image.FromStream(ms);
}

Reemplazo de espacio de nombres

Importaciones antiguas que se deben eliminar:

// Remove these
using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

Nueva importación para añadir:

// Add this
using IronBarCode;

Referencia de mapeo de API

Código de barras DevExpressEquivalente de IronBarcode
new BarCodeControl()Estático: ninguna instancia
new Code128Generator() + barCode.Symbology = symbologyBarcodeEncoding.Code128 parámetro
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.HQRCodeWriter.CreateQrCode(data, size, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26BarcodeWriter.CreateBarcode(data, BarcodeEncoding.DataMatrix)
new PDF417Generator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.PDF417)
new AztecCodeGenerator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Aztec)
barCode.Text = valuePrimer argumento para CreateBarcode o CreateQrCode
barCode.Module = 0.02f.ResizeTo(width, height) en píxeles
barCode.ShowText = true.AddBarcodeText()
DrawToBitmap(bitmap, rect).SaveAsPng(path)
new Bitmap(w, h) + eliminación manualNo es necesario
Bitmap → MemoryStream → HTTP.ToPngBinaryData()
No se puede leer la APIBarcodeReader.Read(path)
using DevExpress.XtraEditors + using DevExpress.XtraPrinting.BarCodeusing IronBarCode

Lista de comprobación de la migración

Utilice este patrón grep para encontrar todos los archivos que necesitan actualizarse:

grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator" --include="*.cs" .
grep -r "barCode\.Module\|barCode\.Symbology\|DrawToBitmap\|DevExpress\.XtraPrinting\.BarCode" --include="*.cs" .
SHELL

Analiza cada partido:

  • Reemplaza using DevExpress.XtraEditors; y using DevExpress.XtraPrinting.BarCode; con using IronBarCode;
  • Reemplaza new BarCodeControl() + configuración de simbología con BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)
  • Reemplaza new QRCodeGenerator() + configuración de simbología con QRCodeWriter.CreateQrCode(data, size, errorLevel)
  • Reemplaza barCode.Module = X con .ResizeTo(width, height)
  • Reemplaza DrawToBitmap + patrón bitmap.Save con .SaveAsPng(path)
  • Reemplaza patrones de Bitmap-a-MemoryStream con .ToPngBinaryData()
  • Agrega IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" al inicio de la aplicación
  • Agrega llamadas BarcodeReader.Read() donde sea necesaria la capacidad de lectura

Si un proyecto utiliza DevExpress únicamente para controles de códigos de barras y ningún otro componente de DX, elimine los paquetes NuGet de DevExpress después de reemplazar todas las referencias a códigos de barras. Si el proyecto utiliza la cuadrícula, el gráfico u otros controles de interfaz de usuario de DevExpress, mantenga esos paquetes; esta migración solo afecta al código de los códigos de barras.

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