Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

QRCoder.NET vs IronBarcode: Comparación de bibliotecas de códigos de barras en C#

QRCoder hace una cosa excepcionalmente bien: genera códigos QR en C# puro, sin dependencias externas, con una licencia MIT sin restricciones y una API bien pensada que gestiona todo, desde el formato de carga útil estándar hasta una variedad de renderizadores de salida. Con más de 8 millones de descargas de NuGet , su reputación está más que merecida. La comparación con IronBarcode no es una valoración de la calidad, sino una cuestión de alcance. IronBarcode admite más de 50 formatos de códigos de barras, lee y escribe, y se integra con documentos PDF a través de una única API consistente. Para los equipos cuyos requisitos van más allá de la generación de códigos QR, es fundamental comprender dónde se detiene intencionadamente el diseño de QRCoder.

Entendiendo el código QR

QRCoder fue creado por Raffael Herrmann en 2013 y actualmente lo mantiene Shane32. La biblioteca está escrita completamente en C# y no tiene dependencias externas: no hay conflictos de versión con SkiaSharp, ni problemas con la licencia comercial de ImageSharp, ni binarios nativos que implementar. Funciona en cualquier plataforma donde se ejecute .NET .

La licencia MIT es verdaderamente ilimitada. A diferencia de algunas bibliotecas populares donde un umbral de ingresos activa la necesidad de una licencia comercial, Codificador de códigos QR no tiene restricciones comerciales ocultas. Esa distinción es importante para los equipos que desarrollan aplicaciones comerciales.

La clase PayloadGenerator añade un importante valor práctico: maneja formatos de datos de código QR comunes -credenciales WiFi, tarjetas de contacto (vCard), eventos de calendario, mensajes SMS y puntos de geolocalización-, de modo que los desarrolladores no necesitan memorizar el formato de cable para cada estándar. La variedad de renderizadores también es amplia en múltiples tipos de salida.

Características arquitectónicas clave:

  • Cero dependencias externas: C# puro sin requisitos de tiempo de ejecución de terceros, lo que simplifica la implementación en entornos de contenedores o restringidos.
  • Licencia MIT sin restricciones de ingresos: Totalmente gratuita para uso comercial sin umbrales de ingresos ni requisitos comerciales.
  • Asistentes de PayloadGenerator: Formateadores integrados para WiFi, vCard, CalendarEvent, SMS, Geo y otros estándares comunes de carga útil QR.
  • Variedad de renderizado: bytes PNG, cadena SVG, arte ASCII, Base64, BMP y varios formatos de salida adicionales.
  • Control de corrección de errores completo: Los cuatro niveles de ECC (L, M, Q, H) están expuestos.
  • Compatibilidad con Micro QR: Variante QR compacta para etiquetas con espacio limitado, no disponible en todas las bibliotecas de códigos de barras.
  • Diseño exclusivo para códigos QR: La interfaz API se centra exclusivamente en la generación de códigos QR; no admite formatos 1D, Matriz de datos ni lectura de códigos de barras.

El diseño solo con código QR

QRCoder separa el paso de creación de datos del paso de renderización. Un QRCodeGenerator produce un QRCodeData objeto intermedio, que luego se pasa a una clase renderizadora. Este patrón ofrece un control preciso sobre el formato de salida a costa de añadir objetos adicionales:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);

// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

' PNG bytes via PngByteQRCode
Dim pngQR As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = pngQR.GetGraphic(20) ' 20px per module
File.WriteAllBytes("qr.png", pngBytes)

' SVG string via SvgQRCode
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("qr.svg", svgContent)
$vbLabelText   $csharpLabel

El método QRCodeGenerator.CreateQrCode es el único punto de entrada para la creación de código - no hay CreateCode128, ni CreateDataMatrix, ni CreateEAN13. La biblioteca se ajusta completamente a su propósito original.

Entendiendo IronBarcode

IronBarcode es una biblioteca comercial de códigos de barras .NET de Iron Software que abarca la generación y lectura de más de 50 formatos de códigos de barras a través de una API única y consistente. En lugar de mantener bibliotecas separadas para diferentes familias de formatos, IronBarcode expone todos los formatos a través de parámetros BarcodeEncoding en los mismos puntos de entrada estáticos BarcodeWriter y BarcodeReader.

