DevExpress Barcode vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
DevExpress es un kit de herramientas de interfaz de usuario .NET muy valorado. Los controles de cuadrícula, planificador, gráfico y tabla dinámica son realmente excelentes y los utilizan miles de equipos Enterprise . Sin embargo, la compatibilidad con códigos de barras es otra historia. DevExpress suministra un BarCodeControl - un control WinForms y una etiqueta Blazor DxBarCode - que permite representar un código de barras en un formulario en tiempo de diseño. Cuando se ha preguntado a su equipo de soporte sobre el reconocimiento de códigos de barras, la respuesta ha sido consistente: no existe capacidad de lectura, y no hay planes actuales para añadirla. Si sus códigos de barras se encuentran en un proceso en segundo plano, una API web, un documento PDF o cualquier entorno sin un formulario de interfaz de usuario, este control no se aplica.
Esa limitación reduce la oferta de códigos de barras de DevExpress a un nicho específico: la representación visual de un código de barras dentro de una interfaz de usuario de DevExpress WinForms o Blazor . Para ese nicho de mercado funciona perfectamente. Para cualquier otra cosa —generación del lado del servidor, lectura de imágenes o PDF, procesamiento sin interfaz gráfica en Azure Functions o contenedores Docker— se necesita una herramienta diferente.
Comprensión de los controles de código de barras de DevExpress
La funcionalidad de código de barras de DevExpress se encuentra en DevExpress.XtraBars.BarCode y en los espacios de nombres de simbología relacionados. No es una biblioteca independiente. Está incluido en el Suite DXperience, que cuesta aproximadamente 2499 dólares o más al año. No existe ningún paquete NuGet independiente que contenga solo códigos de barras y que puedas instalar.
El BarCodeControl es un control WinForms que hereda de la jerarquía de controles. Se configura con un objeto de simbología, se establecen las propiedades y se muestra en pantalla. Guardar ese renderizado en un archivo requiere llamar a DrawToBitmap, que espera un Bitmap preasignado del tamaño adecuado:
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
using System.Drawing;
using System.Drawing.Imaging;
var barCode = new BarCodeControl();
var symbology = new Code128Generator();
symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
barCode.Symbology = symbology;
barCode.Text = "ITEM-12345";
barCode.Module = 0.02f; // document units, not pixels
barCode.ShowText = true;
// File output requires DrawToBitmap — you must size the Bitmap manually
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("barcode.png", ImageFormat.Png);
bitmap.Dispose();
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
using System.Drawing;
using System.Drawing.Imaging;
var barCode = new BarCodeControl();
var symbology = new Code128Generator();
symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
barCode.Symbology = symbology;
barCode.Text = "ITEM-12345";
barCode.Module = 0.02f; // document units, not pixels
barCode.ShowText = true;
// File output requires DrawToBitmap — you must size the Bitmap manually
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("barcode.png", ImageFormat.Png);
bitmap.Dispose();
Imports DevExpress.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
Imports System.Drawing
Imports System.Drawing.Imaging
Dim barCode As New BarCodeControl()
Dim symbology As New Code128Generator()
symbology.CharacterSet = Code128CharacterSet.CharsetAuto
barCode.Symbology = symbology
barCode.Text = "ITEM-12345"
barCode.Module = 0.02F ' document units, not pixels
barCode.ShowText = True
' File output requires DrawToBitmap — you must size the Bitmap manually
barCode.Width = 400
barCode.Height = 100
Dim bitmap As New Bitmap(barCode.Width, barCode.Height)
barCode.DrawToBitmap(bitmap, New Rectangle(0, 0, barCode.Width, barCode.Height))
bitmap.Save("barcode.png", ImageFormat.Png)
bitmap.Dispose()
Aquí se observan varios puntos de fricción. En primer lugar, barCode.Module está en unidades de documento y no en píxeles, lo que crea un desajuste si se piensa en dimensiones de píxel. En segundo lugar, debe conocer el tamaño final del píxel antes de asignar el Bitmap. En tercer lugar, el control requiere que se carguen los ensamblados de WinForms, lo que significa que una API mínima de ASP.NET Core o un servicio de consola en segundo plano deben cargar la infraestructura de Windows Forms solo para generar una imagen de código de barras.
La etiqueta Blazor DxBarCode es conceptualmente similar, pero es un componente de Razor para la representación de la interfaz de usuario, no una API de generación del lado del servidor.
Sin capacidad de lectura
La postura oficial de DevExpress es que no ofrecen funciones de reconocimiento o escaneo de códigos de barras. No se trata de una laguna que deba llenarse en un próximo lanzamiento; ha sido la respuesta constante durante años.
Para los equipos que comienzan con una aplicación DevExpress WinForms y posteriormente necesitan escanear un código de barras de una imagen cargada o leer un código QR de un archivo PDF adjunto, la caja de herramientas de DevExpress no les será de utilidad. Deberán incorporar una biblioteca independiente para gestionar la lectura, lo que plantea de inmediato la cuestión de si la generación de la aplicación también debería migrar a esa biblioteca para mantener la coherencia de la API.
IronBarcode maneja ambas direcciones:
// IronBarcode reading — works on images, PDFs, and byte arrays
// NuGet: dotnet add package IronBarcode
using IronBarCode;
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
// IronBarcode reading — works on images, PDFs, and byte arrays
// NuGet: dotnet add package IronBarcode
using IronBarCode;
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode
' IronBarcode reading — works on images, PDFs, and byte arrays
' NuGet: dotnet add package IronBarcode
Dim results = BarcodeReader.Read("scanned-label.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
Next
Para leer un archivo PDF no se necesitan bibliotecas adicionales:
// Reading barcodes from a PDF — no PdfiumViewer or similar required
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page barcode: {result.Value}");
}
// Reading barcodes from a PDF — no PdfiumViewer or similar required
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page barcode: {result.Value}");
}
Imports System
' Reading barcodes from a PDF — no PdfiumViewer or similar required
Dim pdfResults = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In pdfResults
Console.WriteLine($"Page barcode: {result.Value}")
Next
El problema de la agrupación de Suite
Los componentes de código de barras de DevExpress no se venden como producto independiente. Para utilizar BarCodeControl en cualquier proyecto, su equipo necesita una licencia de la suite DXperience a un precio aproximado de 2.499 dólares al año por desarrollador. El Suite incluye la cuadrícula, el gráfico, el programador, la tabla dinámica y muchos otros controles, lo cual es razonable si está creando una aplicación completa de DevExpress WinForms o Blazor . Si solo necesita la generación de códigos de barras para un servicio de backend, estará pagando por un conjunto completo de herramientas de interfaz de usuario que el servicio nunca utilizará.
IronBarcode es un paquete independiente:
dotnet add package IronBarcode
dotnet add package IronBarcode
La licencia Lite perpetua tiene un precio inicial de 749 dólares para un desarrollador. No incluye ningún kit de herramientas de interfaz de usuario. Obtendrás generación y lectura de códigos de barras, compatibilidad multiplataforma y nada más que no hayas solicitado.
Limitación de uso sin interfaz gráfica
El problema fundamental con BarCodeControl en escenarios del lado del servidor es que se trata de un control WinForms. En un proyecto de API mínima de ASP.NET Core .NET 6 o superior, los ensamblados de WinForms no se referencian de forma predeterminada. Para instanciar BarCodeControl, su proyecto de API debe dirigirse explícitamente a Windows y cargar el tiempo de ejecución de Windows Forms, o bien añadir referencias de solución que extraigan la infraestructura de interfaz de usuario que su API nunca renderizará.
En un plan de consumo de Azure Functions, no hay ninguna capa de interfaz de usuario. En un contenedor Docker que ejecuta una imagen base de Linux, las dependencias de Windows Forms GDI+ pueden estar completamente ausentes. DevExpress no admite oficialmente el uso de BarCodeControl en estos entornos headless.
IronBarcode utiliza una API estática y totalmente programática:
// IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
Imports IronBarCode
' IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
' NuGet: dotnet add package IronBarcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
Esta misma llamada funciona en una aplicación de consola, un controlador ASP.NET Core , una función de Azure activada por un mensaje de Service Bus o un contenedor Docker que se ejecuta en Linux. La API no cambia entre entornos. No existe ninguna dependencia de ensamblado de interfaz de usuario.
Un endpoint de ASP.NET Core que devuelve un código de barras como respuesta de un archivo PNG tiene este aspecto:
app.MapGet("/barcode/{sku}", (string sku) =>
{
var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return Results.File(bytes, "image/png");
});
app.MapGet("/barcode/{sku}", (string sku) =>
{
var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return Results.File(bytes, "image/png");
});
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http
app.MapGet("/barcode/{sku}", Function(sku As String)
Dim bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Return Results.File(bytes, "image/png")
End Function)
No existe un patrón equivalente con BarCodeControl sin soluciones significativas.
Entendiendo IronBarcode
IronBarcode es una biblioteca .NET independiente para generar y leer códigos de barras. La API es completamente estática: no hay instancias que gestionar, ni ciclo de vida de control, ni dependencia de la interfaz de usuario. La generación y la lectura funcionan en la misma llamada:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.SaveAsPng("order-label.png");
// Generate and get bytes (for HTTP responses, blob storage, etc.)
byte[] pngBytes = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.ToPngBinaryData();
// Read from an image file
var results = BarcodeReader.Read("order-label.png");
Console.WriteLine(results.First().Value); // ORDER-9921
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.SaveAsPng("order-label.png");
// Generate and get bytes (for HTTP responses, blob storage, etc.)
byte[] pngBytes = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.ToPngBinaryData();
// Read from an image file
var results = BarcodeReader.Read("order-label.png");
Console.WriteLine(results.First().Value); // ORDER-9921
Imports IronBarCode
' Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128) _
.ResizeTo(450, 120) _
.SaveAsPng("order-label.png")
' Generate and get bytes (for HTTP responses, blob storage, etc.)
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128) _
.ResizeTo(450, 120) _
.ToPngBinaryData()
' Read from an image file
Dim results = BarcodeReader.Read("order-label.png")
Console.WriteLine(results.First().Value) ' ORDER-9921
La activación de la licencia se realiza con una sola línea al iniciar el sistema:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
No hay llamada de red. Sin código repetitivo para el manejo de errores. Validación local.
Código QR lado a lado
Los códigos QR ilustran la brecha de API entre un control de interfaz de usuario y una biblioteca de programación.
Código QR de DevExpress — Control WinForms:
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
var barCode = new BarCodeControl();
var symbology = new QRCodeGenerator();
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
barCode.Symbology = symbology;
barCode.Text = "https://example.com";
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("qr.png", ImageFormat.Png);
bitmap.Dispose();
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
var barCode = new BarCodeControl();
var symbology = new QRCodeGenerator();
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
barCode.Symbology = symbology;
barCode.Text = "https://example.com";
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("qr.png", ImageFormat.Png);
bitmap.Dispose();
Imports DevExpress.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
Imports System.Drawing
Imports System.Drawing.Imaging
Dim barCode As New BarCodeControl()
Dim symbology As New QRCodeGenerator()
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric
barCode.Symbology = symbology
barCode.Text = "https://example.com"
barCode.Width = 500
barCode.Height = 500
Dim bitmap As New Bitmap(barCode.Width, barCode.Height)
barCode.DrawToBitmap(bitmap, New Rectangle(0, 0, barCode.Width, barCode.Height))
bitmap.Save("qr.png", ImageFormat.Png)
bitmap.Dispose()
Código QR de IronBarcode : mismo resultado, sin necesidad de ensamblar la interfaz de usuario.
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qr.png");
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qr.png");
Agregar el logotipo de la marca en el centro del código QR:
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("qr-branded.png");
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("qr-branded.png");
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("qr-branded.png")
DevExpress no tiene un equivalente para logotipos incrustados. El control genera un código QR estándar y nada más.
Comparación de características
| Característica | Código de barras DevExpress | IronBarcode |
|---|---|---|
| Generación de BarCodes | Sí (control WinForms, etiqueta Blazor ) | Sí (API programática, todos los entornos) |
| Lectura/escaneo de códigos de barras | No — confirmado oficialmente | Sí, imágenes, archivos PDF, matrices de bytes |
| Lectura de códigos de barras PDF | No | Sí, es nativo, no requiere biblioteca adicional. |
| Paquete NuGet independiente | No, se requiere la Suite DXperience. | Sí - IronBarcode únicamente |
| Costo de la Suite | ~$2,499+/año ( Suite completo de interfaz de usuario) | N/A — independiente |
| Costo de la licencia | Sólo por suscripción | Perpetuo desde $749 |
| API mínima de ASP.NET Core | Requiere soluciones alternativas para WinForms. | Soporte nativo |
| Funciones Azure | No se apoya sin cabeza | Soporte completo |
| Docker / Linux | Problemas de GDI+ en imágenes base de Linux | Soporte completo |
| Aplicaciones de consola | Requiere la carga del ensamblado de WinForms | Soporte nativo |
| Generación de código QR | Sí (mediante la simbología de QRCodeGenerator) | Sí (QRCodeWriter) |
| Código QR con logotipo integrado | No | Sí — .AddBrandLogo() |
| Niveles de corrección de errores QR | H, Q, M, L | Máximo, Alto, Medio, Bajo |
| Código 128 | Sí | Sí |
| Matriz de datos | Sí | Sí |
| PDF417 | Sí | Sí |
| azteca | Sí | Sí |
| Salida del archivo | DrawToBitmap: asignación manual de mapas de bits | .SaveAsPng(), .SaveAsGif(), .SaveAsSvg() |
| Salida binaria (respuesta HTTP) | Mapa de bits manual → MemoryStream | toPngBinaryData() |
| Lectura multihilo | N/A — sin lectura | MaxParallelThreads = 4 |
| Lectura de múltiples códigos de barras | N/A — sin lectura | ExpectMultipleBarcodes = true |
| Plataformas | Windows (WinForms / Blazor) | Windows, Linux, macOS, Docker, Azure, AWS Lambda |
| Compatibilidad con versiones de .NET | .NET Framework + .NET moderno (Windows) | .NET 4.6.2 a .NET 9 |
Referencia de mapeo de API
Los equipos familiarizados con el patrón DevExpress BarCodeControl encontrarán útiles estas equivalencias:
| Código de barras DevExpress | IronBarcode |
|---|---|
new BarCodeControl() |
Estático: no se necesita instancia |
new Code128Generator() + barCode.Symbology = symbology |
BarcodeEncoding.Code128 pasado como parámetro |
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.H |
QRCodeWriter.CreateQrCode("data", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) |
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26 |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new PDF417Generator() |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.PDF417) |
new AztecGenerator() |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Aztec) |
barCode.Module = 0.02f (unidades de documento) |
.ResizeTo(width, height) (píxeles) |
barCode.ShowText = true |
.AddBarcodeText() |
DrawToBitmap(bitmap, rect) - asignación manual de mapas de bits |
.SaveAsPng(path) - maneja el tamaño automáticamente |
Manual Bitmap → MemoryStream para respuesta HTTP |
.ToPngBinaryData() |
| No se puede leer la API | BarcodeReader.Read(imagePath) |
TextResult tipo |
.Value (cadena), .Format (código de barras) |
| Se requiere el ensamblaje de la interfaz de usuario en cada proyecto. | Funciona en cualquier tipo de proyecto .NET. |
| Solo suite (aproximadamente 2499 dólares al año) | Versión independiente (desde $749 con licencia perpetua) |
Cuando los equipos cambian
Existen varios escenarios específicos que suelen desencadenar el cambio de los controles de código de barras de DevExpress a IronBarcode.
Se requiere la lectura de códigos de barras. El escenario más común es una aplicación WinForms que lleva años generando códigos de barras y recibe una nueva solicitud de funcionalidad: la aplicación ahora debe escanear o verificar códigos de barras a partir de imágenes cargadas o capturas de cámara. DevExpress no tiene API de lectura. El equipo necesita una nueva biblioteca de todos modos, y tiene sentido consolidar la generación en esa misma biblioteca.
Se necesita un punto final de API web. Un equipo desarrolla un microservicio que genera etiquetas de código de barras bajo demanda, a las que se accede desde una interfaz web, una aplicación móvil u otro servicio. El proyecto ASP.NET Core no tiene dependencia de WinForms y el equipo no desea añadirla. La API estática de IronBarcode se integra en un punto final HTTP sin necesidad de código adicional de interfaz de usuario.
Implementación de Azure Functions o Lambda. Las implementaciones sin servidor suelen utilizar imágenes base de Linux y entornos de ejecución mínimos. BarCodeControl no está diseñado para este entorno. IronBarcode se ejecuta en Linux, en contenedores Docker, en Azure Functions y en AWS Lambda sin necesidad de realizar cambios en la configuración.
Coste de renovación de la suite por una única característica. Cuando llega la renovación y un equipo audita lo que realmente utiliza de la suite DXperience, descubrir que el único componente DevExpress en un servicio concreto es BarCodeControl crea una conversación sobre costes. Es difícil justificar el pago de una suscripción Suite para la generación de códigos de barras cuando una biblioteca independiente cuesta 749 dólares de forma perpetua.
Lectura de múltiples códigos de barras en archivos PDF. Los flujos de trabajo de procesamiento de documentos (lectura de códigos de barras en archivos PDF de facturas, manifiestos de envío o formularios escaneados) requieren compatibilidad con PDF y capacidad de lectura. IronBarcode lee directamente los archivos PDF sin necesidad de ninguna biblioteca adicional. DevExpress no ofrece ninguna de estas capacidades.
Conclusión
La oferta de códigos de barras de DevExpress se entiende mejor como una función de renderizado de interfaz de usuario integrada en un kit de herramientas de interfaz de usuario. Si su aplicación es una aplicación WinForms o Blazor que ya utiliza DevExpress para sus controles de cuadrícula y gráfico, y su única necesidad de código de barras es mostrar un código de barras visualmente en un formulario, el BarCodeControl es una opción razonable - usted ya tiene la licencia.
En el momento en que necesite cualquiera de los siguientes elementos, BarCodeControl dejará de ser la herramienta adecuada: lectura de códigos de barras, generación de códigos de barras en un contexto del lado del servidor, ejecución en un entorno headless, trabajo en Linux u operación sin una referencia de ensamblado WinForms. El soporte de DevExpress ha confirmado que no dispone de funcionalidad de lectura y que no tiene previsto añadirla. La limitación del modo sin interfaz gráfica es un problema arquitectónico, no de configuración. Un control de interfaz de usuario es un control de interfaz de usuario.
IronBarcode está diseñado para el trabajo programático con códigos de barras: generación y lectura a través de una API estática, en cualquier entorno y en cualquier plataforma. Ambas herramientas resuelven problemas diferentes. El código de barras de DevExpress se utiliza para renderizar dentro de un formulario. IronBarcode sirve para procesar códigos de barras.
Preguntas Frecuentes
¿Qué es DevExpress BarCode?
DevExpress Barcode es una biblioteca de códigos de barras .NET para generar y leer códigos de barras en aplicaciones C#. Es una de las varias alternativas que los desarrolladores evalúan cuando seleccionan una solución de código de barras para proyectos .NET.
¿Cuáles son las principales diferencias entre DevExpress Barcode e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que DevExpress Barcode suele requerir la creación y configuración de instancias antes de su uso. IronBarcode también ofrece compatibilidad nativa con PDF, detección automática de formatos y licencia de clave única en todos los entornos.
¿Es IronBarcode más fácil de licenciar que DevExpress Barcode?
IronBarcode utiliza una única clave de licencia que cubre tanto el desarrollo como los despliegues de producción. Esto simplifica las canalizaciones de CI/CD y las configuraciones de Docker en comparación con los sistemas de licencias que separan las claves de SDK de las claves de tiempo de ejecución.
¿Es IronBarcode compatible con todos los formatos de código de barras que admite DevExpress Barcode?
IronBarcode es compatible con más de 30 simbologías de códigos de barras, incluidos QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 y muchos más. La autodetección de formatos significa que no se requiere una enumeración explícita de formatos.
¿Es IronBarcode compatible con la lectura nativa de códigos de barras en PDF?
Sí. IronBarcode lee códigos de barras directamente desde archivos PDF utilizando BarcodeReader.Read("document.pdf") sin necesidad de una biblioteca de renderizado de PDF independiente. Los resultados por página incluyen el número de página, el formato del código de barras, el valor y la puntuación de confianza.
¿Cómo gestiona IronBarcode el procesamiento por lotes en comparación con DevExpress Barcode?
Los métodos estáticos de IronBarcode no tienen estado y son naturalmente seguros para subprocesos, lo que permite el uso directo de Parallel.ForEach sin gestión de instancias por subproceso. No hay límite de rendimiento en ningún nivel de precios.
¿Qué versiones de .NET admite IronBarcode ?
IronBarcode es compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5, 6, 7, 8 y 9 en un único paquete NuGet. Las plataformas de destino incluyen Windows x64/x86, Linux x64 y macOS x64/ARM.
¿Cómo instalo IronBarcode en un proyecto .NET?
Instale IronBarcode a través de NuGet: ejecute 'Install-Package IronBarCode' en la consola del gestor de paquetes, o 'dotnet add package IronBarCode' en la CLI. No se necesitan instaladores SDK ni archivos de ejecución adicionales.
¿Puedo evaluar IronBarcode antes de comprarlo, a diferencia de DevExpress?
Sí. El modo de prueba de IronBarcode devuelve los valores completos de los códigos de barras descodificados; sólo las imágenes de salida generadas reciben una marca de agua. Puede comprobar la precisión de la lectura en sus propios documentos antes de comprometerse con la compra.
¿Cuál es la diferencia de precio entre DevExpress Barcode e IronBarcode?
IronBarcode cuesta a partir de 749 dólares por una licencia perpetua de desarrollador único que cubre el desarrollo y la producción. Los detalles de precios y opciones de volumen están disponibles en la página de licencias de IronBarcode. No se requiere una licencia de ejecución por separado.
¿Es fácil migrar de DevExpress Barcode a IronBarcode?
La migración de DevExpress Barcode a IronBarcode implica principalmente la sustitución de las llamadas a la API basadas en instancias por los métodos estáticos de IronBarcode, la eliminación de la repetición de licencias y la actualización de los nombres de las propiedades de los resultados. La mayoría de las migraciones implican reducir código en lugar de añadirlo.
¿IronBarcode genera códigos QR con logotipos?
Sí. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incrusta una imagen de marca en un código QR de forma nativa con corrección de errores configurable. Los códigos QR coloreados también son compatibles con ChangeBarCodeColor().

