Generación de Informes Ingeniería de la Programación Práctica 9 1
JasperReport: librería Java para el desarrollo de informes ireport: Herramienta para el diseño visual de informes JasperReport Aplicación Java Diseño Informe (Eclipse) (ireport) Informe.jasper JasperReport.jar p Conexión Java-JasperReport 2
Contenido ireport Qué es ireport? Primeros pasos Configuración Crear Conexión JDBC Uso del Asistente Aspectos Avanzados en el Diseño de Informes Informes parametrizados Subinformes JasperReport Qué es JasperReport? Configuración de eclipse Visualizando informes desde java 3
ireport Qué es ireport? 4
ireport - Qué es ireport? Utilidad Opensource para crear informes Implementado 100% en Java Genera informes JasperReports Editor WYSIWYG (What You See Is What You Get) Soporta todas las bases de datos accesibles por JDBC. Sun Java 2 SDK 1.4 o superior 5
ireport - Qué es ireport? Proyecto IReport: http://sourceforge.net/projects/ireport p// /p / p Descarga Binarios: http://sourceforge.net/project/showfiles.php?group_id=64348 Tutoriales (En inglés): http://sourceforge.net/docman/?group_id=64348 Foros de Ayuda (En inglés. Es necesario registrarse) http://sourceforge.net/forum/forum.php?forum_id=217623 php?forum http://sourceforge.net/forum/forum.php?forum_id=217622 6
ireport Primeros Pasos 7
ireport - Primeros pasos Configuración Menu Options->Opciones 8
ireport - Primeros pasos Configuración 1 2 1. Propiedades del entorno 3 4 Indicamos el Look & feel, idioma, opciones por defecto, etc 2. Directorios del compilador Directorio donde se encuentra el compilador de informes, donde se almacenan los informes generados, etc. 3. Opciones de Backup 4. Programas externos Podemos utilizar otros programas para visualizar informes 9
ireport - Primeros pasos Configuración Directorio de Compilación Indica donde se guardan los ficheros *.jasper (importante saberlo porque luego se cargan desde Java) 10
ireport - Primeros pasos Conexión con Hibernate Data -> Conexiones / Fuentes de datos 11
ireport Primeros pasos Crear la conexión a la fuente de datos 1º Creamos la conexión Conexión JDBC Segundo: Nombre de la Conexión y URL Primero: Conexión BD JDBC Tercero: probar la conexión 12
ireport - Primeros pasos Crear la Conexión a la fuente de datos 1º Creamos la Conexión Conexión Hibernate 2º: Nombre de la conexión 1º: Tipo: Conexión Hibernate 13
ireport - Primeros pasos Crear Conexión Hibernate 2º Modificamos el Classpath Incluimos: -la librería hsqldb.jar -Directorio i 'data' 'dt'donde d se encuentra la bdde hsqlbd Si es una conexión Hibernate añadir además los paths: Directorio de archivos fuentes (src) de nuestro proyecto Directorio de archivos binarios (bin) Directorio donde están los mappings Directorio donde está el archivo hibernate.cfg.xml 14
ireport - Primeros pasos Crear Conexión Hibernate 3º Reemplazamos la librería de conexión a HSQLDB que viene en IReport IREPORT\lib\hsqldb-1.7.1.jar 171jar Por la que viene con HSQLDB: HSQLDB\lib\hsqldb.jar Manteniendo el nombre existente (hsqldb- 1.7.1.jar) 15
ireport - Primeros pasos Primer informe: Uso del Asistente ireport proporcina un asistente que nos facilita la creación de informes sencillos Fichero-> Mago de Informes 5 pasos: 1º Seleccionar conexión y definir consulta SQL 2º Seleccionar campos 3º Indicar si se agrupa por algún campo 4º Definir apariencia (Layout) 5º Finalizar asistente Nota: Antes, recuerde arrancar el HSQLDB 16
ireport - Primeros pasos Primer informe: Uso del Asistente 1º Seleccionar conexión y definir consulta SQL 1º:Nombre de la Conexión 2º:Consulta SQL 17
ireport - Primeros pasos Primer informe: Uso del Asistente 2º Seleccionar campos 3º Indicar si se agrupa por algún campo Atributos de la consulta Atributos que aparecen en el informe 18
ireport - Primeros pasos Primer informe: Uso del Asistente 4º Definir apariencia (Layout) Columna: para cada registro un campo bajo de otro Tb Tabular: para cada registro un campo al lado del otro 5º Finalizar asistente Plantilla para los aspectos estéticos 19
ireport - Primeros pasos Primer informe: Uso del Asistente Al finalizar obtenemos el diseño del informe 20
ireport - Primeros pasos Primer informe: Uso del Asistente Para visualizar el informe: Construir -> Ejecutar informe (usando conexión activa) Guardará además el diseño en un documento xml 21
ireport - Primeros pasos Primer report: con Conexión Hibernate 1º Seleccionar la fuente de datos y definir una consulta HQL 1º: Conexión Hibernate 2º: consulta HQL 22
ireport - Primeros pasos Primer report: con Conexión Hibernate Puede ser necesario cambiar los tipos básicos por clases (p.e. int java.lang.integer) 23
ireport Aspectos Avanzados en el Diseño de Informes 24
ireport - Aspectos Avanzados en el Diseño de Informes Crear un informe nuevo: Fichero -> nuevo documento Nombre del informe Tamaño del papel Orientación Márgenes, columnas, etc. Modificar Propiedades: Editar -> Propiedades del Informe 25
ireport - Aspectos Avanzados en el Diseño de Informes Definer la consulta a la BD: Datos -> Consulta de informe Escriba una consulta SQL y pulse 'Leer Campos' para ejecutarl Consulta SQL 26
ireport - Aspectos Avanzados en el Diseño de Informes También puede construir la consulta en el Diseñador de Consultas. 27
ireport - Aspectos Avanzados en el Diseño de Informes Consultas en conexiones Hibernate: 1º Creamos Consulta HQL 2º La ejecutamos 4º Seleccionamos los atributos a incluir en el informe, pudiendo navegar a través de aquellos que sean objetos 3º Borramos atributos 28
ireport - Aspectos Avanzados en el Diseño de Informes Archivos Abiertos Ventana de propiedades Estructura del Documento (Elementos definidos) Zona de Diseño Librería de Elementos 29
ireport - Aspectos Avanzados en el Diseño de Informes Cada informe se divide en 7 secciones: 30
ireport - Aspectos Avanzados en el Diseño de Informes Cada informe se divide en 7 secciones (bandas): 1. Título: Define el título del informe. Se imprime una única vez al inicio del informe. Puede imprimirse en una página separada. 2. Cabecera de Página: Define una cabecera para las páginas del informe. Se imprime una vez por página. Todas las páginas del informe presentan la misma cabecera de página. 3. Cabecera de Columna: Define la cabecera de cada una de las columnas de la sección detalle. Generalmente, se usa para indicar el nombre de los atributos listados en la sección detalle. 31
ireport - Aspectos Avanzados en el Diseño de Informes Cada informe se divide en 7 secciones (bandas): 4. Detalle: en esta sección se define el diseño con el que se muestra cada registro de la base de datos. Se imprime tantas veces como registros se recuperen. 5. Pie de Columna: Esta sección aparece al final de cada columna definida en la sección detalle. 6. Pie de Página: Esta sección aparece al final de cada página del informe. 7. Resumen: Esta sección aparece al final del informe. Generalmente se usa para presentar información resumida o posibles datos estadísticos. ti 32
ireport - Aspectos Avanzados en el Diseño de Informes Elementos de un Informe: Elementos Gráficos: Línea: dibuja una línea en el informe Cuadrado: dibuja un cuadrado en el informe Elipse: dibuja una elipse en el informe Elementos de Texto: Texto estático: muestra un texto estático en el informe Campo de texto: muestra el texto obtenido a partir de una expresión java Sub-Informes: incluye un informe ya existente Elementos Especiales: Código de barras: genera un código de barras Gráficas: permite crear una gráfica de datos 33
ireport - Aspectos Avanzados en el Diseño de Informes Elementos de un Informe: Campo Código de Elipse de Texto Barras Gráfica Línea Cuadrado Texto Estático Imagen Marco SubInforme 34
ireport - Aspectos Avanzados en el Diseño de Informes Campos de Texto: muestra el texto obtenido a partir de una expresión java String Resultado de Operaciones Matemáticas Valor devuelto por funciones Java Parámetros o Variables Campos de la conexión de datos Nos permite visualizar la información extraída de la base de datos. 35
ireport - Aspectos Avanzados en el Diseño de Informes Propiedades del Campo de Texto Expresión Java Campo de BD: $F{NombreCampo} Seleccionar de la Lista TextField->Expression 36
ireport - Aspectos Avanzados en el Diseño de Informes Campos de Texto Se pueden añadir campos de texto asociados a campos de la BD, Parámetros y Variables arrastrando a la zona de diseño los elementos de la Librería 37
ireport - Aspectos Avanzados en el Diseño de Informes Ejemplo: Título Cabecera de Página Detalle Pie de Página 38
ireport - Aspectos Avanzados en el Diseño de Informes Ejemplo: Cb Cabecera de Página Titulo Detalle Pie 39
ireport - Aspectos Avanzados en el Diseño de Informes Ejemplo: Texto Estático Líneas Campos de Texto Asociados a la BD Campos de Texto Asociados a Funciones Java Campos de Texto Asociados a Variables 40
ireport - Aspectos Avanzados en el Diseño de Informes Ejemplo: Líneas Texto Estático Campos de Texto Asociados a la BD Campos de Texto Asociados a Funciones Java Campos de Texto Asociados a Variables 41
ireport - Aspectos Avanzados en el Diseño de Informes Parámetros: Son valores enviados al informe desde un programa externo Definición: Menú Contextual Estructura del Documento: add-> Parameter 42
ireport - Aspectos Avanzados en el Diseño de Informes Parámetros: Se suelen utilizar para parametrizar la consulta SQL asociada a la fuente de datos $P {NombreParámetro} 43
ireport - Aspectos Avanzados en el Diseño de Informes Variables: Son objetos usados para almacenar el resultado de calculos como subtotales, sumas, etc. Definición: Menú Contextual Estructura del Documento : add-> Variable Nombre de la Variable Tipo de la Variable 44
ireport - Aspectos Avanzados en el Diseño de Informes Variables: Existen Variables Predefinidas PAGE_NUMBER: número de páginas del informe COLUMN_NUMBER: número de columnas REPORT_COUNT: número de registros por la consulta asociada al origen de datos PAGE_COUNT: número de registros mostrados en la página actual COLUMNS_COUNT: COUNT: número de registros mostrados en la columna actual Acceso al Valor de una Variable: Campo de Texto -> $V {NombreVariable} 45
ireport - Aspectos Avanzados en el Diseño de Informes Ejemplo: from Pelicula l p where p.genero.nombregenero=${genero} 46
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Se utilizan para crear diseños Maestro-Detalle a partir de relaciones 1 a muchos Ejemplo: Director (Maestro) Lista de Peliculas (Detalle) 47
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Se crean dos informes por separado Uno para el detalle Otro para el maestro La consulta del informe detalle se define parametrizada from Pelicula p where p.genero.nombregenero = $P{GENERO} Se incluye el detalle como subinforme del maestro y se le pasa el parámetro correspondiente 48
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Para incluir un informe como subinforme se crea un componente subinforme dentro de la sección detalle del maestro Seleccionamos usar un informe existente Seleccionamos el fichero correspondiente al informe detalle Pulsamos en Siguiente 49
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Indicamos que se utilice para el subinforme la misma conexión que se utiliza en el informe maestro Pulsamos en Siguiente 50
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Indicamos la expresión definida en el maestro que se va a utilizar para dar valor al parámetro definido en el subinforme Pulsamos en Terminar Expresión en el Maestro Parámetro subinforme 51
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes Una última modificación manual necesaria para que se visualicen los subinformes new HashMap($P{REPORT_ PARAMETERS_ MAP}) boton derecho-> Propiedades idd 52
ireport - Aspectos Avanzados en el Diseño de Informes Subinformes en relaciones muchos-a- muchos La consulta en el subinforme debe cambiarse. Por ejemplo, para listar todas las películaspor p director (desde la relación Pelicula-Director): Consulta en el informe Maestro: from Director d Lista de campos de Director: iddirector, nombre Consulta en el subinforme: from Pelicula p where $P{NOMBRE} IN p.directores.nombre Lista de campos de Pelicula: titulo, fecha Aquí, directores es el conjunto definido en la clase Pelicula que guarda las instancias de directores de una película. 53
JasperReport Qué es JasperReport? 54
JasperReport - Qué es JasperReport? Librería Java para la creación de informes OpenSource Generación de informes en archivos PDF, HTML, XLS, CSV y XML. Se pueden utilizar diversos orígenes de datos: JDBC, TableModels, JavaBeans XML, Hibernate, and CSV. Puede ser incluida en cualquier proyecto Java (incluyendo J2EE y Aplicaciones Web) 55
JasperReport - Qué es JasperReport? Documentación y Libreria (Registrado): http://jasperforge.org/sf/projects/jasperreportsorg/sf/projects/jasperreports API: http://jasperreports.sourceforge.net/api/ 56
JasperReport Configuración de Eclipse 57
JasperReport - Configuración de Eclipse Incluir la librería JasperReport en el proyecto Eclipse jasperreports-1.2.2.jar Project ->Properties ->Java Build Path-> Libraries 58
JasperReport - Configuración de Eclipse Incluir además las siguientes librerías: Jakarta Commons Digester Component (versión 1.1 o posterior) http://jakarta.apache.org/commons/digester/ commons-digester.jar Jakarta Commons BeanUtils Component (versión 1.1 o posterior) http://jakarta.apache.org/commons/beanutils/ commons-beanutils.jar Jakarta Commons Collections Component (versión 1.0 o posterior) http://jakarta.apache.org/commons/collections/ commons-collections.jar Jakarta Commons Logging Component (versión 1.0 o posterior) http://jakarta.apache.org/commons/logging/ commons-logging.jar También disponibles en el direcotrio /lib de ireport 59
JasperReport Visualizando informes desde Hibernate 60
JasperReport - Visualizando informes desde Hibernate La comunicación entre IReport y JasperReport se lleva a cabo a través de un conjunto de parámetros definidos en un objeto HashMap Cuatro Pasos 1. Creación de Objetos Session sesion= UtilidadHibernate.getSessionFactory().openSession(); opensession(); HashMap parametros = new HashMap(); 2. Definición de Parámetros // Obligatorio: Pasamos la fuente de datos (sesión Hibernate) parametros.put(jrhibernatequeryexecuterfactory.parameter_ put(jrhibernatequeryexecuterfactory HIBERNATE_SESSION,sesion); // Opcionales: parámetros del informe parametermap.put("genero","comedia"); 61
JasperReport - Visualizando informes desde Hibernate 3. Paso de Parametros al informe String filename= "reports/reportparametros.jasper"; JasperPrint informe= JasperFillManager.fillReport(fileName, parametermap); 4. Visualización del Informe JasperViewer.viewReport(informe, false); 62
JasperReport - Visualizando informes desde java Ejemplo Completo (ejecuta el informe de la página 46).. import net.sf.jasperreports.engine.jasperfillmanager; import net.sf.jasperreports.engine.jasperprint; import net.sf.jasperreports.engine.query.jrhibernatequeryexecuterfactory; import net.sf.jasperreports.view.jasperviewer; import net.sf.jasperreports.engine.jrexception;.. JasperPrint informe = null; Session sesion= UtilidadHibernate.getSessionFactory().openSession(); HashMap parametros = new HashMap(); parametros.put(jrhibernatequeryexecuterfactory. PARAMETER_HIBERNATE_SESSION,sesion); parametros.put("genero","comedia"); try { String filename= "reports/reportparametros.jasper"; informe= JasperFillManager.fillReport(fileName, parametros); } catch (JRException e){e.printstacktrace();} JasperViewer.viewReport(informe,false); 63
JasperReport - Visualizando informes desde java Para obtener más información consultar el API de las siguientes clases: JRHibernateQueryExecuterFactory: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/qusourceforge ery/jrhibernatequeryexecuterfactory.html JasperReport: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/jassourceforge perreport.html JasperFillManager: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/jassourceforge perfillmanager.html JasperPrint: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/jassourceforge perprint.html JasperViewer: http://jasperreports.sourceforge.net/api/net/sf/jasperreports/view/jrviesourceforge wer.html 64