La biblioteca utiliza un modelo de API estático: BarcodeWriter.CreateBarcode no requiere configuración de instancias, y BarcodeReader.Read acepta rutas de archivos, flujos, matrices de bytes y objetos System.Drawing.Bitmap con detección automática multiformato. Se incluye la compatibilidad con documentos PDF, tanto para leer códigos de barras de páginas PDF como para incrustar códigos de barras en archivos PDF, sin dependencias externas.

Características clave:

  • 50+ Formatos de Código de Barras: Código QR, Código 128, EAN-13, UPC-A, DataMatrix, PDF417, Aztec, MaxiCode, y muchos más a través de un único parámetro BarcodeEncoding
  • API de Lectura Integrada: BarcodeReader.Read maneja imágenes, PDFs, y streams con detección automática de formato - no requiere una segunda librería
  • Personalización del código QR: Incrustación de logotipos, cambios de color y control de zonas silenciosas mediante métodos QRCodeWriter
  • Integración con PDF: Lee códigos de barras de páginas PDF e inserta códigos de barras en documentos PDF existentes.
  • Modelo de API estática: No requiere instancia de generador - BarcodeWriter es una clase estática
  • Licencia comercial: Desde $749 para una licencia de desarrollador único sin restricciones por formato.

Comparación de características

La siguiente tabla resume las diferencias fundamentales entre Codificador de códigos QR e IronBarcode:

Característica Codificador de códigos QR IronBarcode
Generación de código QR Sí, excelente
Generación de códigos de barras 1D No Sí (más de 30 formatos)
Otros formatos 2D No Sí (DataMatrix, PDF417, Aztec, etc.)
Lectura de códigos de barras No Sí — detección automática
Soporte para PDF No Sí, lea y selle.
Licencia MIT: verdaderamente gratis Comercial (749 dólares por desarrollador)

Comparación detallada de características

Característica Codificador de códigos QR IronBarcode
Generación
Código QR
Micro QR No
Código 128 No
EAN-13 / UPC-A No
Matriz de datos No
PDF417 No
azteca No
Formatos totales 1 Más de 50
Características del código QR
Corrección de errores (L/M/Q/H)
Inserción de logotipo
Personalización de colores
Salida SVG
Salida de arte ASCII No
Salida Base64 No
Ayudantes del generador de carga útil No — construcción manual de cuerdas
Lectura
Decodificar a partir de la imagen No
Decodificar desde PDF No
Detección de formato automático No
Integración
Sellado de códigos de barras PDF No
Cero dependencias externas Autocontenido
Licencias
Tipo de licencia MIT Comercial
Restricciones de ingresos Ninguno Ninguno
Precios por formato Ninguno Ninguno

Generación de código QR

Ambas bibliotecas generan códigos QR, pero sus API reflejan filosofías de diseño diferentes en cuanto a la relación entre el paso de generación y el paso de renderizado.

Enfoque de código QR

QRCoder utiliza un patrón de dos fases: QRCodeGenerator.CreateQrCode produce un QRCodeData objeto intermedio que codifica los datos y el nivel de corrección de errores, y una clase de renderizador separada convierte ese objeto intermedio en el formato de salida deseado. El nivel ECC es un parámetro obligatorio sin valor predeterminado; los desarrolladores deben elegirlo explícitamente:

using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
using QRCoder;
using System.IO;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.M
);

var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
Imports QRCoder
Imports System.IO

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)

Dim qrCode As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = qrCode.GetGraphic(20) ' pixels per module
File.WriteAllBytes("qr.png", pngBytes)
$vbLabelText   $csharpLabel

Este patrón tiene la ventaja de reutilizar el objeto qrCodeData para múltiples formatos de salida sin regenerar los datos del código. Las clases de renderizadores incluyen PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, y BitmapByteQRCode, entre otros.

Enfoque IronBarcode

