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".
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; // width of the QR Code
var height = 250; // height of the QR Code
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);
// creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with 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
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// save to folder
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// save to stream as 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; // width of the QR Code
var height = 250; // height of the QR Code
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);
// creating a PNG bitmap from the raw pixel data; if only black and white colors are used it makes no difference if the raw pixel data is BGRA oriented and the bitmap is initialized with 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
{
// we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan, pixelData.Pixels.Length);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
// save to folder
string fileGuid = Guid.NewGuid().ToString().Substring(0, 4);
bitmap.Save(Server.MapPath("~/qrr") + "/file-" + fileGuid + ".png", System.Drawing.Imaging.ImageFormat.Png);
// save to stream as PNG
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
byteArray = ms.ToArray();
}
}
return View(byteArray);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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>
// text box to enter text...
<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>
// img tag to display generated QR code...
<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>
// text box to enter text...
<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>
// img tag to display generated QR code...
<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'.
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();
// Binary barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
// Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and 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();
// Binary barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
using (System.IO.Stream PdfStream = MyBarCode.ToPdfStream()){
// Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and 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()
' Binary barcode image output also works for GIF, JPEG, PDF, PNG, BMP and TIFF
Using PdfStream As System.IO.Stream = MyBarCode.ToPdfStream()
' Stream barcode image output also works for GIF, JPEG, PDF, PNG, BMP and 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.
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.
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
// Generate a simple QR Code image and save as PNG
QRCodeWriter.CreateQrCode("hello world", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium).SaveAsPng("MyQR.png");
' Generate a simple QR Code image and save as 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.
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!
// Generate a simple BarCode image and save as PNG using following namespaces
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// This line opens the image in your default image viewer
System.Diagnostics.Process.Start("MyBarCode.png");
// Generate a simple BarCode image and save as PNG using following namespaces
using IronBarCode;
GeneratedBarcode MyBarCode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128);
MyBarCode.SaveAsPng("MyBarCode.png");
// This line opens the image in your default image viewer
System.Diagnostics.Process.Start("MyBarCode.png");
' Generate a simple BarCode image and save as PNG using following namespaces
Imports IronBarCode
Private MyBarCode As GeneratedBarcode = IronBarcode.BarcodeWriter.CreateBarcode("https://ironsoftware.com/csharp/barcode", BarcodeWriterEncoding.Code128)
MyBarCode.SaveAsPng("MyBarCode.png")
' This line opens the image in your default image viewer
System.Diagnostics.Process.Start("MyBarCode.png")
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
.
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
' Adding a Logo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
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.
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
// Adding a Logo
var MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500);
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen);
//Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf");
//Also Save as HTML
MyQRWithLogo.SaveAsHtmlFile("MyQRWithLogo.html");
' Adding a Logo
Dim MyQRWithLogo = QRCodeWriter.CreateQrCodeWithLogo("https://ironsoftware.com/csharp/barcode/", "visual-studio-logo.png", 500)
MyQRWithLogo.ChangeBarCodeColor(System.Drawing.Color.DarkGreen)
'Save as PDF
MyQRWithLogo.SaveAsPdf("MyQRWithLogo.pdf")
'Also Save as 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;
// Fluent API for Barcode image generation.
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;
// Fluent API for Barcode image generation.
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
' Fluent API for Barcode image generation.
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:
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.
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;
// Multiple barcodes may be scanned up from a single document or image. A PDF document may also be used as the input image
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Work with the results
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;
// Multiple barcodes may be scanned up from a single document or image. A PDF document may also be used as the input image
PagedBarcodeResult [] PDFResults = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf");
// Work with the results
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
' Multiple barcodes may be scanned up from a single document or image. A PDF document may also be used as the input image
Private PDFResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromPdf("MultipleBarcodes.pdf")
' Work with the results
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.
// Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
//...
}
// Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
PagedBarcodeResult [] MultiFrameResults = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels);
foreach (var PageResult in MultiFrameResults)
{
//...
}
' Multi-frame TIFF and GIF images can also be scanned, and multiple threads will be used automatically in the background for improved performance
Dim MultiFrameResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesFromMultiFrameTiff("Multiframe.tiff", BarcodeEncoding.Code128, BarcodeReader.BarcodeRotationCorrection.High, BarcodeReader.BarcodeImageCorrection.MediumCleanPixels)
For Each PageResult In MultiFrameResults
'...
Next PageResult
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.
// PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Work with the results
foreach (var PageResult in ScanResults)
{
string Value = PageResult.Value;
///...
}
// PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
var ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels);
// Work with the results
foreach (var PageResult in ScanResults)
{
string Value = PageResult.Value;
///...
}
' PDF documents can also be scanned, and multiple threads will be used automatically in the background for improved performance
Dim ScanResults = BarcodeReader.ReadBarcodesFromPdf("Scan.pdf", BarcodeEncoding.All, BarcodeReader.BarcodeRotationCorrection.Low, BarcodeReader.BarcodeImageCorrection.LightlyCleanPixels)
' Work with the results
For Each PageResult In ScanResults
Dim Value As String = PageResult.Value
'''...
Next PageResult
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.
// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
// Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
BarcodeResult SmallResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128);
' Small or 'Thumbnail' barcode images are automatically detected by IronBarcode and corrected wherever possible even if they have much digital noise.
Dim SmallResult As BarcodeResult = BarcodeReader.QuicklyReadOneBarcode("ThumbnailOfBarcode.gif", BarcodeEncoding.Code128)
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;
// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme un-rotates and removes perspective from barcode images.
// * ImageCorrection e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separates barcodes from background imagery and digital noise.
// * BarcodeEncoding e.g. BarcodeEncoding.Code128, Setting a specific Barcode format improves speed and reduces the risk of false positive results
// Example with a photo image
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;
// All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
// * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme un-rotates and removes perspective from barcode images.
// * ImageCorrection e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separates barcodes from background imagery and digital noise.
// * BarcodeEncoding e.g. BarcodeEncoding.Code128, Setting a specific Barcode format improves speed and reduces the risk of false positive results
// Example with a photo image
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
' All BarcodeResult.Read methods provide the developer with control to correct image and photograph correction and straightening rotation and perspective from skewed images
' * RotationCorrection e.g BarcodeReader.BarcodeRotationCorrection.Extreme un-rotates and removes perspective from barcode images.
' * ImageCorrection e.g BarcodeReader.BarcodeImageCorrection.DeepCleanPixels separates barcodes from background imagery and digital noise.
' * BarcodeEncoding e.g. BarcodeEncoding.Code128, Setting a specific Barcode format improves speed and reduces the risk of false positive results
' Example with a photo image
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)
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.
// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Work with the results
foreach (var Result in BatchResults)
{
string Value = Result.Value;
//...
}
// The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
var ListOfDocuments = new [] { "Image1.png", "image2.JPG", "image3.pdf" };
PagedBarcodeResult [] BatchResults = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments);
// Work with the results
foreach (var Result in BatchResults)
{
string Value = Result.Value;
//...
}
' The BarcodeResult.ReadBarcodesMultiThreaded method allows for faster barcode scanning of multiple images or PDFs. All threads are automatically managed by IronBarcode.
Dim ListOfDocuments = { "Image1.png", "image2.JPG", "image3.pdf" }
Dim BatchResults() As PagedBarcodeResult = BarcodeReader.ReadBarcodesMultiThreaded(ListOfDocuments)
' Work with the results
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)
{
// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// do something with the result
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)
{
// create a barcode reader instance
IBarcodeReader reader = new BarcodeReader();
// load a bitmap
var barcodeBitmap = (Bitmap)Image.FromFile(Server.MapPath("~/qrr") + "/" + Path.GetFileName(file));
// detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// do something with the result
data = new KeyValuePair<string, string>(result.ToString(), "/QR/" + Path.GetFileName(file));
fileData.Add(data);
}
return View(fileData);
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
// create a barcode reader instance
BarcodeReader reader = new BarcodeReader();
// load a bitmap
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
// detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// do something with the result
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}
// create a barcode reader instance
BarcodeReader reader = new BarcodeReader();
// load a bitmap
var barcodeBitmap = (Bitmap)Image.LoadFrom("C:\\sample-barcode-image.png");
// detect and decode the barcode inside the bitmap
var result = reader.Decode(barcodeBitmap);
// do something with the result
if (result != null)
{
txtDecoderType.Text = result.BarcodeFormat.ToString();
txtDecoderContent.Text = result.Text;
}
' create a barcode reader instance
Dim reader As New BarcodeReader()
' load a bitmap
Dim barcodeBitmap = CType(Image.LoadFrom("C:\sample-barcode-image.png"), Bitmap)
' detect and decode the barcode inside the bitmap
Dim result = reader.Decode(barcodeBitmap)
' do something with the result
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.
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