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
Publicar un comentario