IronBarcode concentra la generación y la representación en una cadena fluida sobre la clase estática BarcodeWriter. El parámetro BarcodeEncoding.QRCode selecciona el formato, y los métodos de terminal como SaveAsPng o ToPngBinaryData determinan la salida:

using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
using IronBarCode;

// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
    .ResizeTo(400, 400)
    .SaveAsPng("qr.png");
Imports IronBarCode

' Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
    .ResizeTo(400, 400) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

Para los casos que requieran un control explícito de la corrección de errores, la clase QRCodeWriter proporciona opciones específicas de formato:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
using IronBarCode;

var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
Imports IronBarCode

Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium)
qr.SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

La Guía de creación de códigos de barras IronBarcode 2D cubre todos los formatos 2D soportados, incluyendo QR Code, DataMatrix, PDF417y azteca a través del mismo BarcodeWriter punto de entrada.

Personalización de códigos QR

Ambas bibliotecas admiten la incrustación de logotipos y cambios de color en códigos QR, pero el enfoque difiere en cuanto a los tipos de sistema que se requieren.

Enfoque de código QR

La incrustación del logotipo de Codificador de códigos QR se realiza a través de la clase QRCode renderer (distinta de PngByteQRCode), que expone una sobrecarga GetGraphic que acepta un System.Drawing.Bitmap. Esto significa que el código de llamada debe trabajar con System.Drawing directamente para cargar el archivo del logotipo:

using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
using QRCoder;
using System.Drawing;

var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
    "https://example.com",
    QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);

var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
Imports QRCoder
Imports System.Drawing

Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H) ' High ECC required when logo occludes part of the code

Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png)
$vbLabelText   $csharpLabel

La personalización del color sigue un patrón similar a través de los parámetros GetGraphic de la sobrecarga darkColor y lightColor.

Enfoque IronBarcode

IronBarcode expone la incrustación de logotipos y los cambios de color como métodos con nombre en el objeto resultante QRCodeWriter. El método AddBrandLogo acepta una ruta de archivo, y ChangeBarCodeColor acepta un valor Color:

using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
using IronBarCode;
using System.Drawing;

// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");

// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
Imports IronBarCode
Imports System.Drawing

' Logo embedding
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-logo.png")

' Colour customisation
Dim coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500)
coloredQr.ChangeBarCodeColor(Color.DarkBlue)
coloredQr.SaveAsPng("colored-qr.png")
$vbLabelText   $csharpLabel

La guía de personalización del código QR abarca en detalle el tamaño del logotipo, las combinaciones de colores y el control de la zona silenciosa.

Lectura de códigos de barras

La lectura de códigos de barras representa la diferencia de capacidad más marcada entre las dos bibliotecas.

Enfoque de código QR

QRCoder no tiene una API para leer códigos de barras. La clase QRCodeGenerator y todas las clases de renderizadores son sólo de generación. No existe ningún método para decodificar un código QR a partir de una imagen, un archivo o una transmisión de datos. Las aplicaciones que necesitan generar y leer códigos QR deben agregar una biblioteca separada, normalmente ZXing .NET , con su propia API, su propio espacio de nombres y su propio ciclo de mantenimiento:

// Codificador de códigos QR has no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
// Codificador de códigos QR has no reading API.
// These methods do not exist:
//   qrGenerator.Decode("image.png");
//   QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
' Codificador de códigos QR has no reading API.
' These methods do not exist:
'   qrGenerator.Decode("image.png")
'   QRCodeReader.Read("image.png")
'
' A separate library (e.g., ZXing.Net) is required for decoding.
$vbLabelText   $csharpLabel

Se trata de una decisión de diseño, no de un descuido: Codificador de códigos QR es explícitamente una biblioteca de generación de códigos QR.

Enfoque IronBarcode

IronBarcode incluye una API de lectura en el mismo paquete. BarcodeReader.Read acepta archivos de imagen, archivos PDF, secuencias y objetos System.Drawing.Bitmap. Detecta automáticamente los formatos de código de barras sin necesidad de que el usuario especifique qué formato buscar, y devuelve todos los códigos de barras encontrados en la imagen:

using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Text);        // decoded value
    Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
