Jasper Reports
Es una herramienta open source para la generación de reportes basado en la tecnología JAVA, con capacidad de exportacion en formato PDF,XML,HTML,CSV y XLS.
Tutoriales
Video
Escritos
Funcionamiento Interno
Requerimientos
Jakarta Commons BeanUtils Component (version 1.7 o superior)
Jakarta Commons Collections Component (version 2.1 superior)
Jakarta Commons Javaflow (Sandbox version)
Jakarta Commons Logging Component (version 1.0 o superior)
Jakarta Commons Digester Component (version 1.7 or later)
de acuerdo al formato que sera exportado, son necesarios:
Text - Free Java-PDF library by Bruno Lowagie and Paulo Soares (version 1.01 or later)
Jakarta POI (version 2.0 or later) para formato xls
JExcelApi (version 2.5.7 or later)
Construccion
Definicion y Estructura
Cada reporte tiene definido su diseño en un archivo xml, por convención su extensión es .jrxml y posee 7 secciones: Título, encabezado de la página, encabezado del detalle, detalle,fin del detalle, pie de página, sumario. Cada seccion es conocida como banda y tiene un alto determinado.
el DTD que define la sintáxis del archivo jrxml de los informes se encuentra aqui, es bueno hacer pruebas con archivos creados manualmente y para diseños mas complejos se debe considerar el uso de iReport que es una herramienta de diseño para reportes jasperReport escrito en Java de licencia GNU, con un editor WYSIWYG, asi que no debemos conocer toda la sintáxis de jasperReport para hacer informes de alta calidad. Las últimas versiones traen todas las librerias necesarias para su funcionamiento.
Compilacion
Una vez se tiene el diseño del reporte es necesario realizar una compilacion que permita revisar la estructura del archivo .jrxml. Para este proceso de compilacion se utiliza la clase JasperCompilerManager. Ofrece tres salidas:
un objeto de tipo JasperReport compilado en memoria (metodos compileReport())
- un archivo (metodos compileReportToFile())
un flujo de salida OutputStream
Despues de obtener uno de estos tres estados, el siguiente paso es llenar el reporte con datos, para este proceso se utiliza la clase JasperFillManager.
Para llenar el reporte, esta clase debe confirmar que reporte ya ha sido compilado exitosamente, por eso recibe como parametros las salidas de la clase JasperCompilerManager. sus métodos se clasifican en 3 tipos:
Ingreso de Datos
Despues de obtener uno de estos tres estados, el siguiente paso es llenar el reporte con datos, para este proceso se utiliza la clase JasperFillManager.
Para llenar el reporte, esta clase debe confirmar que reporte ya ha sido compilado exitosamente, por eso recibe como parametros las salidas de la clase JasperCompilerManager. sus métodos se clasifican en 3 tipos:
Los que retornan un objeto JasperPrint (JasperFillManager.fillReport)
Los que crean un archivo (JasperFillManager.fillReportToFile)
Los que dan una salida por Flujo OutputStream (JasperFillManager.fillReportToStream).
Estos métodos reciben distintos parámetros adicionales, dependiendo de la forma en que llenaremos el reporte.
Ejemplo 1
Como dijimos, la creación del reporte consta de dos partes: la estructura y las operaciones para llenarlo con datos, aquí está el codigo de un archivo XML(la estructura) que me imprime el típico mensaje de prueba:
<?xml version="1.0"?>
<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="ejemplo1">
<detail>
<band height="20">
<staticText>
<reportElement x="180" y="0" width="200" height="20"/>
<text><![CDATA[Hola Inmundos!]]></text>
</staticText>
</band>
</detail>
</jasperReport>miremos las partes de este XML:
- La primera linea me indica la version de etiquetado XML que utilizamos en el archivo.
La etiqueta <!DOCTYPE.. especifica que el XML es un archivo de jasperreport y la URL donde se tomarán las reglas de este XML( el DTD del XML).
la siguiente etiqueta: <jasperReport> marca el inicio de mi reporte, aqui puedo definir atributos tales como el nombre, las margenes, el numero de columnas, si se imprime en vertical u horizontal, etc.
ahora se inicia la definición de cada una de las secciones del reporte, obviamos la definición del titulo, ya que nuestro mensaje lo mostraremos en la seccion detalle, para ello abrimos la etiqueta <detail>
luego especificamos el alto de esta seccion con la etiqueta <band> las medidas debemos indicarlas en pixeles
para mostrar un texto fijo, es decir que su valor no cambia, utilizamos la etiqueta <staticText> y dentro de ella definimos diferentes propiedades como la ubicacion,el tamaño de fuente, estilo, color de fondo, etc.
Al terminar nuestra definición cerramos las etiquetas en orden inverso,es decir, las ultimas que abrimos son las primeras que cerramos(LIFO)
hacer estos archivos manualmente es util para comprender la estructura de un reporte, pero en diseños mas complejos como graficas o tablas,al igual que en diseño HTML, es conveniente utilzar editores más potentes, como iReport.
