El código de barras es un código basado en la representación de un conjunto de líneas paralelas de distinto grosor y espaciado que en su conjunto contienen una determinada información, es decir, las barras y espacios del código representan pequeñas cadenas de carácteres. De este modo, el código de barras permite reconocer rápidamente un artículo de forma única, global y no ambigua en un punto de la cadena logística y así poder realizar inventario o consultar sus características asociadas.
Nomenclatura.El código de barras habitual tiene una nomenclatura dividida en bloques como los que indico a continuación:
● Módulo. Es la unidad mínima o básica de un código. Las barras y espacios están formados por un conjunto de módulos.
● Barra. El elemento oscuro dentro del código. Se hace corresponder con el valor binario 1.
● Espacio. El elemento claro dentro del código. Se hace corresponder con el valor binario 0.
● Carácter. Formado por barras y espacios. Normalmente se corresponde con un carácter alfanumérico.
Existen varias codificaciones para la creación de códigos de barras entre los que caben destacar la codificación EAN (Número de Articulo Europeo, en español), la codificación Code 128, que es un códeigo de barras de alta densidad ampliamente usado en logística y paquetería; codificación Code 39, que es capáz de representar números, letras y carácteres especiales (aunque la densidad de las barras sea peor al tener que ocupar más espacio); codificación code 93, que es una mejora del anterior código.
En este tutorial aprenderemos a crear códigos de barras con la codificación de Code 128 que puede codificar carácteres alfanuméricos siempre que se inserte su valor ASCII codificado mediante 11 barras.
Librería itextshap.
Esta librería es una librería para VB.NET y para otras tecnologías que nos permite crear archivos .PDF a raíz de un texto escrito en nuestros formularios. Pero también nos permite agregar y generar barcodes, ya que tiene implementado dicha funcionalidad.
Puedes bajarte la última actualización de esta librería desde el siguiente Enlace.
Cuando habras el archivo comprimido existirán una serie de recursos, librerías y archivos (generalmente estarán en C#), pero te pueden servir como base. El Archivo que nos servirá de base a nosotros será el Barcode128.cs que está dentro del directorio itextsharp-develop\src\core\iTextSharp\text\pdf. Lo puedes abrir desde tu editor favorito.
Pero yo voy a utilizar una versión anterior de esta librería y una .dll específica que te podrás bajar en la zona inferior de éste tutorial y que se llama itextsharp.dll
Dicho fichero .dll lo importaremos a nuestro proyecto y lo referenciaremos en MyProyect (recuerda que era botón de Agregar, buscar el archivo y después Aceptar).
Nueva clase.
Para el proyecto vamos a crear una nueva clase que será la que carguemos desde un botón y que se encargará de realizar toda la funcionalidad para generar nuestro código de barras. En la nueva clase tendremos que importar varias librerías internas de VStudio.NET para poder dibujar el barcode. Recuerda que una vez creado tu proyecto en VB.NET, pulsa sobre el menú PROYECTO y Agregar nueva clase. Yo la llamaré Codigos.vb.
Además necesitamos importar la librería que hemos referenciado desde nuestro proyecto principal, por lo que también importamos las librerías de itextsharp en sus módulos de text y pdf y también el módulo de barcode.
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Imports iTextSharp.text.pdf
Imports iTextSharp.text.pdf.BarcodeCodabar
Dentro de la clase Codigos voy a crear una función pública llamada codigo128 y entre paréntesis crearé tres variables llamadas _code, vertexto y Height y las asignaré a un string, un bolean asignado a False por defecto y un Single asignado a cero, como puedes ver en el código.
Public Shared Function codigo128(ByVal _code As String, Optional ByVal vertexto As Boolean = False, Optional ByVal Height As Single = 0)
End Function
Vamos a crear un objeto de Barcodecodabar para poder usar dicha extensión. Y en dicho objeto usaremos la propiedad StartStopText para indicarle que podemos empezar a usar la librería de itextsharp. Además también haremos que si el valor de la variable Height es superior a cero, nos muestre la altura del objeto específico. Por último hacemos que el objeto creado y la propiedad Code se asignen a la variable _code creada anteriormente en la función como parámetros.
Dim barcode As New BarcodeCodabar
barcode.StartStopText = True
If Height <> 0 Then
barcode.BarHeight = Height
End If
barcode.Code = _code
La propiedad Code convierte el texto del objeto y por eso lo asignamos a la variable _code.
Creando el objeto de barras.
Para la creación del objeto barcode, tenemos que crear una imagen en formato de código de rayas. Para ello tenemos que crear una variable que cargará la librería de System.Drawing.Bitmap, y entre paréntesis debe de llevar dos propiedades. El primero el objeto de origen sobre el cual se va a crear el bitmap; el segundo los colores que va a tener el codebar.
Dim bm As New System.Drawing.Bitmap(barcode.CreateDrawingImage(Color.Black, Color.White))
Ahora el siguiente código es la generación de la imagen en sí desde el archivo bitmap, hasta la generación de la altura del contenido en el control PictureBox que crearemos después en el formulario. También configuraré aquí varias variables para mostrar el texto del CodeBar dentro del PictureBox
Dim bmT As Image
bmT = New Bitmap(bm.Width, bm.Height + 14)
Dim g As Graphics = Graphics.FromImage(bmT)
g.FillRectangle(New SolidBrush(Color.White), 0, 0, bm.Width, bm.Height + 14)
Dim pintarTexto As New Font("Arial", 8)
Dim brocha As New SolidBrush(Color.Black)
Dim stringSize As New SizeF
stringSize = g.MeasureString(_code, pintarTexto)
Dim centrox As Single = (bm.Width - stringSize.Width) / 2
Dim x As Single = centrox
Dim y As Single = bm.Height
Dim drawformat As New StringFormat
drawformat.FormatFlags = StringFormatFlags.NoWrap
g.DrawImage(bm, 0, 0)
Dim ncode As String = _code.Substring(1, _code.Length - 2)
g.DrawString(ncode, pintarTexto, brocha, x, y, drawformat)
Return bmT
Es habitual escribir todo el código anterior dentro de una estructura de control Try para evitar fallos y además tener en cuenta que si se produce una excepción, te avise de qué es lo fallado.
Controles del formulario
Ya hemos creado la clase Codigos.vb. Ahora entraremos al formulario de inicio y vamos a plasmar cinco controles.
● 2 TextBox.
● 1 CheckBox.
●1 Button
●1 PictureBox.
Así quedaría el formulario inicial teniendo en cuenta que también utilizo varias etiquetas Label para describir las acciones y controles. El formulario inicial quedaría así:
El código del formulario es más sencillo, ya que toda la estructura la hemos creado en la clase y ahora el Button será el encargado de generar la imagen según el código escrito en el TextBox1. El TextBox2, servirá para establecer la altura del barcode generado. El código para generar el barcode es el siguiente:
Dim alto As Single = 0
If TextBox2.Text <> "" Then
alto = Convert.ToSingle(TextBox2.Text)
End If
Dim bm As Bitmap = Nothing
bm = Codigos.codigo128("A" & TextBox1.Text & "B", CheckBox1.Checked, alto)
If Not IsNothing(bm) Then
PictureBox1.Image = bm
End If
Como puedes ver en la línea 6 bm = Codigos.codigo128("A" & TextBox1.Text & "B", CheckBox1.Checked, alto)
, establecemos que se introduzcan la letra de inicio A y la letra final B entre el código numérico para que se genere correctamente el barcode, ya que el código requiere que los textos empiecen por la letra A y terminen por la letra B. Por eso se concatenan en esta línea dichas letras para que aparezcan junto al código numérico. Si quitamos dicha concatenación, al introducir el número para generar el barcode, deberiamos de introducir dichos caracteres en el TextBox1 como ves en la imagen:
Ten en cuenta que este programa utiliza una codificación Code 128, por lo que solo podrás introducir números en el control del TextBox. Si lo que quieres es que también te permita introducir carácteres alfabéticos y números, deberás de cambiar la codificación en el objeto de la clase Codigos.vb al objeto tipo Code 128 como ves en la imagen.
Además también, para que no te genere la letra de inicio y final (porque es otro código y no la necesitarás), tendrás que sustituir el contenido de g.DrawString(ncode, pintarTexto, brocha, x, y, drawformat)
por esto otro:
g.DrawString(_code, pintarTexto, brocha, x, y, drawformat)
Y por supuesto en el formulario, el código anterior donde se hace la concatenación de los caracteres de inicio y final, se queda sin la concatenación:
bm = Codigos.codigo128(TextBox1.Text, CheckBox1.Checked, alto)
El resultado es el siguiente:
Bien, hasta aquí has visto como generar un código de barras en una aplicación de VB.NET. Ya te puedes bajar el proyecto en mi directorio GitHub con una serie de modificaciones realizadas para que puedas adaptarlo a tu código fuente.
No olvides compartir, este tutorial y el código fuente.