Pruebas en un entorno real
Pruebe en producción sin marcas de agua.
Funciona donde lo necesites.
Un escáner de códigos de barras no siempre es adecuado para nuestras aplicaciones. Puede que ya tenga una imagen digital del código de barras y quiera saber qué representa en texto inglés. Además, este escáner sólo lee códigos de barras 1-D, que contienen una cantidad limitada de datos y sólo pueden utilizarse en la biblioteca de clases de Windows RT. Códigos de barras bidimensionales (también conocidos como códigos QR) son ahora comunes y pueden contener mucha más información.
Se puede crear una aplicación basada en C# para leer códigos de barras utilizando simples llamadas a la API y unos pocos pasos de codificación. Una aplicación compatible con .NET se ejecuta en Windows, macOS o Linux sin depender de ninguna herramienta o API de terceros.
En este artículo se compararán las dos bibliotecas de aplicaciones .NET Core más potentes para leer códigos de barras mediante programación. Estas dos bibliotecas son IronBarcode y ZXing.NET. Veremos qué hace que IronBarcode sea más potente y robusto que ZXing.NET.
BarcodeEscriba arPixelData
para personalizar el código de barrasFormato
propiedadQrCodeEncodingOptions
para personalizar aún más la altura, el peso y el margenEscriba a
del objeto en el paso 2ZXing.NET es una biblioteca que descodifica y genera códigos de barras (como Código QR, PDF 417, EAN, UPC, Aztec, Data Matrix, Codabar). ZXing, que significa "paso de cebra", es una biblioteca de código abierto basada en Java que admite diversos formatos de códigos de barras 1D y 2D.
Sus características esenciales son las siguientes:
IronBarcode es una biblioteca de C# que permite a los programadores leer y generar códigos de barras. Como biblioteca líder de códigos de barras, IronBarcode admite una amplia variedad de códigos de barras unidimensionales y bidimensionales, incluidos los decorados (de color y de marca) Códigos QR. Es compatible con las versiones 2 y superiores de .NET Standard y Core, lo que permite su uso multiplataforma en Azure, Linux, macOS, Windows y Web. IronBarcode es una conocida biblioteca de clases o componente para el sistema .NET que permite a los desarrolladores de C#, VB.NET y F# trabajar con lenguajes de programación estandarizados. Permitirá a los clientes examinar las etiquetas de los escáneres y crear nuevas etiquetas normalizadas. Funciona excepcionalmente bien con códigos de barras 2D y otros códigos de barras 3D normalizados.
IronBarcode ahora admite códigos de barras 2D. Ofrece funciones para optimizar el color, el estilo y el pixelado de estos códigos, así como la posibilidad de añadirles logotipos para su uso en material impreso o publicitario. Esta biblioteca también puede leer códigos de barras torcidos y deformados, algo que otros programas de códigos de barras no pueden leer.
Para utilizar la biblioteca ZXing.NET, instale los dos paquetes siguientes en su aplicación ASP.NET Core mediante la consola del gestor de paquetes NuGet:
Install-Package ZXing.Net
Install-Package ZXing.Net.Bindings.CoreCompat.System.Drawing -Version 0.16.5-beta
Alternativamente, instale ZXing.NET en su proyecto utilizando el gestor de paquetes NuGet. Para ello, vaya a Herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para soluciones..., luego cambie a la pestaña "Examinar" y busque "ZXing.NET".
Aplicación web ASP.NET
Instale IronBarcode mediante el gestor de paquetes NuGet o descargando la DLL directamente de la página sitio web del producto. En IronBarcode contiene todas las clases de IronBarcode.
IronBarcode puede instalarse mediante el gestor de paquetes NuGet para Visual Studio: el nombre del paquete es "Barcode".
Install-Package BarCode
En primer lugar, crea una nueva carpeta llamada 'qrr' dentro de la carpeta raíz del archivo de proyecto.
A continuación, procederemos a crear archivos QR y a almacenar los archivos del sistema de imágenes dentro de la carpeta 'qrr'.
Dentro del Controlador, añade el comando `GenerateFile()como se muestra a continuación en el código fuente.
public ActionResult GenerateFile()
{
return View();
}
[HttpPost]
public ActionResult GenerateFile(string qrText)
{
Byte [] byteArray;
var width = 250; // Anchura del código QR
var height = 250; // altura del código QR
var margin = 0;
var qrCodeWriter = new ZXing.BarcodeWriterPixelData
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width,
Margin = margin
}
};
var pixelData = qrCodeWriter.Write(qrText);
// crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con RGB
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// guardar en carpeta
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// guardar en stream como PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
}
return View(byteArray);
}
public ActionResult GenerateFile()
{
return View();
}
[HttpPost]
public ActionResult GenerateFile(string qrText)
{
Byte [] byteArray;
var width = 250; // Anchura del código QR
var height = 250; // altura del código QR
var margin = 0;
var qrCodeWriter = new ZXing.BarcodeWriterPixelData
{
Format = ZXing.BarcodeFormat.QR_CODE,
Options = new QrCodeEncodingOptions
{
Height = height,
Width = width,
Margin = margin
}
};
var pixelData = qrCodeWriter.Write(qrText);
// crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con RGB
using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
{
using (var ms = new MemoryStream())
{
var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
try
{
// suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// guardar en carpeta
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// guardar en stream como PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
}
return View(byteArray);
}
Public Function GenerateFile() As ActionResult
Return View()
End Function
<HttpPost>
Public Function GenerateFile(ByVal qrText As String) As ActionResult
Dim byteArray() As Byte
Dim width = 250 ' Anchura del código QR
Dim height = 250 ' altura del código QR
Dim margin = 0
Dim qrCodeWriter = New ZXing.BarcodeWriterPixelData With {
.Format = ZXing.BarcodeFormat.QR_CODE,
.Options = New QrCodeEncodingOptions With {
.Height = height,
.Width = width,
.Margin = margin
}
}
Dim pixelData = qrCodeWriter.Write(qrText)
' crear un mapa de bits PNG a partir de los datos de píxeles en bruto; si sólo se utilizan colores blanco y negro, no hay diferencia si los datos de píxeles en bruto están orientados BGRA y el mapa de bits se inicializa con RGB
Using bitmap = New System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
Using ms = New MemoryStream()
Dim bitmapData = bitmap.LockBits(New System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb)
Try
' suponemos que la fila del mapa de bits está alineada a 4 bytes multiplicados por la anchura de la imagen
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length)
Finally
bitmap.UnlockBits(bitmapData)
End Try
' guardar en carpeta
Dim fileGuid As String = Guid.NewGuid().ToString().Substring(0, 4)
bitmap.Save(Server.MapPath("~/qrr") & "/file-" & fileGuid & ".png", System.Drawing.Imaging.ImageFormat.Png)
' guardar en stream como PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png)
byteArray = ms.ToArray()
End Using
End Using
Return View(byteArray)
End Function
El único cambio que queda es guardar el archivo del código QR dentro de la carpeta 'qrr'. Para ello se utilizan las dos líneas de código siguientes.
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
Dim fileGuid As String = Guid.NewGuid().ToString().Substring(0, 4)
bitmap.Save(Server.MapPath("~/qrr") & "/file-" & fileGuid & ".png", System.Drawing.Imaging.ImageFormat.Png)
También debes crear la vista GenerateFile
e incluir en ella el siguiente código. La vista GenerarArchivo
es idéntica a la vista Índice.
@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
<table>
<tbody>
<tr>
<td>
<label>Enter text for creating QR Code</label>
</td>
<td>
// cuadro de texto para introducir texto...
<input type="text" name="qrText" />
</td>
</tr>
<tr>
<td colspan="2">
<button>Submit</button>
</td>
</tr>
</tbody>
</table>
}
@{
if (Model != null)
{
<h3>QR Code Successfully Generated</h3>
// etiqueta img para mostrar el código QR generado...
<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
}
}
@model Byte []
@using (Html.BeginForm(null, null, FormMethod.Post))
{
<table>
<tbody>
<tr>
<td>
<label>Enter text for creating QR Code</label>
</td>
<td>
// cuadro de texto para introducir texto...
<input type="text" name="qrText" />
</td>
</tr>
<tr>
<td colspan="2">
<button>Submit</button>
</td>
</tr>
</tbody>
</table>
}
@{
if (Model != null)
{
<h3>QR Code Successfully Generated</h3>
// etiqueta img para mostrar el código QR generado...
<img src="@String.Format("data:image/png;base64,{0}", Convert.ToBase64String(Model))" />
}
}
model Function [using](Html.BeginForm ByVal As (Nothing, Nothing, FormMethod.Post)) As Byte()
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <table> <tbody> <tr> <td> <label> Enter text for creating QR Code</label> </td> <td> <input type="text" name="qrText" /> </td> </tr> <tr> <td colspan="2"> <button> Submit</button> </td> </tr> </tbody> </table>
"qrText" /> </td> </tr> (Of tr) <td colspan="2"> (Of button) Submit</button> </td> </tr> </tbody> </table>
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: <table> <tbody> <tr> <td> <label> Enter text for creating QR Code</label> </td> <td> <input type="text" name="qrText" /> </td> </tr> <tr> <td colspan
"text" name="qrText" /> </td> </tr> (Of tr) <td colspan
(Of table) (Of tbody) (Of tr) (Of td) (Of label) Enter text for creating QR Code</label> </td> (Of td) <input type="text" name
End Function
@
If True Then
If Model IsNot Nothing Then
'INSTANT VB WARNING: Instant VB cannot determine whether both operands of this division are integer types - if they are then you should use the VB integer division operator:
(Of h3) QR Code Successfully Generated</h3> <img src="@String.Format("data:image/png
base64,
If True Then
0
End If
", Convert.ToBase64String(Model))" />
End If
End If
Introduzca cualquier valor en el cuadro de texto y pulse el botón "Enviar". El código QR se generará y guardará como un archivo .PNG en la carpeta 'qrr'.
Generador de códigos QR
Archivos de códigos QR visualizados
IronBarcode admite una amplia gama de formatos de códigos de barras de uso común, entre los que se incluyen:
var MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");
Image MyBarCodeImage = MyBarCode.Image;
Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte [] PngBytes = MyBarCode.ToPngBinaryData();
// La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
// El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
}
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
var MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128);
MyBarCode.SaveAsImage("MyBarCode.png");
MyBarCode.SaveAsGif("MyBarCode.gif");
MyBarCode.SaveAsHtmlFile("MyBarCode.html");
MyBarCode.SaveAsJpeg("MyBarCode.jpg");
MyBarCode.SaveAsPdf("MyBarCode.Pdf");
MyBarCode.SaveAsPng("MyBarCode.png");
MyBarCode.SaveAsTiff("MyBarCode.tiff");
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp");
Image MyBarCodeImage = MyBarCode.Image;
Bitmap MyBarCodeBitmap = MyBarCode.ToBitmap();
string DataURL = MyBarCode.ToDataUrl();
string ImgTagForHTML = MyBarCode.ToHtmlTag();
byte [] PngBytes = MyBarCode.ToPngBinaryData();
// La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
// El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
}
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50);
Dim MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeEncoding.Code128)
MyBarCode.SaveAsImage("MyBarCode.png")
MyBarCode.SaveAsGif("MyBarCode.gif")
MyBarCode.SaveAsHtmlFile("MyBarCode.html")
MyBarCode.SaveAsJpeg("MyBarCode.jpg")
MyBarCode.SaveAsPdf("MyBarCode.Pdf")
MyBarCode.SaveAsPng("MyBarCode.png")
MyBarCode.SaveAsTiff("MyBarCode.tiff")
MyBarCode.SaveAsWindowsBitmap("MyBarCode.bmp")
Dim MyBarCodeImage As Image = MyBarCode.Image
Dim MyBarCodeBitmap As Bitmap = MyBarCode.ToBitmap()
Dim DataURL As String = MyBarCode.ToDataUrl()
Dim ImgTagForHTML As String = MyBarCode.ToHtmlTag()
Dim PngBytes() As Byte = MyBarCode.ToPngBinaryData()
' La salida de imágenes binarias de códigos de barras también funciona para GIF, JPEG, PDF, PNG, BMP y TIFF.
Using PdfStream As System.IO.Stream = MyBarCode.ToPdfStream()
' El flujo de salida de imágenes de códigos de barras también funciona con GIF, JPEG, PDF, PNG, BMP y TIFF.
End Using
MyBarCode.StampToExistingPdfPage("ExistingPDF.pdf", 1, 200, 50)
Por otro lado, ZXing es una biblioteca de procesamiento de imágenes de códigos de barras 1D/2D de código abierto basada en Java. UPC-A, UPC-E, EAN-8, Código 93, Código 128, Código QR, Data Matrix, Aztec, PDF 417 y otros formatos de código de barras son compatibles.
Formatos de códigos de barras compatibles
Para crear códigos QR con IronBarcode, podemos utilizar la clase QRCodeWriter
en lugar de la clase BarcodeWriter
. Esta clase presenta algunas características novedosas e intrigantes para crear códigos QR. Nos permite establecer el nivel de corrección de errores del QR, lo que le permite encontrar un equilibrio entre el tamaño y la legibilidad de su código QR.
// Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
// Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
' Generar una imagen sencilla de código QR y guardarla como PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png")
La corrección de errores nos permite especificar lo fácil que será leer un código QR en situaciones reales. Los niveles más altos de corrección de errores dan lugar a códigos QR más grandes, con más píxeles y complejidad. En la siguiente imagen, vemos el archivo de código QR desplegado.
Imagen del código QR
Comenzamos especificando el valor del código de barras y el formato del código de barras a partir del enum IronBarcode.BarcodeWriterEncoding
. A continuación, podemos guardar como una imagen, un System.Drawing.Image
, o un objeto de código Bitmap. Este es todo el código fuente que necesitas!
// Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png");
// Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png");
' Genere una imagen simple de código de barras y guárdela como PNG utilizando los siguientes espacios de nombres
Imports IronBarCode
Private MyBarCode As GeneratedBarcode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128)
MyBarCode.SaveAsPng("MyBarCode.png")
' Esta línea abre la imagen en su visor de imágenes predeterminado
System.Diagnostics.Process.Start("MyBarCode.png")
Crear una imagen de código de barras en C# Ejemplo
IronBarcode también admite la estilización de códigos QR, como la colocación de un gráfico de logotipo y su ajuste a una cuadrícula en el centro exacto de la imagen. También se puede colorear para adaptarlo a una marca o identidad gráfica específica.
Para probar, cree un logotipo en el siguiente ejemplo de código y vea lo sencillo que es utilizar el método QRCodeWriter.CreateQRCodeWithLogo
.
// Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
// Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
' Añadir un logotipo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
Crear código QR con imagen de logotipo
Por último, guardamos el código QR generado como archivo PDF. Para mayor comodidad, la última línea de código guarda el código QR como archivo HTML.
// Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
// Añadir un logotipo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
' Añadir un logotipo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
'Guardar como PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf")
'Guardar también como HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html")
A continuación, veremos cómo crear, estilizar y exportar un código de barras con una sola línea de código.
IronBarcode incluye una API fluida similar a System.Linq
. Creamos un código de barras, establecemos sus márgenes y lo exportamos a mapa de bits en una sola línea encadenando llamadas a métodos. Esto puede ser muy útil y facilita la lectura del código.
using IronBarCode;
using System.Drawing;
// API fluida para la generación de imágenes de códigos de barras.
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417).ResizeTo(300,200).SetMargins(100).ToBitmap();
using IronBarCode;
using System.Drawing;
// API fluida para la generación de imágenes de códigos de barras.
string MyValue = "https://ironsoftware.com/csharp/barcode";
Bitmap BarcodeBmp = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417).ResizeTo(300,200).SetMargins(100).ToBitmap();
Imports IronBarCode
Imports System.Drawing
' API fluida para la generación de imágenes de códigos de barras.
Private MyValue As String = "https://ironsoftware.com/csharp/barcode"
Private BarcodeBmp As Bitmap = IronBarcode.BarcodeWriter.CreateBarcode(MyValue, BarcodeEncoding.PDF417).ResizeTo(300,200).SetMargins(100).ToBitmap()
Como resultado, aparece un System.Drawing.Image
de un código de barras PDF417 como se muestra a continuación:
Generación sencilla y fluida de códigos de barras PDF417 en C#
Leer un código de barras o un código QR es pan comido cuando se utiliza la biblioteca de clases IronBarcode junto con el lector de códigos de barras .NET. En nuestro primer ejemplo, podemos ver cómo leer un código de barras utilizando sólo una línea de código.
Code128 Imagen de Código de Barras para ser Escaneada con C#
Podemos obtener el valor, la imagen, el tipo de codificación y los datos binarios del código de barras (en su caso) y luego enviarlo a la consola.
using IronBarCode;
using System;
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result !=null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
Console.WriteLine("GetStarted was a success. Read Value: " + Result.Text);
}
using IronBarCode;
using System;
BarcodeResult Result = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png");
if (Result !=null && Result.Text == "https://ironsoftware.com/csharp/barcode/")
{
Console.WriteLine("GetStarted was a success. Read Value: " + Result.Text);
}
Imports IronBarCode
Imports System
Private Result As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("GetStarted.png")
If Result IsNot Nothing AndAlso Result.Text = "https://ironsoftware.com/csharp/barcode/" Then
Console.WriteLine("GetStarted was a success. Read Value: " & Result.Text)
End If
Vamos a ver cómo leer un documento PDF escaneado y encontrar todos los códigos de barras unidimensionales en unas pocas líneas de código.
Como puede ver, es muy similar a leer un solo código de barras de un solo documento, salvo que ahora sabemos en qué número de página se descubrió el código de barras.
using IronBarCode;
using System;
using System.Drawing;
// Se pueden escanear varios códigos de barras a partir de un único documento o imagen. También puede utilizarse un documento PDF como imagen de entrada.
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Trabajar con los resultados
foreach (var PageResult in PDFResults)
{
string Value = PageResult.Value;
int PageNum = PageResult.PageNumber;
System.Drawing.Bitmap Img = PageResult.BarcodeImage;
BarcodeEncoding BarcodeType = PageResult.BarcodeType;
byte [] Binary = PageResult.BinaryValue;
Console.WriteLine(PageResult.Value+" on page "+ PageNum);
}
using IronBarCode;
using System;
using System.Drawing;
// Se pueden escanear varios códigos de barras a partir de un único documento o imagen. También puede utilizarse un documento PDF como imagen de entrada.
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Trabajar con los resultados
foreach (var PageResult in PDFResults)
{
string Value = PageResult.Value;
int PageNum = PageResult.PageNumber;
System.Drawing.Bitmap Img = PageResult.BarcodeImage;
BarcodeEncoding BarcodeType = PageResult.BarcodeType;
byte [] Binary = PageResult.BinaryValue;
Console.WriteLine(PageResult.Value+" on page "+ PageNum);
}
Imports IronBarCode
Imports System
Imports System.Drawing
' Se pueden escanear varios códigos de barras a partir de un único documento o imagen. También puede utilizarse un documento PDF como imagen de entrada.
Private PDFResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf")
' Trabajar con los resultados
For Each PageResult In PDFResults
Dim Value As String = PageResult.Value
Dim PageNum As Integer = PageResult.PageNumber
Dim Img As System.Drawing.Bitmap = PageResult.BarcodeImage
Dim BarcodeType As BarcodeEncoding = PageResult.BarcodeType
Dim Binary() As Byte = PageResult.BinaryValue
Console.WriteLine(PageResult.Value &" on page " & PageNum)
Next PageResult
Obtendrá un resultado de datos con todos los códigos de barras bitmap en el PDF.
Lectura de códigos de barras almacenados en PDF Resultados
// También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
//...
}
// También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
//...
}
' También se pueden escanear imágenes TIFF y GIF de varios fotogramas, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
Dim MultiFrameResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels)
For Each PageResult In MultiFrameResults
'...
Next PageResult
Lectura de códigos de barras de una imagen TIFF de varios fotogramas
El siguiente ejemplo muestra cómo leer códigos QR y códigos de barras PDF-417 a partir de un PDF escaneado. Hemos establecido un nivel adecuado de corrección de la rotación del código de barras y de corrección de la imagen del código de barras para limpiar ligeramente el documento sin incurrir en una penalización significativa del rendimiento por sobredimensionar nuestras necesidades.
// También se pueden escanear documentos PDF, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Trabajar con los resultados
foreach (var PageResult in ScanResults)
{
string Value = PageResult.Value;
///...
}
// También se pueden escanear documentos PDF, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Trabajar con los resultados
foreach (var PageResult in ScanResults)
{
string Value = PageResult.Value;
///...
}
' También se pueden escanear documentos PDF, y se utilizarán varios subprocesos automáticamente en segundo plano para mejorar el rendimiento.
Dim ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels)
' Trabajar con los resultados
For Each PageResult In ScanResults
Dim Value As String = PageResult.Value
'''...
Next PageResult
Lectura de códigos de barras de un documento PDF escaneado
El siguiente ejemplo muestra que esta biblioteca de códigos de barras de C# puede incluso leer una miniatura de código de barras dañada.
La corrección del tamaño de la miniatura del código de barras se realiza automáticamente. IronBarcode en C# hace legible un archivo.
Los métodos de lectura detectan automáticamente las imágenes de códigos de barras que son demasiado pequeñas para ser un código de barras legítimo y las escalan. Limpian todo el ruido digital asociado al trabajo con miniaturas, haciéndolas legibles de nuevo.
// IronBarcode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que es posible, incluso si tienen mucho ruido digital.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
// IronBarcode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que es posible, incluso si tienen mucho ruido digital.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
' IronBarcode detecta automáticamente las imágenes de códigos de barras pequeñas o "en miniatura" y las corrige siempre que es posible, incluso si tienen mucho ruido digital.
Dim SmallResult As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128)
Corrección automática del tamaño de las miniaturas de los códigos de barras
En el mundo real, es posible que queramos leer códigos de barras a partir de imágenes imperfectas. Podrían ser imágenes sesgadas o fotografías con ruido digital. Esto sería imposible con la mayoría de las bibliotecas de generación y lectura de códigos de barras .NET de código abierto. IronBarcode, por su parte, facilita la lectura de códigos de barras a partir de imágenes imperfectas.
Ahora veremos el método ReadASingleBarcode
. Con su parámetro RotationCorrection
, IronBarcode intenta desalinear y leer códigos de barras a partir de muestras digitales imperfectas.
using IronBarCode;
using System;
using System.Drawing;
// Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
// * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
// * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
// * BarcodeEncoding e.g. BarcodeEncoding.Code128, Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.
// Ejemplo con una imagen fotográfica
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte [] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);
using IronBarCode;
using System;
using System.Drawing;
// Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
// * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
// * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
// * BarcodeEncoding e.g. BarcodeEncoding.Code128, Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.
// Ejemplo con una imagen fotográfica
var PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels);
string Value = PhotoResult.Value;
System.Drawing.Bitmap Img = PhotoResult.BarcodeImage;
BarcodeEncoding BarcodeType = PhotoResult.BarcodeType;
byte [] Binary = PhotoResult.BinaryValue;
Console.WriteLine(PhotoResult.Value);
Imports IronBarCode
Imports System
Imports System.Drawing
' Todos los métodos BarcodeResult.Read proporcionan al desarrollador el control para corregir la imagen y la fotografía y enderezar la rotación y la perspectiva de las imágenes sesgadas
' * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme des-rota y elimina la perspectiva de las imágenes de código de barras.
' * BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separa los códigos de barras de las imágenes de fondo y del ruido digital.
' * BarcodeEncoding e.g. BarcodeEncoding.Code128, Establecer un formato específico de código de barras mejora la velocidad y reduce el riesgo de falsos positivos.
' Ejemplo con una imagen fotográfica
Private PhotoResult = BarcodeReader.ReadASingleBarcode("Photo.png", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.Medium, BarcodeReader.BarcodeImageCorrection.DeepCleanPixels)
Private Value As String = PhotoResult.Value
Private Img As System.Drawing.Bitmap = PhotoResult.BarcodeImage
Private BarcodeType As BarcodeEncoding = PhotoResult.BarcodeType
Private Binary() As Byte = PhotoResult.BinaryValue
Console.WriteLine(PhotoResult.Value)
Lectura de un código de barras desde la cámara de un teléfono
IronBarcode también puede leer varios códigos de barras al mismo tiempo. Obtenemos mejores resultados de IronBarcode cuando creamos una lista de documentos y utilizamos el lector de códigos de barras para leer numerosos documentos. El método ReadBarcodesMultithreaded
para el proceso de escaneo de códigos de barras utiliza múltiples hilos y potencialmente todos los núcleos de su CPU y puede ser exponencialmente más rápido que la lectura de códigos de barras de uno en uno.
// El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs. Todos los hilos son gestionados automáticamente por IronBarcode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Trabajar con los resultados
foreach (var Result in BatchResults)
{
string Value = Result.Value;
//...
}
// El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs. Todos los hilos son gestionados automáticamente por IronBarcode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Trabajar con los resultados
foreach (var Result in BatchResults)
{
string Value = Result.Value;
//...
}
' El método BarcodeResult.ReadBarcodesMultiThreaded permite escanear más rápidamente códigos de barras de múltiples imágenes o PDFs. Todos los hilos son gestionados automáticamente por IronBarcode.
Dim ListOfDocuments = { "Image1.png", "image2.JPG", "image3.pdf" }
Dim BatchResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments)
' Trabajar con los resultados
For Each Result In BatchResults
Dim Value As String = Result.Value
'...
Next Result
Para leer los archivos de código QR, añada un método de acción ViewFile
a su controlador, como se muestra a continuación.
public ActionResult ViewFile()
{
List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> data;
string [] files = Directory.GetFiles(Server.MapPath("~/qrr"));
foreach (string file in files)
{
// crear una instancia de lector de código de barras
IBarcodeReader reader = new BarcodeReader();
// cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
// hacer algo con el resultado
data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
fileData.Add(data);
}
return View(fileData);
}
public ActionResult ViewFile()
{
List<KeyValuePair<string, string>> fileData = new List<KeyValuePair<string, string>>();
KeyValuePair<string, string> data;
string [] files = Directory.GetFiles(Server.MapPath("~/qrr"));
foreach (string file in files)
{
// crear una instancia de lector de código de barras
IBarcodeReader reader = new BarcodeReader();
// cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
// hacer algo con el resultado
data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
fileData.Add(data);
}
return View(fileData);
}
Public Function ViewFile() As ActionResult
Dim fileData As New List(Of KeyValuePair(Of String, String))()
Dim data As KeyValuePair(Of String, String)
Dim files() As String = Directory.GetFiles(Server.MapPath("~/qrr"))
For Each file As String In files
' crear una instancia de lector de código de barras
Dim reader As IBarcodeReader = New BarcodeReader()
' cargar un mapa de bits
Dim barcodeBitmap = CType(Image.FromFile(Server.MapPath("~/qrr") & "/" & Path.GetFileName(file)), Bitmap)
' detectar y descodificar el código de barras dentro del mapa de bits
Dim result = reader.Decode(barcodeBitmap)
' hacer algo con el resultado
data = New KeyValuePair(Of String, String)(result.ToString(), "/QR/" & Path.GetFileName(file))
fileData.Add(data)
Next file
Return View(fileData)
End Function
Lectura y descodificación de códigos QR
Código QR descodificado
// crear una instancia de lector de código de barras
BarcodeReader reader = new BarcodeReader();
// cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
// detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
// hacer algo con el resultado
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}
// crear una instancia de lector de código de barras
BarcodeReader reader = new BarcodeReader();
// cargar un mapa de bits
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
// detectar y descodificar el código de barras dentro del mapa de bits
var result = reader.Decode(barcodeBitmap);
// hacer algo con el resultado
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}
' crear una instancia de lector de código de barras
Dim reader As New BarcodeReader()
' cargar un mapa de bits
Dim barcodeBitmap = CType(Image.LoadFrom("C:\sample-barcode-image.png"), Bitmap)
' detectar y descodificar el código de barras dentro del mapa de bits
Dim result = reader.Decode(barcodeBitmap)
' hacer algo con el resultado
If result IsNot Nothing Then
txtDecoderType.Text = result.BarcodeFormat.ToString()
txtDecoderContent.Text = result.Text
End If
ZXing Decoder Online es un escáner de códigos de barras y códigos QR disponible en línea que admite descodificación. Sube un PNG u otro formato de la imagen del código QR, y comenzará la decodificación. Del mismo modo, puede generar un código QR para cualquier dato. La mayoría de las veces, esa información será una URL o un texto que quieras codificar en un código QR.
Navega hasta el sitio web de ZXing Decoder.
Sitio web del descodificador ZXing
ZXing Decode Resultado
La biblioteca ZXing.NET es una biblioteca gratuita de código abierto que permite crear aplicaciones de lectura de códigos de barras, pero está basada en una licencia Apache que no permite su uso libre con fines comerciales.
Se ofrece gratuitamente una licencia de desarrollador para IronBarcode. IronBarcode tiene un esquema de precios único: el paquete Lite comienza en $599 sin costes adicionales. Los artículos SaaS y OEM también pueden distribuirse de nuevo. Cada licencia incluye una licencia perpetua, validez dev/staging/production, una garantía de devolución del dinero de 30 días y un año de soporte y actualizaciones del software. (compra única). Visita esta página página para ver la información completa sobre precios y licencias de IronBarcode.
IronBarcode incluye una API fácil de usar para que los desarrolladores lean y escriban códigos de barras en .NET, lo que optimiza la precisión y una baja tasa de errores en casos de uso en el mundo real.
La clase BarcodeWriter
, por ejemplo, validará y corregirá las sumas de comprobación
de los códigos de barras UPCA y UPCE. También pondrá a cero los números demasiado cortos para introducirlos en un formato numérico específico. Si sus datos son incompatibles con el formato de datos especificado, IronBarcode notificará al desarrollador un formato de código de barras más adecuado que pueda utilizar.
IronBarcode destaca en la lectura de códigos de barras cuando el código de barras ha sido escaneado o leído a partir de una imagen fotográfica, en otras palabras, cuando la imagen no es perfecta gráficamente y no es una captura de pantalla generada por una máquina.
IronBarcode se ha creado a partir de ZXing.NET (Paso de cebra) núcleo, con capacidad de procesamiento mejorada. Viene con una API fácil de usar y una baja tasa de errores en comparación con la biblioteca central ZXing.NET. No sólo eso, sino que IronBarcode también admite una gama más amplia de formatos de códigos de barras que la que admite la biblioteca habitual ZXing.NET.
IronBarcode es una versión más mejorada de ZXing.NET, que ofrece al usuario la plataforma para uso comercial y la posibilidad de utilizar el mismo paquete en múltiples plataformas. Además, cuenta con un completo servicio de asistencia técnica, siempre dispuesto a ayudarte cuando lo necesites.
IronBarcode incluye rotación automática, corrección de la perspectiva y corrección digital del ruido, y puede detectar el tipo de código de barras codificado en una imagen.
En conclusión, IronBarcode es una versátil biblioteca de software .NET y generador de códigos QR C# para leer una amplia gama de formatos de códigos de barras, ya sean capturas de pantalla, fotografías, escaneos u otras imágenes imperfectas del mundo real.
IronBarcode es una de las bibliotecas más eficaces para crear e identificar códigos de barras. En cuanto a la creación e identificación de códigos de barras, también se encuentra entre las bibliotecas más rápidas. Diferentes sistemas operativos son compatibles con la biblioteca. Es fácil de diseñar y admite una amplia gama de formatos de códigos de barras. Además, se admiten varios símbolos, formatos y caracteres.
ZXing.NET barcode es una potente librería que genera y reconoce códigos de barras en varios formatos de imagen. Podemos leer y crear imágenes en diversos formatos. ZXing.NET también le permite cambiar la apariencia de un código de barras, alterando su altura, anchura, texto del código de barras, etc.
En comparación con ZXing.NET, los paquetes IronBarcode ofrecen una licencia y un soporte fiables. IronBarcode cuesta $599. Aunque ZXing es gratuito, no ofrece ninguna posibilidad de uso comercial y además carece de soporte técnico. Además de ser más flexible que ZXing.NET, la solución IronBarcode también tiene más funcionalidades. Por lo tanto, es evidente que IronBarcode tiene una gran ventaja sobre ZXing.NET.
Al comparar los tiempos de procesamiento para reconocer y generar códigos de barras, IronBarcode supera a ZXing.NET. IronBarcode también tiene varias propiedades que nos permiten leer códigos de barras de diferentes formatos de imagen y documentos PDF. También nos permite incluir imágenes dentro del código de barras o QR, lo que no está disponible en ninguna otra biblioteca.
IronBarcode es gratuito para las primeras fases de desarrollo. Puede adquirir un prueba gratuita para nivel de producción o uso comercial. En función de las necesidades del desarrollador, IronBarcode ofrece tres niveles de precios. Puede elegir la solución que mejor satisfaga sus exigencias. Ahora puede obtener un paquete de cinco productos de Iron Software por el precio de dos artículos de Iron Software. Visita esta página sitio web para más información.
9 productos API .NET para sus documentos de oficina