Generación de reportes en Node.js con node-jasper (JasperReports)

domingo, enero 19, 2020
Reportes



JasperReports es una librería de creación de reportes que permite la exportación a diversos formatos tales como PDF, HTML, XLS, CSV y XML. Es una herramienta que considero bastante potente. En esta entrada puedes ver cómo generar un reporte con esta librería.

Recientemente encontré un paquete llamado node-jasper que permite generar reportes con el uso de JasperReports. Este paquete podemos instalarlo en nuestro proyecto en Node.js.


Usado en este tutorial

  • Java JDK (openjdk 11.0.5).
  • Node.js (10.18.0).
  • Express.js (4.17.1).
  • JasperReports Project (jasperreports-6.11.0-project.zip): se tienen dos opciones, o descargar una versión igual o inferior a 6.2.0, las cuales vienen listas para usar ó descargar la última versión y generar el directorio /dist y /lib como lo muestro aquí.

Reporte Ejemplo

Copiar y guardar como hello_world.jrxml. Luego compilar usando Jaspersoft Studio o la herramienta de su preferencia (puede ver como compilar un reporte aquí).


<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.11.0.final using JasperReports Library version 6.11.0-0c4056ccaa4d25a5a8c45672d2f764ea3498bebb  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="hello_world" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="040c48a3-961f-4d27-865c-97a12cffcae2">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <parameter name="name" class="java.lang.String"/>
    <queryString>
        <![CDATA[]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="-20" y="20" width="612" height="30" uuid="b0fc5ba7-4c99-4c04-b0ff-97cbb44c9fa8"/>
                    <textElement textAlignment="Center">
                        <font size="19" isBold="true"/>
                    </textElement>
                    <text><![CDATA[Reporte Ejemplo]]></text>
             </staticText>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch">
            <textField>
                <reportElement x="-20" y="46" width="612" height="30" uuid="09358745-619c-4282-8026-5237b89f4929"/>
                <textElement textAlignment="Center">
                    <font size="19"/>
                </textElement>
                <textFieldExpression><![CDATA["Hola Mundo, " + $P{name}]]>  </textFieldExpression>
            </textField>
        </band>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch">
            <staticText>
                <reportElement x="-20" y="12" width="612" height="30" uuid="846c8b86-ba1c-46b4-a3a9-fe3caa784e9f"/>
                <textElement textAlignment="Center" verticalAlignment="Middle"/>
                <text><![CDATA[La Chica Informática]]></text>
            </staticText>
        </band>
    </pageFooter>
    <summary>
        <band height="54" splitType="Stretch"/>
    </summary>
</jasperReport>


Instalación de node-jasper en Node.js

Para usar este paquete en Node.js ejecutar el siguiente comando estando en la carpeta de su proyecto:

npm install --save node-jasper

Uso de node-jasper en Node.js

Debemos crear un directorio /lib en la raíz del proyecto y copiar la carpeta de jasperreports-project que hemos descargado. Seguidamente crear una carpeta /reports y almacenar el reporte compilado hello_world.jasper.

El reporte ejemplo recibe un parámetro name.

const express = require('express'),
app = express(),
jasper = require('node-jasper')({
    path: 'lib/jasperreports-6.11.0',
    reports: {
        hw: {
            jasper: 'reports/hello_world.jasper'
        }
    }
});

app.get('/report', function(req, res, next) {
    let report = {
        report: 'hw',
         data: {
             name: 'Lili'
        }
    };
    let pdf = jasper.pdf(report);
    res.set({
        'Content-type': 'application/pdf',
        'Content-Length': pdf.length
    });
    res.send(pdf);
});

app.listen(3000);

Ya con eso podemos ver nuestro reporte en http://localhost:3000/report.


Como lo vemos podemos aprovechar toda la potencia que nos da JasperReports desde nuestros proyectos en Node.js. Son muchísimas las opciones que nos brinda esta librería de generación de reportes, que ahora tendremos a disposición para usar.

También te puede interesar

Cuando navego por los sitios web, mi parte favorita es leer los comentarios. Es por eso que tus comentarios son un complemento valioso para mis entradas. Cualquier duda o aporte no dejes de escribirlo, en breve lo estaré publicando. ¡Gracias!


6 comentarios

  1. Muchas gracias por compartir, Trabajo hace mucho años con jasper report y la verdad es genial este reporteador. Quiero empezar a programar con laravel y estoy mas familiarizado con javascrip. Puedo usar nodejs y pasarle los parámetro que necesito para que me genere el reporte ?
    algo asi http://localhost:3000/report?año=1998,localidad=buenos aires .. Disculpa mi ignorancia. La idea es tener un servidor nodejs con todos los reportes a utilizar . O me recomendas otra solución ?

    ResponderBorrar
    Respuestas
    1. Hola!! A mi también me encanta Jasper Reports! Si puedes pasar parámetros como me dices. Ha pasado algún tiempo desde el comentario pero también tengo una manera de usar Laravel con Jasper Reports que tal vez te pueda interesar: https://www.lachicainformatica.com/2016/08/generacion-de-reportes-en-laravel-5-con-jasperphp.html. Saludos y gracias por tus comentarios!!

      Borrar
  2. Hola chica-informatica, muchas gracias por el aporte, no tenia ni idea de que se pudiera usar jasper-reports con nodejs.

    ResponderBorrar
  3. Disculpa Mi ignorancia como podría pasar el parámetro a la url http://localhost:3000/report. , por ejemplo si yo quisiera pasar name: 'Lili prueba'

    Desde ya muchas gracias.

    ResponderBorrar
    Respuestas
    1. Hola!! Si puedes pasar parámetros a la url por ejemplo "http://localhost:3000/report?name=Lili", recibirlos mediante req.query.name y luego pasarlo al reporte. Saludos!!

      Borrar
    2. Gracias ya estoy trabajando y pasando parámetros. Funciona todo correctamente. Estoy usando jasperreports-5.6.0. Mi idea es usarlo en distintas aplicaciones, solo cambiando los parámetros. (Capaz un Json con parámetros, sigo estudiando node js , pero esto me abre una ventana grande de oportunidades :-) )

      Borrar

Lo más reciente

¡Bendiciones para mi Venezuela!

¡Bendiciones para mi Venezuela!