Barcoder vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
Para generar un único archivo PNG con Barcoder, debes instalar dos paquetes, importar tres espacios de nombres, codificar con una clase específica para el formato, crear un renderizador con un objeto de opciones, abrir un flujo, renderizar en él y liberar el flujo. Ese es todo el camino hacia la felicidad, y solo abarca la escritura. El lector de códigos de barras no tiene ninguna API de lectura. La licencia MIT de la biblioteca y su naturaleza de código abierto la hacen atractiva a primera vista, especialmente para los equipos que intentan evitar dependencias comerciales. Sin embargo, la arquitectura fragmentada —un mínimo de dos paquetes NuGet , una clase de codificador diferente para cada formato de código de barras y una canalización de renderizado que mantiene la codificación y la salida completamente separadas— crea una fricción real en cuanto los requisitos superan el escenario más simple de generación de un solo formato.
Comprender el código de barras
Barcoder es una biblioteca de código abierto para la generación de códigos de barras en .NET , disponible en NuGet bajo la licencia MIT. Codifica datos en formatos de código de barras, incluidos Code128, QR, DataMatrix, EAN-13, PDF417y otros. La filosofía de diseño separa completamente la codificación de la renderización: la biblioteca principal produce un objeto IBarcode (una estructura de datos) y un paquete de renderización independiente convierte ese objeto en una imagen.
Las consecuencias prácticas de este diseño se aprecian desde la primera instalación. Se requieren dos paquetes NuGet antes de cualquier salida PNG es posible: Barcoder para la codificación y Barcoder.Renderer.Image para el renderizado. Si también se necesita una salida SVG, debe añadirse un tercer paquete - Barcoder.Renderer.Svg. Estos paquetes tienen versiones independientes, lo que significa que las actualizaciones de uno no se sincronizan automáticamente con las del otro, y mantenerlos sincronizados en todo un proyecto se convierte en una tarea de mantenimiento recurrente.
Características arquitectónicas clave de Barcoder:
- Dos paquetes NuGet necesarios para la salida PNG:
Barcoderpara la codificación yBarcoder.Renderer.Imagepara el renderizado a formatos de imagen - Clases codificadoras específicas de formato: Cada tipo de código de barras tiene su propio codificador en su propio espacio de nombres -
Code128Encoder,QrEncoder,DataMatrixEncoder, etc IBarcodeno tiene métodos de salida: El resultado de la codificación es un objeto de datos sin formato. Se debe construir un renderizador por separado, abrir un flujo, renderizarlo y cerrarlo.- El renderizador de imágenes dejó de ser compatible con .NET Framework: los equipos que usan .NET Frameworkno pueden usar el paquete del renderizador de imágenes.
- Sin capacidad de lectura: El lector de códigos de barras no puede decodificar códigos de barras de imágenes, archivos ni de ninguna otra fuente.
- Versión independiente de paquetes:
BarcoderyBarcoder.Renderer.Imagepueden separarse durante las actualizaciones de dependencias
Flujo de trabajo de generación de paquetes múltiples
El relato de la instalación ilustra de inmediato la diferencia de alcance. Con Barcoder, la salida PNG básica requiere dos paquetes separados:
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
El flujo de trabajo completo para generar un código de barras Code128 y guardarlo como PNG requiere tres importaciones de espacios de nombres, una llamada al codificador específica del formato, una construcción de renderizador con un objeto de opciones, un flujo de archivos y una llamada de renderizado:
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End Using
Cambiar el formato del código de barras no es un cambio de parámetro, sino que requiere importar un espacio de nombres diferente y llamar a una clase diferente. Code128Encoder.Encode toma un bool para includeChecksum, QrEncoder.Encode toma un nivel de corrección de errores y dos bools adicionales, y DataMatrixEncoder.Encode toma sólo la cadena. No existe una interfaz unificada para crear un código de barras en un formato específico.
Entendiendo IronBarcode
IronBarcode es una biblioteca comercial de códigos de barras .NET que abarca la generación y la lectura a través de un único paquete NuGet . Utiliza un modelo de API estático construido alrededor de dos clases principales - BarcodeWriter para la generación y BarcodeReader para la lectura - y dirige toda la selección de formato a través del enum BarcodeEncoding en lugar de a través de clases o espacios de nombres específicos de formato.
La biblioteca está diseñada para minimizar el tiempo que transcurre entre escribir la primera línea del código de barras y obtener un resultado funcional. La generación, la lectura, la compatibilidad con PDF, los códigos QR con logotipos integrados y todos los tipos de salida están incluidos en un solo paquete con una única versión para su seguimiento.
Características clave de IronBarcode:
- Un único paquete NuGet:
IronBarcodecubre todas las funcionalidades - generación, lectura, PDF, y todos los formatos de salida - Selección de formato unificada: Todos los tipos de códigos de barras se abordan a través de valores enum
BarcodeEncoding; sin importaciones ni clases específicas de formato - Métodos de salida en el objeto resultante:
GeneratedBarcodeexponeSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvg, yResizeTodirectamente - Capacidad de lectura nativa:
BarcodeReader.Read()descodifica a partir de archivos de imagen, matrices de bytes, secuencias y PDF sin una biblioteca secundaria - Compatibilidad con MAUI, Docker, AWS Lambda y Azure: Objetivos de implementación documentados que van más allá de los escenarios estándar de escritorio y servidor.
- Compatibilidad total con .NET Frameworky versiones modernas de .NET : desde .NET Framework4.6.2 hasta .NET 9.
Comparación de características
| Característica | Código de barras | IronBarcode |
|---|---|---|
| Se requieren paquetes NuGet | 2 mínimo | 1 |
| Generación de BarCodes | Sí | Sí |
| Lectura de BarCodes | No | Sí |
| Licencia | MIT (código abierto) | Comercial |
| Compatibilidad con .NET Framework | Renderizador de imágenes insertado | .NET Framework4.6.2 o superior |
| Lectura de PDF | No | Sí |
| Código QR con logotipo | No | Sí |
Comparación detallada de características
| Característica | Código de barras | IronBarcode |
|---|---|---|
| Generación | ||
| Generación de Code128 | Sí | Sí |
| Generación de código QR | Sí | Sí |
| Generación de DataMatrix | Sí | Sí |
| EAN-13, PDF417 | Sí | Sí |
| Código QR con logotipo integrado | No | Sí - .AddBrandLogo(path) |
| Formato seleccionado mediante enumeración | No, es una clase de codificador independiente para cada formato. | Sí - BarcodeEncoding enum |
| Producción | ||
| Salida PNG | Sí (a través de Barcoder.Renderer.Image) | Sí - .SaveAsPng() |
| Salida SVG | Sí (a través de Barcoder.Renderer.Svg) | Sí - .SaveAsSvg() |
| Salida de datos binarios | Sí (a través de MemoryStream) | Sí - .ToPngBinaryData() |
| Resultados | Sí (gestión manual del flujo) | Sí - .ToStream() |
| API de redimensionamiento directo | No - PixelSize sólo factor de escala |
Sí - .ResizeTo(width, height) |
| Lectura | ||
| Leer desde archivo de imagen | No | Sí |
| Leer desde PDF | No | Sí |
| Leer desde la transmisión | No | Sí |
| Detección de múltiples códigos de barras | No | Sí - ExpectMultipleBarcodes |
| Control de velocidad de lectura | No | Sí - ReadingSpeed enum |
| Plataforma | ||
| .NET Core / .NET 5+ | Sí | Sí |
| .NET Framework | Renderizador de imágenes insertado | .NET Framework4.6.2 o superior |
| .NET 9 | Actividad poco clara o limitada | Sí |
| MAUI (iOS, Android, Windows, macOS) | No | Sí |
| Docker / Azure / AWS Lambda | No documentado | Sí |
| Embalaje | ||
| Riesgo de versionado de paquetes independientes | Sí | No — paquete único |
| Espacio de nombres por formato | Sí | No - solo using IronBarCode |
| Licencias | ||
| Modelo de licencia | MIT (código abierto) | Comercial |
| Precios | Gratis | Lite $749, Plus $1,499, Professional $2,999, Ilimitado $5,999 |
API de selección y generación de formatos
La forma en que se estructura la selección del formato de código de barras tiene repercusiones en todas las partes del código fuente que generan códigos de barras.
Enfoque de código de barras
El lector de códigos de barras dirige la selección de formato a través de clases de codificadores separadas en espacios de nombres separados. Cambiar de formato significa añadir una nueva directiva using y utilizar una clase diferente con una firma de método distinta:
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix
' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)
' QR Code — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix — different namespace, different class again
barcode = DataMatrixEncoder.Encode("data")
Cada codificador tiene su propio contrato de parámetros. Agregar un nuevo formato a un proyecto existente no es un cambio de una sola palabra: implica importar un nuevo espacio de nombres, aprender una nueva clase y comprender nuevos parámetros.
Enfoque IronBarcode
IronBarcode dirige toda la selección de formato a través del enum BarcodeEncoding de la clase unificada BarcodeWriter. Agregar un nuevo formato es un cambio de una sola palabra en el valor de enumeración:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
Imports IronBarCode
' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")
' DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")
' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
Para su uso en producción, añada la clave de licencia al iniciar la aplicación:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
La documentación de generación de códigos de barras de IronBarcode abarca toda la gama de opciones de generación, incluyendo estilos, márgenes y personalización de colores.
Opciones de renderizado y salida
Convertir la salida de un código de barras a diferentes formatos (un archivo, datos binarios, un flujo de datos) es un requisito común que cada biblioteca maneja de manera muy diferente.
Enfoque de código de barras
La separación entre codificación y renderizado en Código de barras es una arquitectura acertada, pero genera una sobrecarga con cada cambio de formato de salida. Para guardar en un archivo es necesario abrir un FileStream. Obtener datos binarios requiere abrir un MemoryStream y llamar a ToArray(). Cada escenario de salida requiere la construcción de un renderizador con un objeto de opciones:
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
El control de tamaño es indirecto: PixelSize es un multiplicador de escala sobre el tamaño del módulo del código de barras, no una especificación directa de anchura y altura.
Enfoque IronBarcode
IronBarcode devuelve un objeto GeneratedBarcode desde el que se puede acceder a cualquier formulario de salida mediante llamadas a métodos encadenados. Sin construcción de renderizadores, sin gestión de flujos:
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
' File
barcode.SaveAsPng("barcode.png")
' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()
' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
.ResizeTo(width, height) toma dimensiones explícitas de píxeles y encadena con cualquier método de salida en el mismo objeto.
Lectura de códigos de barras
La ausencia de una API de lectura en Código de barras es una limitación arquitectónica ineludible, no una opción de configuración.
Enfoque de código de barras
El lector de códigos de barras no tiene capacidad de lectura ni de decodificación. No existe ninguna API, ni ninguna API planificada, ni ninguna solución alternativa dentro de la biblioteca. Si una aplicación necesita leer códigos de barras, se debe agregar una segunda biblioteca —una dependencia NuGet independiente con su propia interfaz API y su propia versión que controlar— junto con Barcoder. Eso significa, como mínimo, dos dependencias relacionadas con la lectura: Código de barras para la generación y algún otro sistema para la lectura.
Enfoque IronBarcode
IronBarcode abarca tanto la generación como la lectura con el mismo paquete y patrones de API consistentes. El método BarcodeReader.Read() acepta de forma nativa archivos de imagen, matrices de bytes, flujos y PDF:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Leer desde PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Leer desde PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Console.WriteLine(result.Format)
Next
' Leer desde PDF — no conversion step, no extra dependency
Dim pdfResults = BarcodeReader.Read("document.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
La lectura de archivos PDF es nativa: no requiere extracción intermedia de imágenes, ni biblioteca de conversión, ni paquete adicional. La documentación de IronBarcode sobre lectura de códigos de barras abarca archivos PDF de varias páginas, lectura de regiones de interés y optimización del rendimiento.
Referencia de mapeo de API
| Código de barras | IronBarcode |
|---|---|
Code128Encoder.Encode("data", false) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) |
QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... })| No es necesario - la salida se encadena desdeGeneratedBarcode` |
|
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode (estructura de datos, sin métodos de salida) |
GeneratedBarcode (tiene SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, etc.) |
Barcoder + Barcoder.Renderer.Image (2 paquetes) |
IronBarcode (1 paquete) |
using Barcoder.Code128 |
using IronBarCode(espacio de nombre único, todos los formatos) |
using Barcoder.Qr |
using IronBarCode |
using Barcoder.DataMatrix |
using IronBarCode |
| No se puede leer la API | BarcodeReader.Read(path / bytes / stream / pdf) |
| No hay renderizador de imágenes de .NET Framework | .NET Framework4.6.2 o superior |
PixelSize + BarHeightFor1DBarcode opciones |
.ResizeTo(width, height) |
Cuando los equipos consideran cambiar de Código de barras a IronBarcode
Se añade la lectura a los requisitos.
Muchos proyectos comienzan como simples procesos de generación de código: imprimir etiquetas, generar códigos para documentos, insertar códigos de barras en informes. Código de barras presta servicio a estos proyectos desde el principio. Cuando la misma aplicación necesita posteriormente verificar códigos de barras entrantes, procesar documentos escaneados o decodificar códigos de barras de archivos PDF cargados, Código de barras no ofrece ninguna solución. El equipo debe evaluar una segunda biblioteca, aprender su API, gestionar su versión NuGet por separado y manejar la superficie de integración entre ambas bibliotecas. Los equipos que llegan a este punto suelen consolidar sus sistemas en una biblioteca que gestiona ambos lados, en lugar de mantener dos dependencias de códigos de barras separadas.
La ruptura de compatibilidad de .NET Framework
Barcoder.Renderer.Image se ha eliminado la compatibilidad con .NET Framework. Los equipos que mantienen servicios o aplicaciones de escritorio en .NET Framework4.x y que actualizan el paquete de renderizado de imágenes durante el mantenimiento rutinario de dependencias se encuentran con un fallo de compilación. Esto no es un error de configuración, sino una decisión de la biblioteca en cuanto al soporte de la plataforma. IronBarcode es compatible con .NET Frameworkdesde la .NET hasta la 9 sin necesidad de paquetes especiales ni dependencias condicionales para diferentes plataformas.
La desviación de la versión del paquete crea problemas de coordinación.
Con Barcoder y Barcoder.Renderer.Image versionados independientemente, la actualización de uno sin el otro durante una actualización de dependencia puede introducir incompatibilidades sutiles. En un repositorio con múltiples proyectos, cada uno de los cuales consume una versión diferente de cada paquete de renderizado, garantizar un comportamiento coherente entre los proyectos se convierte en un problema de coordinación que crece con el tamaño del equipo. Los equipos que se están unificando en IronBarcode informan que gestionar un único paquete y una única versión elimina por completo este tipo de problema.
La cobertura de formatos se amplía con el tiempo.
Un proyecto podría comenzar con etiquetas Code128 y posteriormente agregar códigos QR para enlaces orientados al cliente, y luego DataMatrix para cumplir con los requisitos normativos. Con Barcoder, cada nuevo formato implica la importación de un nuevo espacio de nombres, una clase de codificador diferente con parámetros de método distintos y, potencialmente, un nuevo paquete NuGet . Con IronBarcode, añadir un formato es un cambio en el valor BarcodeEncoding enum de una llamada existente. Los equipos con planes de desarrollo que incluyen la ampliación de la cobertura de formatos de código de barras encuentran que el modelo basado en enumeraciones es mucho más fácil de mantener.
Requisitos de MAUI y de implementación multiplataforma
Barcoder no documenta la compatibilidad con implementaciones de MAUI, Docker, AWS Lambda o Azure. Los equipos que desarrollan aplicaciones MAUI multiplataforma o que implementan el procesamiento de códigos de barras en infraestructuras sin servidor descubren que la documentación y las pruebas de Código de barras no cubren estos objetivos. IronBarcode documenta y prueba activamente la implementación en iOS, Android, Windows, macOS MAUI, contenedores Docker y las principales plataformas en la nube.
Consideraciones comunes sobre la migración
El cambio de tipo IBarcode a GeneratedBarcode
El código BarCode que almacena una variable IBarcode y la pasa posteriormente a un renderizador debe ser refactorizado. En IronBarcode, GeneratedBarcode tiene sus propios métodos de salida - no hay un paso de renderizado separado. Cualquier firma de método que actualmente acepte IBarcode debería cambiar para aceptar GeneratedBarcode, y la llamada de renderizado dentro de ese método debería convertirse en una llamada directa como .SaveAsPng() o .ToPngBinaryData(). El sistema de tipos mostrará todas las ubicaciones que deban actualizarse durante la compilación - IBarcode no se resolverá una vez eliminados los paquetes de Barcoder.
PixelSize No tiene equivalente directo
El PixelSize de BarCode es un multiplicador de escala sobre el tamaño natural del módulo del código de barras, no una dimensión explícita en píxeles. El ancho de salida depende del contenido del código de barras, el formato y el multiplicador, que se combinan en conjunto. IronBarcode utiliza .ResizeTo(width, height)con dimensiones de píxel explícitas. Durante la migración, mida las dimensiones de salida reales que produce el código BarCode existente y utilice esos valores en la llamada .ResizeTo():
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ResizeTo(300, 80) _
.SaveAsPng("barcode.png")
Consolidación de espacios de nombres
Los proyectos BarCode acumulan declaraciones using Barcoder.*, una por cada formato utilizado. Durante la migración, todos estos colapsan en un único using IronBarCode;. Una búsqueda de using Barcoder en la solución identificará todos los archivos que necesiten actualización. La cantidad de archivos afectados suele ser mayor de lo que esperan los equipos, porque cada archivo que utiliza un formato de código de barras importa su propio espacio de nombres específico para ese formato.
Cambios en la ruta de salida SVG
Los proyectos que utilizan Barcoder.Renderer.Svg y la clase SvgRenderer sustituyen la canalización del renderizador por una llamada directa al método GeneratedBarcode:
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
Imports System.IO
' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")
El paquete Barcoder.Renderer.Svg puede eliminarse una vez que se hayan migrado todos los sitios de renderizado SVG.
Funcionalidades adicionales de IronBarcode
Más allá de los puntos de comparación mencionados anteriormente, IronBarcode incluye características para las que Código de barras no tiene equivalente:
- Códigos QR con logotipos incrustados:
.AddBrandLogo(path)incrusta una imagen de marca en el centro del código QR sin romper la escaneabilidad - Lectura nativa de códigos de barras en PDF:
BarcodeReader.Read("document.pdf")procesa los PDF directamente sin extraer primero las imágenes - Detección de múltiples códigos de barras:
ExpectMultipleBarcodesopción lee todos los códigos de barras de una sola imagen o página PDF en una sola llamada - Control de velocidad de lectura:
ReadingSpeed.Balanced,Faster, ySlowerajustan el equilibrio entre precisión y velocidad para diferentes casos de uso - Implementación multiplataforma de MAUI : Las aplicaciones de destino de MAUI para iOS, Android, Windows y macOS se prueban y documentan activamente.
- Docker y despliegue en la nube : Rutas de despliegue documentadas para contenedores Docker, AWS Lambda y Azure Functions.
- Estilización y personalización de códigos de barras: Personalización del color, el margen, el texto de anotación y el fondo en
GeneratedBarcode
Compatibilidad con .NET y preparación para el futuro
IronBarcode es compatible con .NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 y .NET 9. Su desarrollo continúa con actualizaciones periódicas, y la compatibilidad con .NET 10 (prevista para finales de 2026) forma parte de la hoja de ruta publicada. El renderizador de imágenes de Código de barras dejó de ser compatible con .NET Framework, y la actividad en el repositorio ha sido limitada en las últimas versiones, lo que deja en duda la compatibilidad de la biblioteca con .NET 9y sus futuras versiones. Para los equipos que necesitan un amplio periodo de soporte y una compatibilidad predecible con las próximas versiones de .NET , el ritmo de lanzamientos activos de IronBarcode ofrece una mayor seguridad.
Conclusión
Barcoder e IronBarcode reflejan ámbitos fundamentalmente diferentes. Código de barras es una biblioteca de generación exclusiva con una separación de principios entre codificación y renderización: la estructura de datos IBarcode y el canal de renderización son capas distintas por diseño. IronBarcode es una biblioteca completa de códigos de barras donde la generación y la lectura comparten un único paquete, un único espacio de nombres y una API estática consistente. La diferencia arquitectónica se hace más evidente cuando los requisitos se amplían: el diseño de Barcoder, basado en múltiples paquetes, múltiples espacios de nombres y sin lectura, convierte cada adición en una tarea estructural, mientras que IronBarcode trata las nuevas adiciones de formato o funcionalidad como cambios de configuración.
Barcoder es la opción correcta cuando un proyecto realmente solo necesita generación, se dirige exclusivamente a .NET Core , utilizará un número reducido de formatos de código de barras y la licencia MIT es un requisito indispensable. La biblioteca funciona según lo documentado dentro de esos límites, y para proyectos con un alcance muy específico, sin requisitos de lectura ni objetivos .NET Framework, la opción de código abierto sin costo es razonable.
IronBarcode es la opción correcta cuando un proyecto necesita tanto lectura como generación, está dirigido a implementaciones de .NET Frameworko MAUI multiplataforma, prevé agregar formatos de código de barras con el tiempo o requiere implementación en Docker o entornos en la nube. El modelo de paquete único y la selección de formato basada en enumeraciones eliminan la sobrecarga que se acumula con Código de barras a medida que aumenta el alcance del proyecto.
La decisión práctica se reduce a la trayectoria. Código de barras es una herramienta muy útil para proyectos que, sin duda, seguirá siendo un generador sencillo de formato único sin requisitos de lectura. Un proyecto con cualquier ambigüedad en sus requisitos de código de barras (añadir formatos, añadir lectura, implementar en diferentes plataformas) se topará con las limitaciones arquitectónicas de Código de barras antes de lo previsto. Ambas bibliotecas son herramientas fiables; La cuestión es cuál se ajusta mejor al alcance real del trabajo.
Preguntas Frecuentes
¿Qué es BarCoder?
Barcoder 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 Barcoder e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que BarCoder 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 más fácil obtener la licencia de IronBarcode que la de Barcoder?
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 Barcoder?
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 Barcoder?
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 Barcoder?
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 Barcoder 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 Barcoder a IronBarcode?
La migración de Barcoder 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().

