Tanto los códigos de barras como los códigos QR resuelven el problema de hacer que un objeto (mercancía, documentos, etc..) sea identificable por una maquina. Para lograr esto en la industria hay muchisimos estandares diferentes usados para diversas aplicaciones.

En este post voy a explicarles como usando Java pueden generar códigos de barras y códigos QR usando liberías previamente diseñadas y de uso común. Ademas, como bonus, les dejo un servicio REST para generarlos creado con spring framework.

Pre-requisitos

Asumimos que se tienen las siguientes cosas listas:

  • Un proyecto Java en blanco con maven como gestor de dependencias
  • Conexion a internet de banda ancha.

Dependencias

Para que este proyecto funcione debemos agregar las siguientes dependencias:

Para que la dependencia de QRGen funcione debemos agregar el siguiente repositorio a nuestro pom.xml

<repositories>
        <repository>
            <id>jitpack.io</id>
            <url>https://jitpack.io</url>
        </repository>
    </repositories>

y Luego las dos dependencias:

<dependencies>
        <dependency>
            <groupId>net.sourceforge.barbecue</groupId>
            <artifactId>barbecue</artifactId>
            <version>1.5-beta1</version>
        </dependency>
        <dependency>
            <groupId>com.github.kenglxn.qrgen</groupId>
            <artifactId>javase</artifactId>
            <version>2.6.0</version>
        </dependency>
</dependencies>

Generador De Códigos De Barras

Con la librería barbecue is muy fácil generar códigos de barras, simplemente hay que escribir las siguientes lienas de código:

public BufferedImage generateCode128BarCodeImage(final String barcodeText) throws Exception {
        final Barcode barcode = BarcodeFactory.createCode128(barcodeText);
        barcode.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 12));

        return BarcodeImageHandler.getImage(barcode);
    }

Esta función devuelve un BufferedImage con la imagen del código de barras. Si quisieramos guardar esta imagen como un archivo en el disco duro, simplemente hacemos uso del ImageIO nativo de la siguiente manera:

BufferedImage bufferedImage = generateCode128BarCodeImage("ricardogeek.com");
File codigoBarras= new File("codigo-barras.jpg");
ImageIO.write(bufferedImage, "jpg", codigoBarras);

Mas adelante explico como pueden hacer para que un servicio REST devuelve la imagen del código de barras a través de un endpoint.

Generador De Códigos QR

De manera similar con la librería de QRGen es muy fácil generar códigos QR a partir de una cadena de caracteres.

Basta con escribir la siguiente función:

public BufferedImage generateQrCode(final String qrCodeText, final int width, final int height) throws Exception {
        final ByteArrayOutputStream stream = QRCode
                .from(qrCodeText)
                .withSize(width, height)
                .stream();

        final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(stream.toByteArray());

        return ImageIO.read(byteArrayInputStream);
    }

Y de manera similar si quisieramos guardar el código que se ha generado en el disco duro, simplemene usamos el siguiente código:

BufferedImage bufferedImage = generateQrCode("ricardogeek.com", 350, 350);
File codigoQR= new File("codigo-qr.jpg");
ImageIO.write(bufferedImage, "jpg", codigoQR);

Spring Boot Para Generar Códigos QR y De Barras

Bien, me parecio divertida la idea de crear un servicio REST que fuera open source y que se valiera de estas dependencias para facilitar la implementación en alguna dependencia corporativa.

Asi que aqui les dejo el link al repositorio, y ya saben que cualquier contribución al mismo es bienvenida.

https://github.com/RicardoGeek/qr-barcode-generator