using IronBarCode;

// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
    Console.WriteLine(result.Text);        // decoded value
    Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
Imports IronBarCode

' Reading a QR code — no separate library required
Dim results = BarcodeReader.Read("qr.png")
For Each result In results
    Console.WriteLine(result.Text)        ' decoded value
    Console.WriteLine(result.BarcodeType) ' QRCode, Code128, EAN13, etc.
Next
$vbLabelText   $csharpLabel

La guía para la lectura de códigos de barras a partir de imágenes abarca la lectura de archivos PDF, documentos de varias páginas, flujos de datos e imágenes de baja resolución o con ruido a través del mismo punto de entrada.

Alcance del formato más allá de QR

Enfoque de código QR

QRCoder genera exclusivamente códigos QR; esto es intencional. El método QRCodeGenerator.CreateQrCode es el único punto de entrada de generación que proporciona la biblioteca. Los proyectos que comienzan con códigos QR y posteriormente requieren etiquetas de envío Code 128, códigos de producto EAN-13 o códigos de cumplimiento farmacéutico Matriz de datos deben introducir una segunda biblioteca para cubrir cada formato adicional:

using QRCoder;

// Codificador de códigos QR is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Código 128 requires a different library (e.g., NetBarcode)
// Matriz de datos requires yet another library
// Reading any format requires yet another library
using QRCoder;

// Codificador de códigos QR is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);

// Código 128 requires a different library (e.g., NetBarcode)
// Matriz de datos requires yet another library
// Reading any format requires yet another library
Imports QRCoder

' Codificador de códigos QR is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)

' Código 128 requires a different library (e.g., NetBarcode)
' Matriz de datos requires yet another library
' Reading any format requires yet another library
$vbLabelText   $csharpLabel

Enfoque IronBarcode

IronBarcode cubre todas las familias de formatos a través del mismo punto de entrada BarcodeWriter.CreateBarcode. El cambio de código QR a Código 128 a Matriz de datos sólo requiere cambiar el parámetro BarcodeEncoding - sin paquetes adicionales, sin nuevos espacios de nombres, sin APIs separadas:

using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
using IronBarCode;

// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
    .SaveAsPng("campaign-qr.png");

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
    .SaveAsPng("product-code.png");

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
    .SaveAsPng("pharma-code.png");
Imports IronBarCode

' All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode) _
    .SaveAsPng("campaign-qr.png")

BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")

BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
    .SaveAsPng("product-code.png")

BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("pharma-code.png")
$vbLabelText   $csharpLabel

Referencia de mapeo de API

Codificador de códigos QR IronBarcode
new QRCodeGenerator() Clase estática: no se necesita instancia.
qrGenerator.CreateQrCode(data, ECCLevel.M) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode)
new PngByteQRCode(qrCodeData) No es necesario: el renderizado forma parte de la cadena.
qrCode.GetGraphic(20) .ToPngBinaryData() con .ResizeTo(w, h)
new SvgQRCode(qrCodeData).GetGraphic(10) .SaveAsSvg(path)
new QRCode(qrCodeData).GetGraphic(...) QRCodeWriter.CreateQrCode(data, size, level)
QRCodeGenerator.ECCLevel.L QRCodeWriter.QrErrorCorrectionLevel.Low
QRCodeGenerator.ECCLevel.M QRCodeWriter.QrErrorCorrectionLevel.Medium
QRCodeGenerator.ECCLevel.Q QRCodeWriter.QrErrorCorrectionLevel.Quartile
QRCodeGenerator.ECCLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest
PayloadGenerator.WiFi(...).ToString() "WIFI:T:WPA;S:{ssid};P:{pass};;"
No se puede leer la API BarcodeReader.Read(path)
Solo en formato QR Más de 50 formatos vía BarcodeEncoding.*

Cuando los equipos consideran pasar de Codificador de códigos QR a IronBarcode

Para los equipos cuyos proyectos se basan exclusivamente en códigos QR y seguirán siéndolo, Codificador de códigos QR es una biblioteca bien mantenida que continúa cumpliendo su función a la perfección. Los siguientes escenarios describen las condiciones que llevan a los equipos a reevaluar esa postura.

