Codigo QR en Jsp tomcat




Este documento esta enteramente basado en el documento publicado por
Gustavo Peiretti ,http://gustavopeiretti.com/java-generar-codigo-qr/ con algunos ajustes para adaptarlo a JSP de Tomcat.


Lo primero es conseguir los JAR necesarios pues todo el proceso esta basado en las librerías de ZXing

zxing-1.7-javase.jar
zxing-2.0-core.jar
zxing-2.1.jar


Descargadas desde :

http://www.java2s.com/Code/Jar/z/Downloadzxingjavasejar.htm
http://www.java2s.com/Code/Jar/z/Downloadzxing20corejar.htm
http://www.java2s.com/Code/Jar/z/Downloadzxing21jar.htm


Las cuales deben ser copiadas en la carpeta /lib de su distribución Tomcat.

Crear una carpeta donde guardar la imagen en un directorio que pueda ser localizado por su procedimiento JSP.


Insertamos los llamados  a las librerias que son necesarias desde nuestro
procedimiento JSP


//*****************************************************************************


 <%@ page language="java"
    session="true"
    import ="java.io.*"
    import ="java.sql.*"
    import ="java.net.*"
    import ="java.util.*"

     import = "com.google.zxing.BinaryBitmap"
    import = "com.google.zxing.LuminanceSource"
    import = "com.google.zxing.Result"
    import = "com.google.zxing.client.j2se.BufferedImageLuminanceSource"
    import = "com.google.zxing.common.BitMatrix"
    import = "com.google.zxing.common.HybridBinarizer"
    import = "com.google.zxing.qrcode.QRCodeReader"
    import = "com.google.zxing.qrcode.QRCodeWriter"

    import = "javax.imageio.ImageIO"
    import = "java.awt.*"
    import = "java.awt.image.BufferedImage"
    import = "java.io.File"
    import = "java.io.FileInputStream"

%>

// Insertamos el código que genera la imagen QR

 <%!
    public final synchronized File generarCodigoQR(String gDescripcion,
                                                                                        File   file,
                                                                                        int h,
                                                                                        int w)
     {
       try
         {

           QRCodeWriter writer = new QRCodeWriter()                      ;
           BitMatrix matrix = writer.encode(gDescripcion, com.google.zxing.BarcodeFormat.QR_CODE, w, h);

           BufferedImage image = new BufferedImage(matrix.getWidth(), matrix.getHeight(), BufferedImage.TYPE_IN\
T_RGB);
           image.createGraphics();

           Graphics2D graphics = (Graphics2D) image.getGraphics()        ;
           graphics.setColor(Color.WHITE);
           graphics.fillRect(0, 0, matrix.getWidth(), matrix.getHeight());
           graphics.setColor(Color.BLACK);

           for (int i = 0; i < matrix.getWidth(); i++)
              {
               for (int j = 0; j < matrix.getHeight(); j++)
                  {
                    if (matrix.get(i, j))
                      {
                       graphics.fillRect(i, j, 1, 1)                     ;
                      }
                  }
              }

          ImageIO.write(image, "png", file)                            ;

           return file;

          }
        catch (Exception e)
          {

            return file                                                  ;
          }

    }

%

<%

//         *****         Generar Codigo QR   ***

/*

La mecanica es simple mediante el proceso
generarCodigoQR(QRText,f, 300, 300) , se le da la ruta , el texto que se desea codificar y las dimensiones de la imagen la cual se guarda en la ruta indicada por la variable f , (es una variable de tipo File) con la ruta cualificado donde se guarda la imagen, la ruta debe poder ser accesada por la aplicación desde el contenedor de su aplicación JSP.

Posteriormente se imprime o muestra la imagen teniendo en cuenta que la ruta es "RELATIVA" a su aplicación JSP , para lo cual se usa contextPath().


archivoImagenPath es la ruta totalmente cualificada donde el generador    de la imagen QR guarda el archivo tipo  png, gif, jpg , debe estar un punto que pueda  ser accesado desde el contenedor JSP de sus aplicación

archivoImagenQr es la ruta relativa a su aplicación desde donde el JSP
va recuperar la imagen para desplegarla en su aplicación.

Observar el uso de request.getContextPath() para recuperar el
punto de despliegue de la imagen en la pagina JSP.

la carpeta codigoDeBarras en este proceso es el lugar donde mi aplicación
guarda las imágenes QR, debe tener todos los permisos de lectura  escritura y ejecución

 aplicar estos permisos con :
# chmod -R ugo+wrx codigoDeBarras 

En la carpeta de su aplicacion JSP , en mi caso /usr/locat/tomcat/webapps/miSitio/codigoDeBarras.

Nota: En la aplicación la referencia queda enmascarada por el uso
de  request.getContextPath(), pero en la hora de la creación debe quedar
dentro del tomcat y un lugar accesible por el archivo de aplicación JSP.
con los permisos adecuados, soy reiterativo en esto porque es la causa
mas frecuente de error , o no puede escribir la imagen por falta de permisos
o no encuentra la carpeta donde está la imagen para desplegarla.

 codigoQR = es el nombre de la imagen que se va desplegar

 los parámetros 300,300 son las dimensiones alto y ancho de la imagen
 en pixeles.


*/

          String url   = request.getRequestURL().toString()               ;

          String archivoImagenPath = "/usr/local/tomcat/webapps/"  ;
          String  archivoImagenQR  = new String()                              ;
          String  archivoHtmlQR       = new String()                             ;

          String codigoQR      = "imagenQR.png                                  ;


           archivoImagenQR   = archivoImagenPath                            ;
           archivoImagenQR += request.getContextPath()                 ;
           archivoImagenQR += "/codigoDeBarras/"                            ;
           archivoHtmlQR        = archivoImagenQR                              ;
           archivoImagenQR += codigoQR                                           ;

           File f = new File(archivoImagenQR)                                     ;

           String QRText  = "Mensaje de prueba Hola Mundo"           ;
       
           generarCodigoQR(QRText,f, 300, 300)                               ;

           String urlQR = url + "codigoDeBarras/" + codigoQR          ;

            // El ancho  y alto (300,300) y tamaño de la imagen deplegada 50%
            // deben ser ajustado de forma tal que la resolucion permita que
            // el código pueda ser leído por una aplicación QR.

           %>

           <center>
           <table>
               <tr>
                       <td align = center>
                                <img src='" + urlQR   + " ' width='50%' >
                       </td>
               </tr>
           </table>
           </center>


//****************************************************************************









Comentarios

Entradas populares