GrapeCity Barcode vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
El control de códigos de barras de ComponentOne genera códigos de barras dentro de una aplicación de Windows Forms. Lo hace muy bien: la API es limpia, la calidad de la salida es sólida y se integra de forma natural con el diseñador de WinForms. Pero el alcance de sus funciones es limitado. No puede leer códigos de barras. No puede ejecutarse fuera de un entorno Windows. Y no se trata de un producto independiente, sino que se distribuye como parte de ComponentOne Studio Enterprise, una suscripción de aproximadamente 1473 dólares por desarrollador al año que incluye más de 100 controles de interfaz de usuario para WinForms, WPF, Blazor y ASP.NET. Si está evaluando opciones de códigos de barras para un proyecto .NET y encontró ComponentOne en una lista comparativa, este artículo trata sobre lo que ese alcance significa en la práctica.
Comprender el código de barras C1
C1BarCode es un control visual de WinForms. El flujo de trabajo de generación crea una instancia, establece propiedades y llama a GetImage() para recuperar un System.Drawing.Image:
// ComponentOne C1BarCode
using C1.Win.C1BarCode;
using System.Drawing;
// License must be set before first use
C1.C1License.Key = "YOUR-COMPONENTONE-KEY";
var barcode = new C1BarCode();
barcode.CodeType = CodeType.Code128;
barcode.Text = "ITEM-12345";
barcode.BarHeight = 100;
barcode.ModuleSize = 2;
barcode.ShowText = true;
barcode.CaptionPosition = CaptionPosition.Below;
using var image = barcode.GetImage();
image.Save("barcode.png", System.Drawing.Imaging.ImageFormat.Png);
// ComponentOne C1BarCode
using C1.Win.C1BarCode;
using System.Drawing;
// License must be set before first use
C1.C1License.Key = "YOUR-COMPONENTONE-KEY";
var barcode = new C1BarCode();
barcode.CodeType = CodeType.Code128;
barcode.Text = "ITEM-12345";
barcode.BarHeight = 100;
barcode.ModuleSize = 2;
barcode.ShowText = true;
barcode.CaptionPosition = CaptionPosition.Below;
using var image = barcode.GetImage();
image.Save("barcode.png", System.Drawing.Imaging.ImageFormat.Png);
Imports C1.Win.C1BarCode
Imports System.Drawing
Imports System.Drawing.Imaging
' License must be set before first use
C1.C1License.Key = "YOUR-COMPONENTONE-KEY"
Dim barcode As New C1BarCode()
barcode.CodeType = CodeType.Code128
barcode.Text = "ITEM-12345"
barcode.BarHeight = 100
barcode.ModuleSize = 2
barcode.ShowText = True
barcode.CaptionPosition = CaptionPosition.Below
Using image As Image = barcode.GetImage()
image.Save("barcode.png", ImageFormat.Png)
End Using
La API de configuración de propiedades resulta familiar para los desarrolladores de WinForms, ya que se corresponde directamente con la superficie del diseñador. CodeType, BarHeight, ModuleSize, ShowText, y CaptionPosition son propiedades visibles para el diseñador que funcionan de forma idéntica en el código.
C1BarCode admite los formatos 1D y 2D más comunes: Code 39, Code 128, EAN-8, EAN-13, UPC-A, UPC-E, ITF, QR Code y PDF417, entre otros. Para la generación de formularios WinForms, cubre los casos de uso más comunes.
No hay API de lectura
No se trata de una laguna que se pueda solucionar con una opción de configuración. No hay clase C1BarCodeReader. No hay ningún método Decode() en C1BarCode. El control de códigos de barras de ComponentOne está diseñado para generar únicamente códigos de barras.
Si su aplicación necesita escanear códigos de barras a partir de imágenes cargadas, verificar etiquetas impresas, procesar documentos con códigos incrustados o extraer datos de códigos QR en una API web, nada de eso es posible con C1BarCode. Necesitarías una biblioteca aparte para la lectura, lo que plantea la cuestión de por qué pagarías por un componente que solo genera códigos de barras dentro de una Suite Enterprise de más de 100 controles cuando las bibliotecas de códigos de barras independientes cubren ambas operaciones.
La ausencia de una API de lectura no es inusual en los controles de código de barras de WinForms diseñados para la impresión. Lo que lo convierte en un punto de decisión es cuando los requisitos se amplían, y los requisitos de los códigos de barras casi siempre se amplían.
Restricción exclusiva para Windows
C1BarCode requiere una configuración de marco de destino específica para Windows:
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
El net8.0-windows nombre del marco de trabajo de destino y el UseWindowsForms no son preferencias opcionales. C1.Win.C1BarCode depende de los tipos System.Windows.Forms - UserControl, PaintEventArgs, Graphics - que sólo existen en Windows. La eliminación de net8.0-windows interrumpe la compilación.
Por el contrario, IronBarcode se dirige a net8.0 (o a cualquier TFM compatible) sin restricciones de plataforma:
<TargetFramework>net8.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
Esto es importante en varios escenarios prácticos:
- Azure App Service en Linux: Plan predeterminado para nuevas implementaciones de App Service.
net8.0-windowsno puede dirigirse a él. - Contenedores Docker: Los contenedores Linux son el estándar. Un contenedor de Windows es más grande, cuesta más y no está disponible en muchos niveles de la nube.
- API web de ASP.NET Core : Un punto final de generación de códigos de barras que solo se puede implementar en Windows es una limitación de implementación que el equipo eventualmente tendrá que eliminar.
- Azure Functions: El plan de consumo se ejecuta en Linux. Una función generadora de código de barras con un objetivo
net8.0-windowsno puede desplegarse en el plan de consumo. - desarrollo en macOS: Los desarrolladores en macOS no pueden ejecutar un proyecto
net8.0-windowslocalmente, ni siquiera para probar la lógica de generación.
La limitación de la plataforma no supone un problema si su aplicación es una herramienta de escritorio WinForms que solo se ejecutará en Windows. El problema surge en el momento en que los requisitos de implementación incluyen cualquier entorno Linux o en la nube.
Paquetes de Suite
C1BarCode no está disponible como paquete NuGet independiente. Forma parte de ComponentOne Studio Enterprise, que incluye el Suite completo de controles de ComponentOne para WinForms, WPF, Blazor y ASP.NET. El precio de ComponentOne Studio Enterprise es de aproximadamente 1.473 dólares por desarrollador al año (suscripción).
Este Suite incluye más de 100 componentes: cuadrículas, gráficos, programadores, controles de entrada, diseñadores de informes, controles de mapas, indicadores y mucho más. Si está desarrollando una aplicación WinForms con gran cantidad de datos y necesita muchos de esos controles, el precio del Suite podría ser una buena opción. Si necesita generar códigos de barras y llegó a ComponentOne porque apareció en una búsqueda, está comprando una gran Suite de interfaz de usuario Enterprise principalmente para un solo control.
No existe un paquete C1BarCode independiente. dotnet add package C1.Win.C1BarCode no existe - el paquete es C1.Win.C1BarCode como parte de la licencia GrapeCity.Documents o del instalador de ComponentOne Studio. Para los desarrolladores que deseen la funcionalidad de códigos de barras sin el Suite completo, no existe la opción de compra parcial.
La estructura de precios de IronBarcode es diferente: se trata de una biblioteca de códigos de barras independiente con licencia perpetua a partir de 749 dólares para un único desarrollador. No hay control de cuadrícula, ni biblioteca de gráficos, ni diseñador de informes; solo la funcionalidad de código de barras que usted busca.
Personalización de códigos QR
Ambas bibliotecas admiten la generación de códigos QR con opciones de personalización. El estilo de la API difiere significativamente.
Enfoque de configuración de propiedades de ComponentOne:
// ComponentOne — QR code with error correction and color
using C1.Win.C1BarCode;
using System.Drawing;
C1.C1License.Key = "YOUR-COMPONENTONE-KEY";
var barcode = new C1BarCode();
barcode.CodeType = CodeType.QRCode;
barcode.Text = "https://example.com/product/4821";
barcode.QRCodeVersion = QRCodeVersion.Version5;
barcode.QRCodeErrorCorrectionLevel = QRCodeErrorCorrectionLevel.High;
barcode.QRCodeModel = QRCodeModel.Model2;
barcode.ForeColor = Color.DarkBlue;
barcode.BackColor = Color.White;
barcode.ModuleSize = 4;
using var image = barcode.GetImage();
image.Save("product-qr.png", System.Drawing.Imaging.ImageFormat.Png);
// ComponentOne — QR code with error correction and color
using C1.Win.C1BarCode;
using System.Drawing;
C1.C1License.Key = "YOUR-COMPONENTONE-KEY";
var barcode = new C1BarCode();
barcode.CodeType = CodeType.QRCode;
barcode.Text = "https://example.com/product/4821";
barcode.QRCodeVersion = QRCodeVersion.Version5;
barcode.QRCodeErrorCorrectionLevel = QRCodeErrorCorrectionLevel.High;
barcode.QRCodeModel = QRCodeModel.Model2;
barcode.ForeColor = Color.DarkBlue;
barcode.BackColor = Color.White;
barcode.ModuleSize = 4;
using var image = barcode.GetImage();
image.Save("product-qr.png", System.Drawing.Imaging.ImageFormat.Png);
Imports C1.Win.C1BarCode
Imports System.Drawing
Imports System.Drawing.Imaging
C1.C1License.Key = "YOUR-COMPONENTONE-KEY"
Dim barcode As New C1BarCode()
barcode.CodeType = CodeType.QRCode
barcode.Text = "https://example.com/product/4821"
barcode.QRCodeVersion = QRCodeVersion.Version5
barcode.QRCodeErrorCorrectionLevel = QRCodeErrorCorrectionLevel.High
barcode.QRCodeModel = QRCodeModel.Model2
barcode.ForeColor = Color.DarkBlue
barcode.BackColor = Color.White
barcode.ModuleSize = 4
Using image As Image = barcode.GetImage()
image.Save("product-qr.png", ImageFormat.Png)
End Using
Cadena fluida de IronBarcode :
// IronBarcode — QR code with error correction and color
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using System.Drawing;
QRCodeWriter.CreateQrCode(
"https://example.com/product/4821",
300,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("product-qr.png");
// IronBarcode — QR code with error correction and color
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using System.Drawing;
QRCodeWriter.CreateQrCode(
"https://example.com/product/4821",
300,
QRCodeWriter.QrErrorCorrectionLevel.Highest)
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("product-qr.png");
Imports IronBarCode
Imports System.Drawing
QRCodeWriter.CreateQrCode(
"https://example.com/product/4821",
300,
QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.ChangeBarCodeColor(Color.DarkBlue) _
.SaveAsPng("product-qr.png")
El enfoque de ComponentOne requiere instanciar un objeto C1BarCode y establecer múltiples propiedades antes de llamar a GetImage(). El QRCodeWriter de IronBarcode utiliza una cadena fluida: cada operación devuelve el objeto de código de barras y al final se llama al .SaveAsPng(). No hay ninguna instancia que gestionar.
IronBarcode también admite la incrustación de logotipos en códigos QR, algo que C1BarCode no permite:
// QR code with embedded brand logo
QRCodeWriter.CreateQrCode("https://example.com/track/8821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("branded-qr.png");
// QR code with embedded brand logo
QRCodeWriter.CreateQrCode("https://example.com/track/8821", 500)
.AddBrandLogo("company-logo.png")
.ChangeBarCodeColor(Color.DarkBlue)
.SaveAsPng("branded-qr.png");
' QR code with embedded brand logo
QRCodeWriter.CreateQrCode("https://example.com/track/8821", 500) _
.AddBrandLogo("company-logo.png") _
.ChangeBarCodeColor(Color.DarkBlue) _
.SaveAsPng("branded-qr.png")
Entendiendo IronBarcode
IronBarcode es una biblioteca independiente para .NET que abarca la generación y la lectura de códigos de barras. Se instala desde NuGet (dotnet add package IronBarcode), se dirige a cualquier TFM .NET compatible sin restricciones de plataforma y se ejecuta en Windows, Linux, macOS, Docker, Azure y AWS Lambda.
La sección de lectura admite documentos PDF de forma nativa:
// Read barcodes from a PDF — no image extraction needed
using IronBarCode;
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
// Read barcodes from a PDF — no image extraction needed
using IronBarCode;
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode
' Read barcodes from a PDF — no image extraction needed
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
Para escenarios de alto rendimiento, BarcodeReaderOptions controla el equilibrio entre velocidad y precisión y la detección de múltiples códigos de barras:
// Multi-barcode read with performance options
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("warehouse-manifest.jpg", options);
// Multi-barcode read with performance options
using IronBarCode;
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("warehouse-manifest.jpg", options);
Imports IronBarCode
' Multi-barcode read with performance options
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.ExpectedBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode
}
Dim results = BarcodeReader.Read("warehouse-manifest.jpg", options)
La generación abarca los formatos estándar con una API estática consistente:
// Code 128 generation to file
BarcodeWriter.CreateBarcode("SHIP-20240312-7834", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// Generación de código QR to byte array (for HTTP response)
byte[] qrBytes = QRCodeWriter.CreateQrCode("https://example.com/order/7734", 400)
.ToPngBinaryData();
// Code 128 generation to file
BarcodeWriter.CreateBarcode("SHIP-20240312-7834", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// Generación de código QR to byte array (for HTTP response)
byte[] qrBytes = QRCodeWriter.CreateQrCode("https://example.com/order/7734", 400)
.ToPngBinaryData();
' Code 128 generation to file
BarcodeWriter.CreateBarcode("SHIP-20240312-7834", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
' Generación de código QR to byte array (for HTTP response)
Dim qrBytes As Byte() = QRCodeWriter.CreateQrCode("https://example.com/order/7734", 400) _
.ToPngBinaryData()
Plataformas compatibles: Windows, Linux, macOS, Docker, Azure (App Service y Functions), AWS Lambda. Versiones de .NET compatibles: .NET 4.6.2 a .NET 9.
Comparación de características
| Característica | Código de barras C1 de GrapeCity | IronBarcode |
|---|---|---|
| Generación de códigos de barras | Sí | Sí |
| Lectura de códigos de barras | No | Sí |
| Generación de código QR | Sí | Sí |
| Inserción de logotipo QR | No | Sí |
| Entrada de PDF para lectura | N/A (sin lectura) | Sí (nativo) |
| Plataforma .NET de destino | net8.0-windows sólo |
Cualquier TFM (net8.0, etc.) |
| Se requiere usar WindowsForms | Sí | No |
| Implementación en Linux/Docker | No | Sí |
| Implementación de macOS | No | Sí |
| Azure Functions (Linux) | No | Sí |
| ASP.NET Core del lado del servidor | Limitado (solo para Windows) | Sí |
| Paquete NuGet independiente | No (sólo suite) | Sí |
| Precios independientes | N/A | Desde $749 perpetuo |
| Precios de Suite | ~$1.473/desarrollador/año (suscripción) | N/A |
| API de generación fluida | No (establecedor de propiedades) | Sí |
BarcodeReader.Read() |
No | Sí |
BarcodeWriter.CreateBarcode() |
No | Sí |
QRCodeWriter.CreateQrCode() |
No | Sí |
| Versiones de .NET compatibles | .NET 6+ (Windows) | .NET 4.6.2 a .NET 9 |
| Opción de licencia perpetua | No (suscripción) | Sí |
Referencia de mapeo de API
Para los equipos que migran de C1BarCode a IronBarcode, se aplican las siguientes equivalencias directas:
| ComponentOne C1BarCode | IronBarcode |
|---|---|
C1.C1License.Key = "..." |
IronBarCode.License.LicenseKey = "key" |
new C1BarCode() |
Estático: no se necesita instancia |
barcode.CodeType = CodeType.Code128 |
BarcodeEncoding.Code128 (pasado como parámetro) |
barcode.Text = "data" |
Primer argumento de BarcodeWriter.CreateBarcode() |
barcode.BarHeight = 100 |
.ResizeTo(width, 100) sobre el escritor de códigos de barras |
barcode.ModuleSize = 2 |
.ResizeTo() controla el tamaño en píxeles |
barcode.ForeColor = Color.DarkBlue |
.ChangeBarCodeColor(Color.DarkBlue) |
barcode.BackColor = Color.White |
.ChangeBackgroundColor(Color.White) |
barcode.GetImage() |
.SaveAsPng() / .ToPngBinaryData() |
barcode.QRCodeErrorCorrectionLevel |
QRCodeWriter.QrErrorCorrectionLevel enum |
barcode.QRCodeVersion |
Automático (o parámetro de versión) |
| No se puede leer la API | BarcodeReader.Read(path) |
net8.0-windows necesario |
net8.0 (o cualquier TFM) |
UseWindowsForms = true se requiere |
No es necesario |
Cuando los equipos cambian
Surge la necesidad de leer. Este es el desencadenante más común. Un equipo desarrolla un generador de etiquetas de código de barras con C1BarCode y, posteriormente, recibe el requisito de verificar escaneos, procesar documentos de envío entrantes o decodificar códigos QR a partir de imágenes cargadas. C1BarCode no puede ayudar. Las opciones son: añadir una segunda biblioteca de códigos de barras para la lectura, o reemplazar C1BarCode por una biblioteca que admita ambas funciones.
Implementación en Linux o Docker. Una aplicación de escritorio WinForms que se distribuye a equipos con Windows no se enfrenta a esta limitación. Una API de ASP.NET Core que genera imágenes de códigos de barras sí lo requiere, especialmente si necesita ejecutarse en un contenedor Linux o implementarse en Azure App Service en Linux. El marco de trabajo de destino net8.0-windows bloquea inmediatamente estas opciones de implementación.
Arquitectura de microservicios o sin servidor. Azure Functions, AWS Lambda y los microservicios en contenedores se basan en Linux. Un servicio de generación de códigos de barras que no se puede implementar en Linux no es un microservicio viable.
Costo de la suscripción a la Suite frente al alcance de los requisitos. Los equipos que pagan por ComponentOne Studio Enterprise y que ya utilizan sus cuadrículas, gráficos y otros controles ya han justificado la suscripción. Los equipos que se suscribieron principalmente o en su totalidad para la generación de códigos de barras están pagando por más de 100 controles que no utilizan. El coste de la suscripción por desarrollador aumenta con el tamaño del equipo.
Preferencia por licencia perpetua. ComponentOne Studio solo funciona por suscripción. No existe la opción de licencia perpetua. Para los equipos que prefieren ser propietarios del software que distribuyen, especialmente por motivos de cumplimiento normativo o mantenimiento a largo plazo, la licencia perpetua de IronBarcode, a partir de 749 dólares, presenta una estructura diferente.
Conclusión
C1BarCode genera códigos de barras de forma limpia en un entorno WinForms. Eso es precisamente lo que hace bien, y para una aplicación de escritorio WinForms que solo necesita generar etiquetas en Windows, es una opción funcional dentro del Suite ComponentOne.
El alcance termina ahí. Sin necesidad de lectura, implementación solo para Windows, sin paquete independiente, licencia por suscripción. Cuando los requisitos de un proyecto van más allá de la generación de formularios WinForms en Windows (un requisito de lectura, un destino de implementación en Linux, una API web, un contenedor Docker, una función en la nube), C1BarCode no puede cubrirlos todos. IronBarcode abarca la generación y la lectura, se ejecuta en cualquier plataforma compatible con .NET y está disponible como paquete independiente sin necesidad de suscripción a una Suite Enterprise de 100 controles.
Preguntas Frecuentes
¿Qué es GrapeCity BarCode?
GrapeCity 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 GrapeCity Barcode e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que GrapeCity 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 GrapeCity 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.
¿Soporta IronBarcode todos los formatos de código de barras que soporta GrapeCity 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 GrapeCity 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 GrapeCity?
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 GrapeCity 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 GrapeCity Barcode a IronBarcode?
La migración de GrapeCity Barcode a IronBarcode consiste principalmente en sustituir las llamadas a la API basadas en instancias por los métodos estáticos de IronBarcode, eliminar la repetición de licencias y actualizar 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().

