En este tutorial aprenderás a ejecutar un reporte JasperReports (JRXML) desde una API REST creada con Quarkus. También veremos cómo generar un PDF dinámico a partir de parámetros.
1. Crear proyecto Quarkus con Gradle
quarkus create app com.demo:jkude --gradle
cd jkude
2. Agregar dependencias necesarias
Editar el archivo build.gradle:
dependencies {
implementation "net.sf.jasperreports:jasperreports:6.20.6"
implementation "com.lowagie:itext:2.1.7"
// Soluciona la dependencia faltante que Jasper busca por defecto
implementation "com.github.librepdf:openpdf:1.3.30"
}
repositories {
mavenCentral()
}
Estas versiones funcionan sin errores y son completamente compatibles con JasperReports 6.20.x.
3. Crear un reporte JRXML básico
Crear:
src/main/resources/reports/report.jrxml
Contenido del archivo:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="sample" pageWidth="595" pageHeight="842" columnWidth="555">
<parameter name="mensaje" class="java.lang.String"/>
<detail>
<band height="40">
<textField>
<reportElement x="0" y="0" width="300" height="40"/>
<textFieldExpression><![CDATA[$P{mensaje}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Colocar los <parameter> siempre antes de las bandas (detail, title, etc.).
4. Crear un endpoint REST para generar PDF
Archivo:
src/main/java/com/demo/ReportResource.java
Contenido:
package com.demo;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.*;
import net.sf.jasperreports.engine.*;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
@Path("/reportes")
public class ReportResource {
@GET
@Path("/pdf")
@Produces("application/pdf")
public Response generar() throws Exception {
InputStream jrxml = getClass().getResourceAsStream("/reports/report.jrxml");
JasperReport report = JasperCompileManager.compileReport(jrxml);
Map<String, Object> params = new HashMap<>();
params.put("mensaje", "Hola desde Jasper!");
JasperPrint print = JasperFillManager.fillReport(report, params, new JREmptyDataSource());
byte[] pdf = JasperExportManager.exportReportToPdf(print);
return Response.ok(pdf)
.header("Content-Disposition", "inline; filename=reporte.pdf")
.build();
}
}
Ya tenés un endpoint REST que compila JRXML, lo llena con parámetros y devuelve un PDF.
5. Ejecutar el proyecto
./gradlew quarkusDev
Probar en el navegador:
http://localhost:8080/reportes/pdf
Si ves un PDF con “Hola desde Jasper!”, ¡funcionó correctamente!
Conclusión
Ahora tu proyecto Quarkus puede generar reportes PDF usando JasperReports de forma sencilla. Podés extender esto para crear reportes más complejos, tablas, listados o integrar datos desde una base de datos.
Comentarios
Publicar un comentario