Get it on Google Play
Tu partner Freelance para tus proyectos IT

Trabajar con códigos QR en Java y en Liferay

15-06-2020
Códigos QR en Java y Liferay

Códigos QR en Java y Liferay

Con la entrada del des-confinamiento se están disparando los proyectos en los que se requiere el uso de códigos QR. Y es que esta tecnología, que al final no llegó a despuntar tanto como se prometió es una buena solución para unir los dos mundos(el offline con el mundo online).

Yo ya había trabajado antes con este tipo de códigos(También en PHP, por ejemplo) pero hoy he decidido explicarlo porque la verdad es que es muy sencillo.

Existen gran cantidad de librerías para generar este tipo de códigos que luego son fácilmente escaneables desde un teléfono o lector de código de barras. En este caso vamos a usar la librería Zxing. Para añadirla a nuestros proyectos Java(Usando Gradle) podemos hacerlo de la siguiente manera:

	compile group: "com.google.zxing", name: "core", version: "3.3.0"
	compile group: "com.google.zxing", name: "javase", version: "3.3.0"

Para incluirlo en nuestros plugins de Liferay es muy parecido:

	compileInclude group: "com.google.zxing", name: "core", version: "3.3.0"
	compileInclude group: "com.google.zxing", name: "javase", version: "3.3.0"

A partir de ahora ya podemos empezar a crear nuestros propio códigos QR. Para guardarlos en un fichero podemos hacerlo de la siguiente manera:

QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode("https://url.com", BarcodeFormat.QR_CODE, 800,800);
        
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", Paths.get("/opt/url.png") );

En este caso estamos generando un código QR de 800×800 píxeles, que se guarda en “/opt/url.png” y lleva en enlace a “https://url.com”.

Por otro lado, si lo que queremos es servirlo mediante un servlet(Opción mas habitual en aplicaciones web) lo podemos hacer de la manera siguiente(En este caso es un Servlet dentro de un módulo OSGI de liferay):

@Component(
	    immediate = true,
	    property = {
	        "osgi.http.whiteboard.context.path=/",
	        "osgi.http.whiteboard.servlet.name=com.lostsys.proyecto.shop.servlet.PrintPDFServlet",
	        "osgi.http.whiteboard.servlet.pattern=/comerc-qr",
	        },
	    service = Servlet.class)
public class ServeQRServlet  extends HttpServlet {
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String url=ParamUtil.getString(req, "url", "");
		
		try {
			QRCodeWriter qrCodeWriter = new QRCodeWriter();
			BitMatrix bitMatrix = qrCodeWriter.encode("https://url.com", BarcodeFormat.QR_CODE, 800,800);
        
			resp.setContentType( "image/png" );
			MatrixToImageWriter.writeToStream(bitMatrix, "PNG", resp.getOutputStream());		
		} catch (Exception ex) { ex.printStackTrace(); }
		}

}
Si te ha servido, por favor comparte

Interesado en formación Liferay?

 

Leave a Reply