驴Qu茅 es un c贸digo de barras?

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.

C贸digo de barras de mirpas.com

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.

descargar librer铆a para poder usarla en tu proyecto

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.

Codigo de barcode en formato C#

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).

Agregar recurso al proyecto vb.net

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.

Agregar nueva clase al proyecto actual

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铆:

Primera versi贸n del generador de codebar. Por mirpas.com

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:

Efecto de no concatenar el inicio y final en el code 128

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.

Cambio de objeto para poder introducir letras en el barcode

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:

Cambio de objeto para poder introducir letras en el barcode

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.