Antes de comenzar es preciso que instales y configures NetBeans para poder usar el complemento de JasperReport, si no lo has hecho ya, como veíamos al principio de la unidad y que inicies el servidor MySQL con la base de datos Fabrica que hemos venido utilizando en los ejemplos anteriores.
En el proyecto que crees debes añadir las librerías:
Driver MySql JDBC: para incluirla accede al panel proyectos, pulsas el botón derecho del ratón (menú contextual) y seleccionas la opción Agregar Biblioteca. Lo buscamos en la lista que nos aparece y pulsamos Añadir librería (Add Library).
Spring Framework 4.0.1: repetimos el proceso anterior y seleccionamos dicho valor en la lista.
JasperReport 6.11: repetimos el proceso de la misma forma que hicimos con el Driver de MySQL y Spring Framework.
Incluiremos los siguientes ficheros .jar a nuestra Biblioteca. Accedemos, de nuevo, al menú contextual sobre Bibliotecas y seleccionamos Añadir ficheros jar /carpeta. Debemos de incluir los siguientes ficheros jar: commons-beanutils-1.8.2.jar, commons-collections4-4.4.jar, commons-digester-2.1.jar, commons-logging-1.1.2.jar, itext-2.1.7.jar, joda-time-2.4.jar, jollyday-0.4.9.jar.
Todos estos ficheros los puedes descargar desde el siguiente enlace: Conjunto de ficheros jars necesarios para el ejemplo.
Lo que pretendemos con este ejemplo, es desde una aplicación Java, construir un informe en formato PDF. Es decir, al ejecutar la aplicación vamos a crear un nuevo fichero, en formato PDF, que contendrá el informe.
Vamos a utilizar el informe PedidosCiudad.jrxml, que creamos de ejemplo durante el desarrollo de esta unidad. Vamos a duplicarlo y le vamos a cambiar el nombre para que se llame PedidosCiudadParametro.jrxml. Este informe muestra los pedidos que se han recibido de cada ciudad. Lo vamos a modificar para que reciba un parámetro, que será el año del cual queremos consultar los pedidos. Por lo tanto, obtendremos un informe de los pedidos que se han recibido agrupados por ciudad durante el año indicado.
Utilizando este fichero, accederemos al panel Report Inspector para definir el parámetro año. Las propiedades asociadas a este parámetro son:
Name: año
Parameter Class: java.lang.Integer
Default Value Expression:0. (Lo inicializamos con el valor cero.)
SELECT ciudad, id_pedido, fecha_pedido FROM
clientes, pedidos where clientes.ID_Cliente = pedidos.ID_Cliente
and year(fecha_pedido)=$P{año}
order by ciudad
A continuación, procedemos a modificar el diseño del informe para introducir las etiquetas (static text) para agregar los títulos Número de pedido, Fecha de pedido y Total pedidos. También agregaremos, en la banda Title, el texto AÑO, utilizando una etiqueta (static label) y el valor del parámetro año.
El diseño del informe tiene que quedar de la siguiente forma:
Una vez creado correctamente el informe, procederemos a utilizarlo desde una aplicación en Java. Para ello, vamos agregar a nuestro proyecto un nuevo fichero java, denominado PedidosAnio.java, que contendrá las instrucciones necesarias para establecer una conexión con la base de datos, obtener los datos para crear el informe y crear el fichero PDF en donde se guardará el informe.
import java.awt.Desktop;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.*;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.*;
public class PedidosAnio {
public static Connection conexion = null;
String baseDatos = "jdbc:mysql://localhost/fabrica";
String usuario = "root";
String clave = "";
public PedidosAnio(){
try{
Class.forName("com.mysql.jdbc.Driver").newInstance();
conexion = DriverManager.getConnection(baseDatos,usuario,clave);
}
catch (ClassNotFoundException cnfe){
System.err.println("Fallo al cargar JDBC");
System.exit(1);
}
catch (SQLException sqle){
System.err.println("No se pudo conectar a BD");
System.exit(1);
}
catch (java.lang.InstantiationException sqlex){
System.err.println("Imposible Conectar");
System.exit(1);
}
catch (Exception ex){
System.err.println("Imposible Conectar");
System.exit(1);
}
}
//El método ejecutar recibe el parametro del informe
public void ejecutar(int año)
{
//Ruta del informe respecto del proyecto NetBeans
String archivojasper="PedidosCiudadParametro.jasper";
try
{
//Cargamos los parametros del informe en una tabla Hash
Map parametros = new HashMap();
parametros.put("año",año);
//Generamos el informe en memoria
JasperPrint print = JasperFillManager.fillReport(archivojasper, parametros, conexion);
// Exporta el informe a PDF
JasperExportManager.exportReportToPdfFile(print, "informe.pdf");
//Abre el archivo PDF generado
File path = new File ("informe.pdf");
Desktop.getDesktop().open(path);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,e.toString(),"Error",JOptionPane.WARNING_MESSAGE);
}
}
}
Con este código estamos utilizando el informe PedidosCiudadParametro.jasper para generar el informe. El fichero resultante de la ejecución del código se almacenará en un fichero llamado informe.pdf
A continuación, vamos a crear un nuevo fichero, llamado EjemploDI05.java, donde tendremos definido el método main con este código:
public static void main(String[] args) {
PedidosAnio informe = new PedidosAnio();
int anio=2019;//Valor que se va a pasar para que lo recoja el parámetro
informe.ejecutar(anio);
}
Si ejecutamos la aplicación, se nos generará el fichero informe.pdf, cuyo contenido es:
Si creamos un formulario para seleccionar el año mediante un campo de texto o lista desplegable y ejecutamos el formulario desde un botón tendremos una aplicación gráfica para generar nuestro informe parametrizado.