Los requisitos de formato van más allá de los códigos QR.

La mayoría de los requisitos de códigos de barras comienzan con códigos QR, y Codificador de códigos QR gestiona ese alcance inicial de forma fiable. La tensión surge cuando un segundo formato entra en la conversación. Los equipos de logística que necesitan etiquetas Código 128 para el envío, las operaciones minoristas que requieren códigos de producto EAN-13, los flujos de trabajo farmacéuticos que exigen Matriz de datos para la serialización: cada nuevo formato empuja a un equipo a agregar otra dependencia de NuGet . El coste de integración de cada biblioteca adicional incluye un nuevo espacio de nombres que aprender, un nuevo ciclo de lanzamiento que supervisar y un nuevo punto de posible conflicto de versiones en las actualizaciones de .NET .

La lectura de códigos de barras se vuelve necesaria.

Una aplicación que genera códigos QR salientes para una campaña es un sistema de solo generación. Una aplicación que también procesa los envíos entrantes, verifica los códigos de producto a su llegada o valida las entradas en un evento es un sistema de generación y lectura. Codificador de códigos QR no tiene capacidad de lectura por diseño; esa carencia debe ser cubierta por una segunda biblioteca. La introducción de una biblioteca de lectura modifica considerablemente la estructura de integración del subsistema de códigos de barras, especialmente si la biblioteca de lectura impone requisitos de especificación de formato o restricciones de seguridad de subprocesos propias.

Carga de mantenimiento de múltiples bibliotecas

El patrón de acumulación natural para un proyecto basado en Codificador de códigos QR sigue un camino predecible: Codificador de códigos QR para la generación de códigos QR, una biblioteca de códigos de barras 1D para etiquetas de envío y una biblioteca de lectura para la decodificación. Cada biblioteca tiene su propia documentación, su propio ciclo de versiones y su propio historial de cambios incompatibles. Una actualización de versión de .NET que sea menor para una biblioteca puede coincidir con un cambio incompatible en otra. Los equipos que gestionan esta acumulación a lo largo de los años informan que el coste oculto no reside en la integración inicial, sino en los gastos generales de mantenimiento que se acumulan a lo largo de múltiples ciclos de actualización.

Compatibilidad con documentos PDF

Con Codificador de códigos QR no es posible generar códigos de barras para incrustarlos en informes PDF ni extraer códigos de barras de documentos PDF entrantes en un proceso de gestión documental. La compatibilidad con archivos PDF requiere una biblioteca PDF completa con capacidades de código de barras o una combinación específica de bibliotecas. Los equipos que crean flujos de trabajo centrados en documentos (procesamiento de facturas, informes de cumplimiento, generación de etiquetas a partir de plantillas PDF) descubren que el alcance de Codificador de códigos QR coincide con los requisitos de PDF al principio del ciclo de vida del proyecto.

Consideraciones comunes sobre la migración

Formato de cadena del generador de carga útil

Las clases de ayuda PayloadGenerator de Codificador de códigos QR producen cadenas que se ajustan a los estándares públicos de carga útil de códigos QR. El formato WiFi, por ejemplo, produce WIFI:T:WPA;S:NetworkName;P:Password;;. Estas cadenas se pueden construir directamente en IronBarcode sin necesidad de una clase auxiliar, ya que el formato es un estándar público documentado por la especificación del código QR. Los equipos con muchos PayloadGenerator usos deben planear escribir pequeños métodos estáticos de ayuda que repliquen la construcción de cadenas.

Mapeo de enumeración ECCLevel

QRCoder utiliza QRCodeGenerator.ECCLevel con los valores L, M, Q, H. IronBarcode utiliza QRCodeWriter.QrErrorCorrectionLevel con los valores Low, Medium, Quartile y Highest. La asignación es directa, pero las referencias a enumeraciones deben actualizarse en todos los puntos de llamada. Mientras que Codificador de códigos QR requería la selección explícita de ECC en cada llamada CreateQrCode, IronBarcode aplica un valor predeterminado razonable cuando se utiliza la ruta BarcodeWriter.CreateBarcode.

