NetBarcode vs IronBarcode: Comparación de bibliotecas de códigos de barras C#
El enum Type de Código de barras de red no tiene entrada de código QR. Cuando un proyecto de etiquetas de envío añade el requisito de un código QR en el tercer mes, los desarrolladores recurren a una segunda biblioteca. Esa segunda biblioteca trae consigo su propia interfaz de programación de aplicaciones (API), su propio calendario de lanzamientos y una dependencia compartida de SixLabors.ImageSharp cuya versión puede desfasarse con respecto a la versión que Código de barras de red ya requiere. Esta comparativa examina qué es NetBarcode, dónde encaja bien y dónde IronBarcode cubre las carencias sin añadir un segundo o tercer paquete.
Comprender el código de barras NetBarcode
NetBarcode es una biblioteca de código abierto para la generación de códigos de barras en .NET , publicada bajo la licencia MIT. Fue diseñado para producir imágenes de códigos de barras lineales a partir de datos de cadenas de texto, y cumple ese propósito a la perfección. La biblioteca está diseñada para los formatos Code128, EAN-13, UPC-A y otros diez formatos 1D, todos ellos accesibles mediante un constructor sencillo y un pequeño conjunto de métodos de salida. Su dependencia de SixLabors.ImageSharp proporciona la capa de renderizado de imágenes, y desde la versión 1.8 esa dependencia se refleja en la API pública a través del tipo de retorno Image<Rgba32> en GetImage().
NetBarcode no pretende ser un conjunto de herramientas de código de barras de uso general. No tiene capacidad de lectura ni admite formatos 2D. Se trata de decisiones deliberadas sobre el alcance del proyecto. La biblioteca es ideal para aplicaciones que solo necesitan códigos de barras 1D, y su licencia MIT facilita su adopción en entornos de código abierto.
Características arquitectónicas clave:
- Licencia MIT: La biblioteca en sí tiene licencia MIT, aunque su dependencia SixLabors.ImageSharp tiene una licencia comercial dividida que se aplica a partir de un umbral de ingresos.
- Diseño sólo 1D: El enum
Typedefine exactamente 14 formatos de código de barras, todos lineales; No hay entradas 2D - SixLabors.ImageSharp Dependencia: El renderizado de imágenes se delega a ImageSharp, y desde la v1.8 el método
GetImage()devuelveImage<Rgba32>, exponiendo el tipo de ImageSharp directamente en la API pública - API basada en constructor: Los BarCodes se crean con
new Barcode(data, Type.X)y se guardan o recuperan conSaveImageFile()oGetImage() - No hay API de lectura: Código de barras de red solo se genera; no existe ningún método o clase para descodificar imágenes de códigos de barras
- Sin procesamiento por lotes: Cada código de barras es una llamada al constructor independiente; sin enumeración incorporada ni proceso por lotes
El límite de diseño de enumeración de tipos
El Type enum es la lista autorizada de lo que Código de barras de red puede generar. Al inspeccionarla se revela el alcance de la biblioteca:
// Código de barras de red Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
// Código de barras de red Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
' Código de barras de red Type enum — complete list as of v1.8
Public Enum Type
Code128
Code128A
Code128B
Code128C
Code39
Code39Extended
Code93
EAN8
EAN13
UPCA
UPCE
Codabar
ITF
MSI
End Enum
' These entries do not exist — attempting to use them produces a BC30456 compile error:
' Type.QRCode — does not exist
' Type.DataMatrix — does not exist
' Type.PDF417 — does not exist
' Type.Aztec — does not exist
No se trata de una función faltante pendiente de una solicitud de incorporación de cambios. La enumeración tiene catorce entradas, todas unidimensionales, lo que refleja el alcance previsto de la biblioteca. Cualquier aplicación que requiera códigos QR, DataMatrix, PDF417o azteca deberá adquirir un paquete aparte para proporcionar dichos formatos.
Entendiendo IronBarcode
IronBarcode es una biblioteca comercial de códigos de barras .NET que abarca tanto la generación como la lectura en un solo paquete. Está desarrollado y mantenido por Iron Software , con actualizaciones periódicas dirigidas a las versiones actuales de .NET . La superficie estática de la API de la biblioteca está diseñada para que el cambio de un formato de código de barras a otro sólo requiera cambiar una única constante: la misma llamada BarcodeWriter.CreateBarcode que genera Code128 también genera códigos QR, DataMatrix, PDF417y Aztec.
IronBarcode gestiona la lectura de códigos de barras a través de la clase BarcodeReader, que acepta archivos de imagen y documentos PDF y devuelve resultados decodificados con identificación del formato. Esto significa que la generación y la lectura comparten una única dependencia, una única licencia y un único conjunto de notas de la versión que deben seguirse.
Características clave:
- Generación y lectura unificadas: Tanto
BarcodeWritercomoBarcodeReaderse incluyen en un único paquete NuGet - Más de 50 formatos compatibles: los formatos 1D incluyen todos los equivalentes de NetBarcode; Los formatos 2D incluyen código QR, DataMatrix, PDF417, azteca y otros.
- Fluent Chain API:
BarcodeWriter.CreateBarcode(data, encoding)devuelve un objetoGeneratedBarcodecon métodos de salida que incluyenSaveAsPng(),SaveAsJpeg(),ToPngBinaryData()y sobrecargas basadas en flujos - Sin dependencia de ImageSharp: la representación de imágenes de IronBarcode es autónoma; No se introduce ninguna dependencia transitiva de SixLabors.
- Soporte PDF: La API de lectura acepta archivos
.pdfdirectamente además de formatos de imagen - Licencia comercial: Se requiere una clave de licencia; el modo de prueba está disponible y elimina las marcas de agua tras la compra
Comparación de características
| Característica | Código de barras de red | IronBarcode |
|---|---|---|
| Generación de códigos de barras 1D | Sí | Sí |
| Generación de códigos de barras 2D | No | Sí |
| Lectura de códigos de barras | No | Sí |
| Compatibilidad con PDF | No | Sí |
| Simbologías totales | 14 | Más de 50 |
| Dependencia de ImageSharp | Sí (licencia dividida) | No |
| Modelo de licencia | MIT (+ condiciones de ImageSharp) | Comercial |
Comparación detallada de características
| Característica | Código de barras de red | IronBarcode |
|---|---|---|
| Generación | ||
| Código128, EAN-13, UPC-A, Código39 | Sí | Sí |
| EAN-8, UPC-E, Code93, Codabar, ITF, MSI | Sí | Sí |
| Código QR | No | Sí |
| Matriz de datos | No | Sí |
| PDF417 | No | Sí |
| azteca | No | Sí |
| GS1-128, GS1 DataBar | No | Sí |
| Formatos postales (Correo Inteligente, Royal Mail) | No | Sí |
| Salida SVG | No | Sí |
| Lectura | ||
| Decodificar imágenes de códigos de barras | No | Sí |
| Leer desde documentos PDF | No | Sí |
| Detección de múltiples códigos de barras | No | Sí |
| Detección automática de formato | No | Sí |
| Diseño de API | ||
| Creación basada en constructores | Sí | No (método estático) |
| Cadena de salida fluida | No | Sí |
| Soporte para procesamiento por lotes | Manual | Incorporado en |
| Licencias y dependencias | ||
| Licencia de biblioteca | MIT | Comercial |
| Dependencia de ImageSharp | Sí | No |
| Apoyo comercial | Comunidad | Profesional |
Cobertura de formato
Enfoque de NetBarcode
NetBarcode proporciona 14 formatos de códigos de barras lineales a través del enum Type. Dentro de ese ámbito, la selección del formato es sencilla: basta con pasar el miembro de enumeración apropiado al constructor. El límite es igualmente claro: intentar utilizar un formato fuera de la enumeración produce un error de compilación.
// Código de barras de red — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// Código de barras de red — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
// Código de barras de red — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// Código de barras de red — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
Imports NetBarcode
Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")
Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")
' Código de barras de red — formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode) ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417) ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec) ' error CS0117
Entre los sectores donde este límite se convierte en una restricción se incluyen el seguimiento farmacéutico (DataMatrix es obligatorio según las normativas de códigos de barras 2D de la FDA), las tarjetas de embarque aéreas (Aztec), los manifiestos logísticos (PDF417) y el marketing móvil (código QR). Cada uno de estos requisitos descarta a Código de barras de red como solución independiente.
Enfoque IronBarcode
IronBarcode expone todos los formatos compatibles a través del mismo método BarcodeWriter.CreateBarcode. La superficie de la API no cambia al pasar de un formato 1D a un formato 2D - sólo difiere la constante BarcodeEncoding.
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
Imports IronBarCode
' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("shipping.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product.png")
' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-label.png")
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
.SaveAsPng("boarding-pass.png")
La lista completa de constantes compatibles está disponible en la referencia de formatos de código de barras compatibles , que abarca todos los formatos de generación de códigos de barras 2D junto con el conjunto completo de 1D.
Diseño de API de generación
Enfoque de NetBarcode
El modelo de generación de Código de barras de red se basa en un constructor. Un objeto Barcode es instanciado con la cadena de datos y un valor Type enum. El resultado se guarda directamente con SaveImageFile() o se recupera como Image<Rgba32> a través de GetImage(). Desde la versión 1.8, el tipo de retorno de GetImage() es el tipo SixLabors.ImageSharp, lo que significa que cualquier código que almacene o procese el valor de retorno debe importar y trabajar dentro de la API ImageSharp.
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO
' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)
' Save to file — straightforward
barcode.SaveImageFile("code128.png")
' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()
' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
image.SaveAsPng(stream)
Dim bytes As Byte() = stream.ToArray()
End Using
El tipo de retorno del método GetImage() vincula el código descendente a la biblioteca ImageSharp. Cualquier método que acepte o almacene el resultado debe declararlo como Image<Rgba32>, introduciendo una dependencia transitiva en el código de llamada.
Enfoque IronBarcode
IronBarcode utiliza una cadena fluida. BarcodeWriter.CreateBarcode devuelve un objeto GeneratedBarcode que contiene múltiples métodos de salida. El procesamiento de imágenes es interno; ningún tipo ImageSharp se expone al código que realiza la llamada.
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode
' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("code128.png")
' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()
Using stream As New MemoryStream()
barcode.SaveAsPng(stream)
End Using
En la documentación de IronBarcode se describen las opciones detalladas para la generación de códigos de barras 1D, incluyendo el ancho, la altura y la configuración de la etiqueta.
Capacidad de lectura
Enfoque de NetBarcode
NetBarcode no tiene API de lectura. No existe ningún método, clase o configuración que decodifique una imagen de código de barras para convertirla de nuevo en su cadena de datos. Se trata de una delimitación deliberada del alcance, no de una omisión pendiente de publicación. Un proyecto que genera códigos de barras con Código de barras de red y posteriormente necesita leerlos —para validar una etiqueta impresa, escanear un envío de devolución o extraer valores de una factura de proveedor— debe introducir una biblioteca independiente para ese fin.
// Código de barras de red — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
// Código de barras de red — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
' Código de barras de red — no reading method exists
' The following does not compile because the method does not exist:
' Dim result = barcode.Read("image.png") ' method does not exist
' The typical workaround requires ZXing.Net as a third-party dependency
La biblioteca ZXing .NET es la adición más común para la lectura junto con NetBarcode, ya que aporta una tercera interfaz API y un tercer paquete para la gestión de versiones, además de Código de barras de red y cualquier biblioteca 2D ya añadida para códigos QR.
Enfoque IronBarcode
IronBarcode incluye BarcodeReader en el mismo paquete que BarcodeWriter. La API de lectura acepta archivos de imagen y documentos PDF, y devuelve una colección de resultados decodificados, cada uno con el valor del código de barras, el tipo de formato y el número de página si la lectura se realiza desde un PDF.
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode
' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
Console.WriteLine($"{r.BarcodeType}: {r.Value}")
Next
' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
La guía para leer códigos de barras a partir de imágenes abarca opciones como el ajuste de velocidad, la detección de múltiples códigos de barras y la corrección de imágenes disponibles en la API de lectura.
Consideraciones sobre dependencias y licencias
Código de barras de red e ImageSharp
NetBarcode tiene licencia MIT. La biblioteca SixLabors.ImageSharp de la que depende utiliza un modelo diferente: es gratuita para proyectos de código abierto y para empresas con ingresos brutos anuales inferiores a un umbral definido, pero se requiere una licencia comercial por encima de ese umbral. Esta división se aplica independientemente de si ImageSharp aparece explícitamente en el .csproj de un proyecto o llega de forma transitoria a través de NetBarcode.
<PackageReference Include="NetBarcode" Version="1.8.2" />
<PackageReference Include="NetBarcode" Version="1.8.2" />
Para una empresa minorista o de logística que procesa códigos de barras a gran escala, el principal caso de uso al que se dirige NetBarcode, los ingresos anuales suelen estar por encima del umbral a partir del cual se aplica la licencia comercial de ImageSharp. Una auditoría de cumplimiento puede revelar esta obligación integrada en el árbol de paquetes.
La versión v1.8 introdujo una consecuencia adicional de la dependencia de ImageSharp: el tipo de retorno de GetImage() cambió de una representación interna a SixLabors.ImageSharp.Image<Rgba32>. El código existente que llamaba a GetImage() sin tipado explícito se rompía en tiempo de compilación, y se requerían nuevas directivas using para SixLabors.ImageSharp y SixLabors.ImageSharp.PixelFormats. Cuando la API de ImageSharp evolucione en futuras versiones, la API pública de Código de barras de red se verá afectada a su vez.
Código de barras de hierro
IronBarcode no tiene ninguna dependencia de SixLabors.ImageSharp. Sus condiciones de licencia se establecen directamente en la página de licencias de IronBarcode , sin umbral mínimo ni obligación comercial transitiva. Hay disponible una clave de prueba para su evaluación; Las licencias adquiridas eliminan la marca de agua de la versión de prueba de los resultados generados.
Referencia de mapeo de API
| Código de barras de red | IronBarcode | Notas |
|---|---|---|
new Barcode(data, Type.Code128) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
Constructor → método estático |
new Barcode(data, Type.EAN13) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) |
Mapeo directo |
new Barcode(data, Type.UPCA) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCA) |
Mapeo directo |
new Barcode(data, Type.Code39) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) |
Mapeo directo |
new Barcode(data, Type.EAN8) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) |
Mapeo directo |
new Barcode(data, Type.UPCE) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCE) |
Mapeo directo |
new Barcode(data, Type.ITF) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.ITF) |
Mapeo directo |
new Barcode(data, Type.Codabar) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) |
Mapeo directo |
barcode.SaveImageFile("x.png") |
.SaveAsPng("x.png") |
renombrar método |
barcode.SaveImageFile("x.jpg") |
.SaveAsJpeg("x.jpg") |
renombrar método |
barcode.GetImage() → Image<Rgba32> |
.ToPngBinaryData() o .SaveAsPng() |
No se muestra ningún tipo ImageSharp |
No Type.QRCode |
BarcodeEncoding.QRCode |
Nueva capacidad |
No Type.DataMatrix |
BarcodeEncoding.DataMatrix |
Nueva capacidad |
No Type.PDF417 |
BarcodeEncoding.PDF417 |
Nueva capacidad |
No Type.Aztec |
BarcodeEncoding.Aztec |
Nueva capacidad |
| No se puede leer la API | BarcodeReader.Read(path) |
Nueva capacidad |
using NetBarcode; |
using IronBarCode; |
Reemplazo de espacio de nombres |
using SixLabors.ImageSharp; |
Eliminar | Ya no es necesario |
La referencia completa del formato está disponible en la documentación de formatos de código de barras compatibles .
Cuando los equipos consideran pasar de Código de barras de red a IronBarcode
Requisitos de código QR y formato 2D
El motivo más frecuente para evaluar una alternativa a Código de barras de red es un nuevo requisito para los códigos QR. Las aplicaciones que comienzan con la generación de códigos de barras 1D para etiquetas de venta minorista o manifiestos de envío suelen recibir un requisito posterior para códigos QR: enlaces sin contacto, enlaces directos a aplicaciones móviles, campañas de marketing. Dado que el enum Type no tiene entrada QR, este requisito no puede cumplirse con NetBarcode. Los equipos que añaden una biblioteca de códigos QR independiente para solucionar esta deficiencia se enfrentan a una segunda evaluación cuando se requiere Matriz de datos para una integración farmacéutica, o PDF417para un transportista logístico que lo exige en las etiquetas de envío.
La lectura de códigos de barras se vuelve necesaria.
Algunos proyectos comienzan con la generación pura y posteriormente añaden un requisito de validación o procesamiento de documentos: confirmar que un código de barras impreso coincide con sus datos de origen, extraer valores de códigos de barras de las facturas de proveedores entrantes o escanear etiquetas de envío de devolución. Código de barras de red no proporciona ninguna ruta para esto. La incorporación de ZXing .NET o una biblioteca de lectura comparable introduce una tercera API que aprender y mantener en el mismo código base que ya contiene Código de barras de red y una biblioteca QR. Los proyectos que prevén necesidades de lectura, incluso en una fase futura, suelen encontrar más eficiente seleccionar una biblioteca que satisfaga ambas necesidades desde el principio.
Auditoría de licencias comerciales de ImageSharp
En ocasiones, las revisiones legales y de cumplimiento de las dependencias de terceros sacan a la luz la condición de licencia comercial de SixLabors.ImageSharp integrada en el árbol de paquetes de NetBarcode. Para las empresas cuyos ingresos brutos anuales superen el umbral, la obligación se aplica tanto si ImageSharp se seleccionó deliberadamente como si se obtuvo de forma indirecta a través de NetBarcode. Los equipos que descubren esto durante una auditoría, en lugar de antes de la adopción, se enfrentan a una corrección retroactiva en lugar de una migración planificada. Evaluar la licencia de dependencia antes de comenzar un proyecto es la opción más limpia.
Reducción de la complejidad de múltiples bibliotecas
Los equipos que han acumulado Código de barras de red para la generación 1D, una biblioteca específica para códigos QR para la salida 2D y ZXing .NET para la lectura, se encuentran con la necesidad de mantener la compatibilidad de versiones en tres paquetes diferentes. Cada ciclo de actualización requiere comprobar si las tres bibliotecas coinciden en su versión compartida de ImageSharp. Cada nuevo desarrollador del proyecto se encuentra con tres API diferentes para lo que conceptualmente es una sola cuestión. La consolidación en una única biblioteca de códigos de barras simplifica la incorporación de nuevos usuarios, reduce la superficie de conflicto de versiones y concentra el mantenimiento en un único ciclo de lanzamiento.
Consideraciones comunes sobre la migración
Intercambio de paquetes y limpieza de dependencias transitivas
La eliminación de Código de barras de red con dotnet remove package NetBarcode es el primer paso. El paquete SixLabors.ImageSharp puede reaparecer en el árbol de dependencias si otros paquetes en el proyecto también tiran de él de forma transitoria. Tras la eliminación, inspeccione la lista de paquetes restaurada con dotnet list package --include-transitive para confirmar si ImageSharp sigue presente y si su condición de licencia comercial sigue siendo aplicable.
Sustitución del tipo de retorno de GetImage()
Cualquier código que almacene el resultado de GetImage() como Image<Rgba32> debe ser actualizado. El tipo ImageSharp no tiene un equivalente directo en IronBarcode; La sustitución depende de cómo se haya utilizado la imagen posteriormente. El código que guardaba la imagen en un flujo puede sustituirse por .SaveAsPng(stream) directamente en el objeto GeneratedBarcode. El código que recupera bytes sin procesar puede usar .ToPngBinaryData(). El código que realice manipulaciones adicionales de ImageSharp en la imagen devuelta requerirá que esas operaciones se evalúen individualmente.
Actualización del espacio de nombres
Los archivos que importaron using NetBarcode;, using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats;, o using SixLabors.Fonts; necesitan que esas directivas sean reemplazadas por using IronBarCode;. Una búsqueda en todo el proyecto de estas declaraciones using identifica todos los archivos que requieren atención antes de intentar la compilación.
Funcionalidades adicionales de IronBarcode
Además de las funciones básicas de generación y lectura que se tratan en esta comparación, IronBarcode ofrece:
- Salida de código de barras SVG : Genera imágenes de código de barras en formato vectorial adecuadas para flujos de trabajo de impresión y diseños de etiquetas escalables.
- Estilo de código de barras : Configure el color de la barra, el color de fondo, la fuente de la anotación, el margen y la rotación en los códigos de barras generados.
- GS1-128 y GS1 DataBar : Códigos de barras estructurados con identificador de aplicación para el cumplimiento normativo en el sector minorista y la cadena de suministro.
- Formatos postales : Intelligent Mail, Royal Mail y otras simbologías postales para aplicaciones de envío de correo.
- Extracción de códigos de barras de PDF : Lea códigos de barras directamente de documentos PDF de varias páginas sin necesidad de una biblioteca de PDF independiente.
- Generación por lotes : Procese colecciones de datos de códigos de barras de manera eficiente dentro de una única canalización.
- MAUI y plataformas móviles : IronBarcode admite aplicaciones .NET MAUI para flujos de trabajo de códigos de barras multiplataforma para dispositivos móviles y de escritorio.
Compatibilidad con .NET y preparación para el futuro
IronBarcode está diseñado para .NET 8 y .NET 9, y mantiene la compatibilidad con .NET Standard para proyectos que aún no han migrado a la versión moderna de .NET. Dado que se prevé el lanzamiento de .NET 10 a finales de 2026, el ritmo de lanzamientos periódicos de Iron Software garantiza que las actualizaciones de compatibilidad acompañen a cada lanzamiento importante de .NET . Código de barras de red está diseñado para .NET Standard 2.0 y funciona en los entornos de ejecución actuales a través de esa capa de compatibilidad, aunque la frecuencia de actualización de la biblioteca y el conjunto de formatos 2D están determinados por su ámbito de diseño.
Conclusión
NetBarcode e IronBarcode representan posiciones diferentes en el espectro del alcance de las bibliotecas de códigos de barras. Código de barras de red es una implementación concisa y limpia de la generación de códigos de barras 1D: catorce formatos, una API de constructor sencilla y una licencia MIT que facilita su adopción para proyectos de código abierto dentro del umbral de ingresos de ImageSharp. IronBarcode es un conjunto de herramientas más amplio que abarca la generación en más de 50 formatos, la lectura de imágenes y archivos PDF, y una API fluida que trata los formatos 1D y 2D de forma idéntica.
Para proyectos cuyos requisitos se limitan realmente a la generación lineal de códigos de barras —un sistema de punto de venta que produce códigos EAN-13 y UPC-A para escáneres minoristas tradicionales, o una herramienta interna con una vida útil fija y corta— Código de barras de red ofrece lo necesario sin introducir una dependencia comercial. La biblioteca está bien construida dentro de su ámbito, y ese ámbito es explícito desde el primer vistazo al enum Type.
Para proyectos en los que el alcance del formato pueda ampliarse, en los que eventualmente se necesite la lectura o en los que exista una preocupación por la revisión de cumplimiento de la dependencia transitiva de ImageSharp, IronBarcode aborda los tres aspectos a través de un único paquete. Los equipos que comienzan con Código de barras de red para la generación 1D y luego agregan QRCoder para 2D y ZXing .NET para la lectura acumulan tres obligaciones de mantenimiento de biblioteca separadas; IronBarcode los consolida en uno solo.
La elección se deriva directamente de los requisitos del proyecto. Si catorce formatos 1D y la falta de capacidad de lectura se ajustan con precisión a las especificaciones, Código de barras de red es una opción técnicamente sólida. Si la especificación incluye algún formato 2D, algún flujo de trabajo de lectura o alguna inquietud sobre las condiciones de la licencia de ImageSharp, IronBarcode es la respuesta más completa.
Preguntas Frecuentes
¿Qué es NetBarcode?
NetBarcode 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 NetBarcode e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que NetBarcode 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 licenciar IronBarcode que NetBarcode?
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 NetBarcode?
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 NetBarcode?
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 NetBarcode?
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 NetBarcode 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 NetBarcode a IronBarcode?
La migración de NetBarcode 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().

