Вы находитесь на странице: 1из 13

Creacion de Reportes con JasperReports

y iReports (Java Escritorio)


MINIENTRADA ~ 1 FEBRERO, 2015 ~ SERGIOGASPARLLANOS11

Frecuente deseamos ver reportes sobre los datos que se generan en el sistema y, en
ocasiones, se encuentran almacenados en nuestra base de datos.

Para ello existe una opcin para la creacin de estos reportes: JasperReports.
JasperReports es un API OpenSource que nos permite generar reportes en formatos
PDF, XML, HTML, CSV, XLS, RTF, y TXT con solo unas cuantas lneas de
cdigo y guardar este reporte en un archivo, enviarlo por un OutputStream, o
mostrarlo directamente con un visor especial (si usamos una aplicacin swing).

1. La Base de Datos
Pues bien para esto vamos a empezar creando una base de datos llamada
prueba_reportes y ah dentro crear una tabla llamada persona y agregarle algunos
datos para poder hacer pruebas.
1
2 CREATE DATABASE prueba_reportes
3 WITH OWNER = sergio
4 ENCODING = 'UTF8'
5 --------------------
6 CREATE TABLE persona
(
7 per_id serial NOT NULL,
8 per_nombre character varying(20),
9 per_apellido character varying(20),
10 per_edad integer,
CONSTRAINT persona_pkey PRIMARY KEY (per_id)
11 )
12 WITH (
13 OIDS=FALSE
14 );
15 ALTER TABLE persona
OWNER TO sergio;
16
17

2. El reporte
Para ello tenemos que ir descargando iReports Designer, lo podemos hacer desde
su pgina oficial. Este programa nos permite disear el estilo del reporte, es decir,
la forma en cmo van a quedar las columnas y filas, color, estilo de fuente y adems
las consultas que se van a hacer a la base de datos.
Cuando ya hemos instalado iReports Designer lo ejecutamos y creamos un nuevo
Datasource as: Click en el icono resaltado azul (Report Datasources).
All nos abre una ventana llamada Connections/Dataources, entonces
seleccionamos New para crear uno nuevo y luego seleccionamos el tipo de
datasource el cual es un Database JDBC Connection

Ahora proporcionamos los datos requeridos para el nombre del datasource, luego
el tipo de dirver que se ha de usar teniendo en cuenta la base de datos a la cual nos
vamos a conectar. Y ms abajo damos el url con el nombre de la base de datos y
luego el usuario y contrasea propietarios de la base de datos.
Cuando hacemos esto damos en la opcion Test para probar la conexion y si esto
es exitoso le damos Save para guardar este datasource.

Ahora que ya hemos hecho esto, vamos a crear un reporte.

Para ello nos vamos a File -> New. Y all seleccionamos una plantilla para usar
con nuestros reportes. La seleccionamos y le damos Launch Report Wizard. En
mi caso yo usar la plantilla Simple Blue.
Ahora le damos damos un nombre y una ubicacin para guardarlo
luego tenemos que ingresar el query o consulta que nos va a devolver la
informacion que vamos a mostrar. En mi caso algo simple. Consultar todos los
campos de la tabla.
Damos en siguiente, seleccionamos los campos que queremos mostrar en el
reporte.

Ahora nos permite agruparlos, pero para hacerlo simple, no vamos a hacer uso de
esto. Lo dejamos todo en limpio. y damos en siguiente y ahora si podemos dar en
finish.

Hecho esto, tenemos que modificar el diseo del reporte. No nos vamos a detener
mucho aqu. Y cuando ya la hemos modificado los titulos y nombre de columnas.
Damos click en Preview y all nos va a mostrar una vista previa del reporte.
3. La aplicacin en eclipse
Para crear la aplicacion que genere reportes debemos crear un proyecto y
agregarle las librerias necesarias. Todas estas las podemos descargar desde aqu.
Estas son la libreras que deben agregarse:

Estas libreras las agregamos al proyecto. En mi caso trabajo con eclipse


entonces debemos crear una carpeta llamada lib y ah dentro pegamos todas la
liberas anteriores y tambien debemos agregar la librera (Driver) para conectar la
aplicacion con la base de datos.

Esta es la estructura del proyecto:


Estructura Proyecto 1
En la ilustracin Estructura Proyecto 1 ser observa el folder que creamos
llamado lib el cual contiene todas las librera anteriormente mencionandas y
tambien en la raiz del proyecto hemos pegado una copia del archivo que
generamos en el iReport Designer, es decir, el archivo que contiene el diseo del
reporte. Cuando guardamos el diseo en dicho programa se gener este archivo
el ruta que indicaba anteriormente.
Ahora veamos en ms detalle la estructura del proyecto:

Estructura Proyecto 2
En la ilustracin Estructura Proyecto 2 se observan todas las libreras. Y
tambin las dos clases que debemos crear dentro de un paquete. Estas dos clases
se llaman Principal y ConexionBD.
Vamos a la clase ConexionBD que sirve para conectarse a la base de datos.

1 package org.uscosoft.reporte;
2
import java.sql.Connection;
3 import java.sql.DriverManager;
4
5 public class ConexionBD {
6
7 private Connection conexion = null;
8 private String urlBD = "jdbc:postgresql://localhost:5432/prueba_reportes";
private String userBD = "sergio";
9 private String passBD = "gaspar";
10
11
12 public Connection getConexion() throws Exception{
13 Class.forName("org.postgresql.Driver");
14 conexion = DriverManager.getConnection(urlBD, userBD, passBD);
15 return conexion;
}
16
17 }//fin class
18
19
20

Ahora la clase Principal: contiene lo necesario para generar los reportes.

Y este es el contenido:

1 package org.uscosoft.reporte;
2
import net.sf.jasperreports.engine.JRExporter;
3 import net.sf.jasperreports.engine.JRExporterParameter;
4 import net.sf.jasperreports.engine.JasperFillManager;
5 import net.sf.jasperreports.engine.JasperPrint;
6 import net.sf.jasperreports.engine.JasperReport;
7 import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.util.JRLoader;
8 import net.sf.jasperreports.view.JasperViewer;
9
10 public class Principal {
11
12
13 public static void main(String[] args) throws Exception {
14
15 ConexionBD cbd = new ConexionBD();
java.util.Scanner teclado = new java.util.Scanner(System.in);
16
17 JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile("reporte
18 JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, cbd.
19
20 System.out.print("Ingrese la opcion... ");
21 String opcion = teclado.next();
22
if(opcion.equals("guardar")){
23 JRExporter exporter = new JRPdfExporter();
24 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
25 exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File
26 exporter.exportReport();
27 System.out.println("Ya est guardado");
}
28
29 if(opcion.equals("ver")){
30 JasperViewer viewer = new JasperViewer(jasperPrint);
31 viewer.setTitle("Mi Rporte");
32 viewer.setVisible(true);
System.out.println("Ya est listo para ver");
33 }
34
35 System.out.println("Aplicacion Finalizada");
36
37 }//fin main
38
39 }//fin class
40
41
42
43
44
45
Veamos una explicacin breve del cdigo:

1 JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile("reportedeprueba.

Lo que estamos haciendo es crear un objeto de JasperReport y cargarle el archivo


.jasper que habiamos generado.

1 JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, cbd.getConexi

Ahora creamos un objeto JasperPrint que nos sirve para ser visualizado, y a este
objeto le pasamos el reporte (objeto anteriormente creado) y tambien le pasamos
los parametros (no tiene parmetros, o sea, null) y le pasamos la fuente donde estn
los datos, es decir, la conexion a la base de datos.

En este punto nos encontramos con una condicin (es opcional, no necesaria) que
nos pregunta si queremos guardarlo directamente en el disco si queremos
visulizarlo primero. Entonces en el caso que escojamos guardar hace lo siguiente.

Ahora declaramos una referencia a un objeto de tipo JRExporter de la siguiente


forma:

1 JRExporter exporter = new JRPdfExporter();

Ser esta referencia la que usaremos de ahora en adelante. Para que nuestro reporte
sea guardado en formato PDF creamos un objeto de tipo JRPdfExporter y lo
asignamos a nuestra referencia exporter:

1 exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
2 exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reportePDF.
3 exporter.exportReport();

La primer lnea asigna a nuestro objeto exporter el jasperPrint(el reporte con


datos) que creamos anteriormente. La segunda lnea le dice al exporter cul ser
el nombre del archivo generado (en este caso reportePDF.pdf). Recuerden
cambiar el nombre y la extensin del archivo cada vez que cambiemos de
formato. La ltima lnea es la que realiza el proceso de exportacin.

Bien, en el caso que hayamos escogido la opcin ver pues se crear un objeto de
JasperViewer llamado viewer que lo que nos permirte es generar una vista previa
del objeto jasperPrint.

1 JasperViewer viewer = new JasperViewer(jasperPrint);


2 viewer.setTitle("Mi Reporte");
3 viewer.setVisible(true);

Y a esta vista previa le asignamos un titulo y luego la volvemos visible.

4. Ejecucin de la aplicacin
Aqu cuando escogemos la opcion guardar, se genera el archivo .pdf que hemos
indicado en el cdigo. El arhivo es generado en la misma ruta del proyecto, en la
raiz del proyecto.

Ahora si escogemos la opcin ver, se crea una vista previa del archivo generado y
es mostrada en una nueva ventana. Esta nueva ventana tiene varias opciones entre
ellas est la de guardar el archivo.

Bien eso ha sido todo por ahora. En otro post, ms adelante, veremos como
generarlos para java web.