Eliminación de la clase de renderizado

Las clases de renderizado de Codificador de códigos QR - PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode - dejan de ser necesarias tras la migración. IronBarcode incorpora la renderización en la cadena fluida en GeneratedBarcode, por lo que el patrón de objeto renderizador intermedio no se traslada. El código que instancie estas clases de renderizadores puede sustituirse por llamadas a métodos terminales en el resultado BarcodeWriter.

Funcionalidades adicionales de IronBarcode

Las siguientes funcionalidades de IronBarcode no se trataron en las secciones comparativas anteriores:

Compatibilidad con .NET y preparación para el futuro

IronBarcode mantiene un desarrollo activo con actualizaciones periódicas dirigidas a las versiones actuales y futuras de .NET . La biblioteca es compatible con .NET 8 y .NET 9, y las actualizaciones de compatibilidad para .NET 10 (previstas para finales de 2026) forman parte del calendario de lanzamientos de Iron Software. Codificador de códigos QR también recibe mantenimiento activo y se ejecuta en todas las plataformas .NET actuales; Su diseño sin dependencias facilita la compatibilidad con versiones futuras. Ambas bibliotecas son adecuadas para proyectos .NET a largo plazo. Para los equipos que eligen IronBarcode, el modelo de soporte comercial proporciona acceso directo a asistencia técnica y resolución prioritaria de errores.

Conclusión

QRCoder e IronBarcode abordan el mismo requisito inicial —la generación de códigos QR— desde diferentes puntos de partida arquitectónicos. Codificador de códigos QR es una biblioteca diseñada específicamente para un único formato, cuyo diseño se limita intencionadamente al código QR. IronBarcode es una biblioteca multiformato que abarca la generación, lectura e integración con PDF en más de 50 formatos de códigos de barras. La comparación no es entre una buena biblioteca y una mejor; Se trata de una herramienta intermedia entre una herramienta especializada y una de uso general.

QRCoder es la opción adecuada para proyectos donde la generación de códigos QR es un requisito permanente y limitado. Su huella de dependencia cero, su licencia MIT sin restricciones y sus ayudantes PayloadGenerator lo convierten en una excelente selección para un flujo de trabajo de inscripción 2FA, un generador de QR para campañas de marketing o cualquier contexto en el que el ámbito del código de barras esté definitivamente fijado. La biblioteca está bien mantenida, es ampliamente utilizada y cumple su función de manera fiable. Los equipos con estas características no ganan nada cambiando.

IronBarcode se convierte en la opción más práctica cuando los requisitos de códigos de barras de un proyecto van más allá, o es probable que vayan a ir más allá, de la generación de códigos QR. Las aplicaciones que necesitan leer códigos de envíos entrantes o documentos escaneados, generar etiquetas Código 128 junto con campañas de códigos QR o producir códigos de barras incrustados en informes PDF se benefician de una única API coherente para todas esas tareas. La guía de alternativas de Codificador de códigos QR para C# proporciona contexto adicional sobre dónde las bibliotecas exclusivas para códigos QR alcanzan su límite en entornos de producción. Las licencias tienen un precio inicial de 749 dólares y se explican en su totalidad en la página de licencias de IronBarcode .

La valoración honesta es que la herramienta adecuada depende totalmente del alcance del proyecto. Para requisitos que solo admiten códigos QR, Codificador de códigos QR ofrece todo lo necesario sin costo alguno. Para requisitos que abarcan múltiples formatos, lectura o integración con PDF, IronBarcode elimina la necesidad de gestionar varias bibliotecas específicas a medida que el proyecto evoluciona.

Preguntas Frecuentes

¿Qué es QRCoder.NET?

QRCoder.NET 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 QRCoder.NET e IronBarcode?

IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que QRCoder.NET 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 QRCoder.NET?

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 QRCoder.NET?

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 QRCoder.NET?

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 QRCoder?

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 QRCoder.NET 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 QRCoder.NET a IronBarcode?

La migración de QRCoder.NET 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().

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Equipo de soporte de Iron

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