Ir al contenido principal

Generar códigos QR en Java

QR con Java

Los códigos QR cada vez son más populares, su cantidad de información (desde 1,817 hasta 7,089 caracteres)y la facilidad para difundirla es algo que simplemente ha cautivado a las empresas e incluso a los particulares. En vista de lo anterior, me he tomado la libertad de escribir 3 artículos sobre la generación e interpretación de códigos QR en Java utilizando NetBeans como entorno de desarrollo. Comencemos con el primero.

:: Obtener las librerías necesarias

En este primer tutorial vamos a utilizar la librería BarCode. Esta librería es utilizada por reporteadores (como iReport) para generar códigos de diversos tipos y algoritmos, en este caso la utilizaremos para generar el código QR.

Aquí el link para descargar la librería:

http://www.barcodelib.com/java_barcode/download.php

Nota: Cabe mencionar que es una librería de prueba lo cual conlleva a que aleatoriamente nuestros códigos generados incluyan la leyenda 'Trial' en color rojo.

:: Crear el proyecto en NetBeans

Creamos un proyecto nuevo en NetBeans con el nombre de QRGenerator, y una vez creado incluimos la librería barcode.jar (descargada en el paso previo) como biblioteca de nuestro proyecto dando clic derecho en Biblioteca > Agregar Archivo Jar / Carpeta y seleccionándola desde la ubicación de su descarga.

:: Definir el comportamiento

Lo primero que vamos a realizar es agregar algunas variables a nivel de clase con el fin de establecer los parámetros con los cuales esteremos creando las imágenes que contendrán los códigos QR. Para esto iremos a nuestra clase principal (generada por el IDE) y trabajaremos con ella.

Debido a que estaremos ejecutando todo el código dentro del método main es necesario que las variables sea estáticas.

        private static int udm = 0;
    private static int resolucion = 72;
    private static float margenIzq = 0.000f;
    private static float margenDer = 0.000f;
    private static float margenSup = 0.000f;
    private static float margenInf = 0.000f;
    private static int rotacion = 0;
    private static float tamanoModulo = 5.000f;

   
    + La variable uom contendrá la unidad de medida que utilizaremos, 0 para pixeles, 1 para centímetros y 2 para pulgadas.
    + resolucion contiene la resolución de la imagen en pixeles.
    + Las variables margenIzq, margenDer, margenSup y margenInf contienen el tamaño del margen blanco que rodeará al código QR, en este caso 0.
    + rotacion indica la cantidad en grados a rotar la imagen.
    + tamanoModulo indica el tamaño de la imagen.
   
Una vez que hemos creado y dado un valor a los parámetros agregaremos dentro del método main una nueva instancia de la clase QRCode de la siguiente manera:

    QRCode codigoQR = new QRCode();
   
    + Al realizar lo anterior debemos importar la clase com.barcodelib.barcode.QRCode.
   
Posteriormente agregaremos en forma de cadena la información que deseamos que se incluya dentro del código QR por medio del método setData()...

   codigoQR.setData("http://monillo007.blogspot.com");
   
Una vez hecho esto indicamos el tipo de información que vamos a manejar con el método setDataMode()...

    codigoQR.setDataMode(QRCode.MODE_BYTE);
   
    + Existen MODE_BYTE (para bytes), MODE_NUMERIC (para números), MODE_ALPHANUMERIC (para números y caracteres variados), MODE_AUTO (automático), MODE_KANJI (alfabeto kanji) y MODE_CUSTOMER (definido por el usuario), en mi caso estuve probando con todos y el único que no me generó correctamente el código fue MODE_ALPHANUMERIC por lo que no recomiendo utilizarlo (más info en la web del autor).
   
Posteriormente indicamos al objeto los parámetros con los cuales va a trabajar...

        codigoQR.setUOM(udm);
    codigoQR.setLeftMargin(margenIzq);
    codigoQR.setResolution(resolucion);
    codigoQR.setRightMargin(margenDer);
    codigoQR.setTopMargin(margenSup);
    codigoQR.setBottomMargin(margenInf);
    codigoQR.setRotate(rotacion);
    codigoQR.setModuleSize(tamanoModulo);
   
