Algunos detalles con jasperreports y java

De ChuWiki
Revisión del 14:25 12 ago 2018 de Chudiang (Discusión | contribuciones) (Parámetros en Jasper)

Saltar a: navegación, buscar

Algunos detalles que me he ido encontrando al jugar con jasperreports-library

maven/gradle

La dependencia tal cual la trae mvnrepository no funciona bien, no encuntra una dependencia transitiva de itext. Este es el apaño que he hecho para que me funcione, en gradle

apply plugin: 'java'

repositories {
    mavenCentral()
}

dependencies {
    compile('net.sf.jasperreports:jasperreports:6.7.0') {
        exclude group:'com.lowagie'
    }
    compile group: 'com.lowagie', name: 'itext', version: '2.1.7'
}

He excluido el itext (grupo com.lowagie) que viene y he puesto una versión similar pero que sí existe. Funciona, pero sale un warning al generar informes de que la librería de itext no está parcheada, pero aparentemente funciona.

ADVERTENCIA: Unpatched iText found, cannot use glyph rendering

Será cuestión de buscar una librería de itext que sí esté parcheada y que sí esté en los repositorios de maven.

Parámetros en Jasper. Una imagen como parámetro

A la hora de crear la plantilla de un informe con iReport o su versión nueva, Jasper Studio, podemos crear parámetros que luego, a la hora de generar el informe, se podrán rellenar para obtener un informe concreto. Estos parámetros pueden ser para lo que queramos, por ejemplo, poner la clausula where de la consulta a la base de datos a partir de la cual generamos el informe, o añadir una foto/logo en el título, o cualquier otra cosa que queramos que se rellene en el momento de generar el informe y que no esté fijo desde el momento de diseñar la plantilla con iReport o Jasper Studio.

En la siguiente imagen creamos un parámetro de nombre the_image y de tipo java.lang.String

Parameters-the image.png

Luego, el el informe, añadimos una imagen donde queramos de tipo "custom expression". Ahí rellenamos con $P{the_image} donde the_image es el nombre que hemos dado a nuestro parámetro

Jasper-studio-crear-imagen-parametro.png

Nuestro fichero jrxml debería tener algo como esto

...
<parameter name="the_image" class="java.lang.String"/>
...
<image>
	<reportElement x="48" y="29" width="50" height="50" uuid="67c761e8-8fcf-4b9d-973b-f63af98dd150"/>
	<imageExpression><![CDATA[$P{the_image}]]></imageExpression>
</image>

Ahora, a la hora de generar el informe desde código java, solo tenemos que rellenar el parámetro con un path donde esté la imagen que nos interesa. Ojo si el path es relativo, tenemos que asegurarnos que se encuentra desde donde se está ejecutando nuestro programa.

        // Compilar el fichero jrxml
        JasperReport report = JasperCompileManager.compileReport(
                "src/main/files/Blank_A4.jrxml");

        // Rellenamos los parámetros del informe con valores
        Map<String,Object> parameters = new HashMap<>();
        parameters.put("the_image","src/main/files/the_image.png");

        // Conexión a la base de datos donde están los datos del informe
        Class.forName("org.postgresql.Driver");
        Connection conn = null;
        conn = DriverManager.getConnection(
                "jdbc:postgresql://localhost/prueba","postgres", "postgres");

        // rellenamos el informe con datos y parámetros
        JasperPrint print = JasperFillManager.fillReport(report, parameters, conn);

        // Y a guardar en un pdf !!
        JasperExportManager.exportReportToPdfFile(print,
                "build/Blank_A4.pdf");