Crear códigos de barras con iTextSharp desde .NET

Debido al éxito de la anterior entrega (Crear y leer códigos QR desde VB.NET) he decidido publicar este tutorial antes de lo previsto.

Hoy os mostraré como generar los siguientes códigos de barras gracias a la librería iTextSharp y unas pequeñas modificaciones:

El código generado se guarda en un objeto de tipo Bitmap y podrás hacer con él lo que quieras: guardarlo, procesarlo, imprimirlo, usarlo en Crystal Reports,… lo que quieras.

iTextSharp es un port libre y gratuito al .NET Framework de la librería iText para Java.

Originalmente tanto iTextSharp como iText eran librerías para manejar documentos PDF. Sin embargo se han ido añadiendo funcionalidades, entre las cuales está la generación de un porrón de tipos de códigos de barras.

Nota: Hay otra caracteristica muy interesante que veremos en otros tutoriales y es la posibilidad de firmar digitalmente un documento PDF con un certificado emitido por una CA como puede ser VeriSign, la Fábrica Nacional de Moneda y Timbre o incluso mediante el e-DNI.
Cuando se firma digitalmente un documento se asegura que éste es original y que no ha sido modificado. La firma digital es "tremendamente fuerte" y no podrías romperla ni en un trillón de años. Por algo se usa en organismos oficiales tales como Hacienda, departamentos de justicia, militares, transferencias bancarias, etc.

Pero vamos, que me estoy enrollando y eso lo dejaremos para otro día 🙂

Bueno, al lío.

Como ya hemos dicho iTextSharp está pensada para trabjar con documentos PDF. Esto supone un "pequeño" inconveniente, ya que habrá caracterísiticas que tendremos que hacer a "mano" si lo que queremos es tener un objeto Bitmap (System.Drawing.Bitmap).
La principal es la de mostrar el propio código debajo del código de barras.
También necesitaremos modificar ligeramente el código de barras para los códigos tipo EAN13 como ya veréis más adelante.
Por último también se ha implementado la propiedad de "escalar" los códigos PDF417 y Data matrix para hacerlos más grandes.

Para ello hemos creado una clase llamada BarCode que realizará todas estas tareas de forma transparente

Nota: Los distintos tipos de códigos de barras tienen una serie de reglas y/o limitaciones. Así por ejemplo, los códigos de tipo codabar tienen que empezar por A,B,C o E, no contener letras y terminar por A,B,C o E.
Los códigos EAN13 tiene que tener 12 o 13 números y no pueden contener letras, los Code39 tampoco pueden tener letras, etc. 

A continuación mostraremos unos cuantos ejemplos del resultado de este tutorial.

Codabar 

La llamada es algo como esto:

Dim bm As Bitmap = BarCode.CodeCodABAR("A123456789012+B",True,50)

El primer parámertro es el código que queremos generar, el segundo parámetro indica que se va a visualizar el código debajo "de las barras" y el último indica la altura de las barras.
Podéis observar que en la representación del código no se incluye el primer carácter "A" ni el último "B" ya que estos son internos para construir el código.

EAN13

Para el código EAN13 (European Article Number 13) tenemos dos funciones:

  • BarCode.CodeEAN13("5901234123457", True, 60)
  • BarCode.CodeEAN13AutoGenerateChecksum("590123412345", True, 60)

Los códigos EAN13 tienen un total de 13 dígitos (y solo dígitos, no letras)

Para el código:

5901234123457

El 7 representa que el el checksum de los 12 primeros dígitos.
La función CodeEAN13 representará un código de 13 cifras, sin comprobar el checksum. Lo que se le envía es lo que se genera.
Sin embargo a la función CodeEAN13AutoGenerateChecksum se le pasarán 12 dígitos. La función calcula el checksum correcto y lo incluye en el código.

En los códigos EAN13 también podéis observar que el código tiene barras más largas que otras y que hay como dos zonas. De todo esto ya se encarga la clase BarCode.

Code39  

La llamada es algo así:

Dim bm As Bitmap = BarCode.Code39("12345678901234567890", True)

Al Code 39 internamente ya se añaden los carácteres "*" (asterisco) tanto al principio como al final

Como podéis observar, el parámetro de la altura es opcional y en este caso no se ha usado

Code128   

El Code 128 admite tanto letras como números. En esta demo se han incluído 3 tipos de code 128.

La llamada es similar que en los casos anteriores:

bm = BarCode.Code128("hola", iType, True, 50)

Donde iType representa uno de los 3 tipos de code 128

PDF417    

En este caso nos encontramos con un código "2D" donde se puede almacenar gran cantidad de información (algo parecido a los QR Codes que vimos en la entrega anterior)

La llamada es así:

Dim bm As Bitmap = BarCode.PDF417("Hola mundo")

Si queremos "escalar" el tamaño cuatro veces del generado por la librería iTextSharp:

Dim bm As Bitmap = BarCode.PDF417("Hola mundo", 4

Data matrix

Aquí también nos encontramos con un código "2D".

La llamada es así:

Dim bm As Bitmap = BarCode.DataMatrix("Hola mundo")

Si usamos un escalado como por ejemplo:

Dim bm As Bitmap = BarCode.DataMatrix("Hola mundo", 4

Obtenemos lo siguiente:

Por  último algunos links interesantes:

Generador online de diversos códigos 1-D: http://www.bcgen.com/linear-barcode-creator.html

Generador online de PDF417: http://www.bcgen.com/pdf417-barcode-creator.html

Generador online de Data matrix: http://www.bcgen.com/datamatrix-barcode-creator.html

Decodificador online de Data matrix: http://www.2dtg.com/decode.html

Decodificador online de PDF417: http://www.turbulence.org/Works/swipe/barcode_app.html

 

 

 

Saludos.
mov eax,ollydbg; Int 13h 

 

Descargar código fuente del iTextSharpCodigosBarras
(25 KB. Visual Studio 2008)


Ollydbg ProSignature