Después generamos el archivo de imagen en el disco duro con la siguiente instrucción:

    String archivo = System.getProperty("user.home") + "/qrcodeDemo.gif";
 
codigoQR.renderBarcode(archivo);
   
    + El método renderBarcode() nos permite generar el código en una imagen en este caso dentro del directorio del usuario actual y bajo el nombre de qrcodeDemo.gif.
   
Por último utilizamos la clase Desktop para ver la imagen con el visor de imágenes predeterminado del sistema...

    Desktop d = Desktop.getDesktop();
  d.open(new File(archivo));
   
    + Más información sobre el uso de la clase Desktop aquí.

Para que el código anterior funcione debemos encerrarlo dentro de un try-catch.

Si ejecutamos nuestra aplicación tras realizar los pasos anteriores estaremos generando el código QR dentro de una imagen, para validarlo puedes utilizar alguno de los múltiples servicios web que existen actualmente y/o estar al pendiente de mi siguiente artículo sobre la interpretación / decodificación de códigos QR en Java.

Como siempre, puedes descargar las librerías y código necesario para realizar lo explicado en este tutorial desde el siguiente vínculo.

http://min.us/lfL5IkVSxefxP

La contraseña para descomprimir el archivo es: http://monillo007.blogspot.com

Si el artículo te fue de utilidad puedes compartirlo por medio de Twitter, Facebook o Google+ (botones superiores e inferiores del post), lo cual te agradecería.

Si tienes alguna duda o algo que decir te invito a que dejes tu comentario. Saludox.

Comentarios

  1. Hola,
    Muy bueno tu aporte. Gracias, pero muchas gracias; pero te hago una pregunta sobre la librería... como la instalas??

    ResponderBorrar
  2. Muy buen post!!!
    Sabrás cuando publicarás tu nuevo artículo de "decodificación de códigos QR en Java" ???

    ResponderBorrar
  3. Qué tal!

    1. La librería no se instala, solo se coloca dentro del classpath de Java y listo, la puedes utilizar.
    2. La próxima semana publicaré con respecto a la decodificación.

    Saludox!

    ResponderBorrar
  4. muy buena publicacion Bro', disculpa tengo una pregunta lo que pasa es que no entendi bien esta linea del codigo
    String archivo = System.getProperty("user.home") + "/qrcodeDemo.gif";

    en la parte que dice ("user.home") que es lo que va? o lo dejo asi no mas ?
    y en esta parte .. "/qrcodeDemo.gif"; esa imagen no entendi bien cual era su desempeño o donde lo guardo ? bueno te agradeceria mucho que me ayudaras con mis dudas. GRASIAS DE ANTEMANO
    te dejo aqui mi correo por si me lo puedes responder
    renzo_406_6@hotmail.com

    ResponderBorrar
  5. Qué tal,

    System.getProperty("user.home") lo dejas tal cual, lo que hace es obtener la ruta de la carpeta del usuario dentro del sistema operativo, al concatenarle /qrcodeDemo.gif estás indicando que vas a crear una imagen d nombre qrcodeDemo.gif dentro de la carpeta del usuario.

    Espero haberme explicado.

    ResponderBorrar
  6. gracias, muy interesante el tema y de sencilla implementación, siga así señor monillo, suerte y bendiciones!

    ResponderBorrar
  7. Tengo un error, crashea en:

    Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGImageEncoder
    at com.barcodelib.barcode.QRCode.a(QRCode.java)
    at com.barcodelib.barcode.AbstractBarcode.renderBarcode(AbstractBarcode.java)
    at qr.QR.main(QR.java:28)

    Saludos

    ResponderBorrar
  8. Esa manera de leer el código QR es cuando ya tienes la imagen en una ruta específica pero como haces si quieres leer usando tu camara web o algún tipo de lector?

    ResponderBorrar
  9. buen aporte y de mucha ayuda, tengo una duda... como puedo hacer, para que en vez de que se muestre en el visualizador de imágenes de tu S.O, se pueda mostrar en un jlabel dentro del mismo Frame.

    anticipadamente muchas gracias, Saludos.

    ResponderBorrar
  10. Muy buen aporte. Saludos!!!

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.