Software -Sergio Gaspar Llanos Compartiendo conocimiento de forma simple y didáctica.
Creacion de Reportes con JasperReports y iReports (Java Escritorio) MINIENTRADA ~ 1 FEBRERO, 20158 FEBRERO, 2015 2015 ~ SERGIOGASPARLLANOS SERGIOGASPARLLANOS11 11 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 opción para la creación 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 líneas de código y guardar este reporte en un archivo, enviarlo por un OutputStream, o mostrarlo directamente con un visor especial (si usamos una aplicación 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 3 4 5 6
prueba_reportes OWNER = sergio ENCODING = 'UTF8' ------------------- persona (
7 8 9 10 11 12 13 14 15 16 17
per_id serial NOT NULL, per_nombre per_apellido per_edad , persona_pkey ) ( OIDS= ); persona OWNER sergio;
2. El reporte
(20), (20), (per_id)
Para ello tenemos que ir descargando iReports Designer, lo podemos hacer desde su página oficial (http://community.jaspersoft.com/). Este programa nos permite diseñar el estilo del reporte, es decir, la forma en cómo van a quedar las columnas y filas, color, estilo de fuente y además 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 más abajo damos el url con el nombre de la base de datos y luego el usuario y contraseña 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 ubicación 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 diseño 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 aplicación 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í (https://drive.google.com/file/d/0BzXcuxhZ0yB6aERQU3c2TEdYMlU/view?usp=sharing). Estas son la librerías que deben agregarse:
Estas librerías las agregamos al proyecto. En mi caso trabajo con eclipse entonces debemos crear una carpeta llamada lib y ahí dentro pegamos todas la liberías anteriores y tambien debemos agregar la librería (Driver) para conectar l a aplicacion con la base de datos. Esta es la estructura del proyecto:
(https://sergiosoftware.files.wordpress.c om/2015/02/1_estruct_proy.png) Estructura Proyecto – 1 En la ilustración Estructura Proyecto – 1 ser observa el folder que creamos llamado lib el cual contiene todas las librería 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 diseño del reporte. Cuando guardamos el diseño en dicho programa se generó este archivo el ruta que indicaba anteriormente.
Ahora veamos en más detalle la estructura del proyecto:
(https://sergiosoftware.files. wordpress.com/2015/02/1_e struct_proy_detalle.png) Estructura Proyecto – 2 En la ilustración Estructura Proyecto – 2 se observan todas las librerías. Y también 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 2 3 4 5 6 7
org.uscosoft.reporte; java.sql.Connection; java.sql.DriverManager; ConexionBD {
8 9 10 11 12 13 14 15 16 17 18 19 20
Connection conexion = ; String urlBD = "jdbc:postgresql://localhost:5432/prueba_reportes (postgresql://local String userBD = "sergio"; String passBD = "gaspar"; Connection getConexion() Exception{ Class.forName( "org.postgresql.Driver" ); conexion = DriverManager.getConnection(urlBD, userBD, passBD); conexion;
}
}//fin class
Ahora la clase Principal: contiene lo necesario para generar los reportes.
(https://sergiosoftware.files.wordpress.com/2015/02/1_class_ppal.png) Y este es el contenido: 1 2
org.uscosoft.reporte;
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
net.sf.jasperreports.engine.JRExporter; net.sf.jasperreports.engine.JRExporterParameter; net.sf.jasperreports.engine.JasperFillManager; net.sf.jasperreports.engine.JasperPrint; net.sf.jasperreports.engine.JasperReport; net.sf.jasperreports.engine.export.JRPdfExporter; net.sf.jasperreports.engine.util.JRLoader; net.sf.jasperreports.view.JasperViewer; Principal { main(String[] args)
Exception {
ConexionBD cbd = ConexionBD(); java.util.Scanner teclado = java.util.Scanner(System.in); JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile( "reportedeprueba.jaspe JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, , cbd.getConexion()) System.out.print( "Ingrese la opcion... "); String opcion = teclado.next(); (opcion.equals( "guardar")){ JRExporter exporter = JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, java.io.File("reportePDF. exporter.exportReport(); System.out.println("Ya está guardado");
}
(opcion.equals( "ver")){ JasperViewer viewer = JasperViewer(jasperPrint); viewer.setTitle( "Mi Rporte"); viewer.setVisible( ); System.out.println("Ya está listo para ver" );
}
System.out.println( "Aplicacion Finalizada");
42 43 44 45
}//fin main }//fin class
Veamos una explicación breve del código: 1
JasperReport reporte = (JasperReport) JRLoader.loadObjectFromFile( "reportedeprueba.jasper" );
Lo que estamos haciendo es crear un objeto de JasperReport y cargarle el archivo .jasper que habiamos generado. 1
JasperPrint jasperPrint = JasperFillManager.fillReport(reporte,
, cbd.getConexion());
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 parámetros, o sea, null) y le pasamos la fuente donde están los datos, es decir, la conexion a la base de datos. En este punto nos encontramos con una condición (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 =
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 2 3
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, java.io.File( "reportePDF.pdf" )); exporter.exportReport();
La primer línea asigna a nuestro objeto “exporter” el “jasperPrint”(el reporte con datos) que creamos anteriormente. La segunda línea le dice al “exporter” cuál será el nombre del archivo generado (en este caso “reportePDF.pdf”). Recuerden cambiar el nombre y la extensión del archivo cada vez que cambiemos de formato. La última línea es la que realiza el proceso de exportación.
Bien, en el caso que hayamos escogido la opción ver pues se creará un objeto de JasperViewer llamado viewer que lo que nos permirte es generar una vista previa del objeto jasperPrint. 1 2 3
JasperViewer viewer = JasperViewer(jasperPrint); viewer.setTitle("Mi Reporte"); viewer.setVisible( );
Y a esta vista previa le asignamos un titulo y luego la volvemos visible.
4. Ejecución de la aplicación Aquí cuando escogemos la opcion “guardar”, se genera el archivo .pdf que hemos indicado en el código. El arhivo es generado en la misma ruta del proyecto, en la raiz del proyecto.
(https://sergiosoftware.files.wordpress.com/2015/02/1_ejecucion_guardar.png) Ahora si escogemos la opción 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.
(https://sergiosoftware.files.wordpress.com/2015/02/1_ejecucion_ver.png) Bien eso ha sido todo por ahora. En otro post, más adelante, veremos como generarlos para java web. Video tutorial aquí: asd
CREA UN BLOG O UN SITIO WEB GRATUITOS CON WORDPRESS.COM. EL TEMA PENSCRATCH.