Vous êtes sur la page 1sur 9

Generacin de reportes en mltiples formatos con JasperReport e iReport

Juan David Guarnizo Hernandez (juandavid794@gmail.com) Grupo de Investigacin en Teleinformtica con software de cdigo abierto GITECX Facultad de Ciencias Bsicas e Ingeniera Ingeniera de Sistemas Universidad de los Llanos Villavicencio, Colombia Introduccin Cuando se desarrolla una aplicacin esta no solo debe tener la capacidad de recolectar mucha informacin, sino que tambin debe organizarla y presentarla en usuario de una forma en que genere algn beneficio u ofrezca alguna informacin a tener en cuenta en el momento de toma de decisiones gerenciales o comerciales; sea por medio de grficas o reportes dinmicos. Bsicamente la generacin de reportes se resumen en el diseo y mapeo de datos dentro de un layout definido. Dentro de ese contexto surgen herramientas que facilitan esta labor. En el pasado esa rea fue dominada por productos comerciales como Crystal Report que con el pasar del tiempo se hacia mas robusto integrando nuevas funcionalidades, en el da de hoy se cuenta con herramientas open-source que cumplen con el mismo objetivo, que tambin ofrecen facilidad y robustez que la herramientas comerciales, es el caso de JasperReport. JasperReport Es un poderoso framework open-source para la generacin de reportes que presenta grandes habilidades en la organizacin y presentacin de contenido en pantalla, impresora o en formatos como PDF, HTML, XLS, CSV y XML. Esta completamente escrito en Java y puede usarse en infinidad de aplicaciones web, distribuidas o de escritorio habilitadas para la generacin dinmica de contenido. JasperReport organiza datos recuperados de una base de datos relacional a travs de JDBC. iReport Aunque JasperReport es una librera que nos facilita el desarrollo, tambin se cuenta con una herramienta de diseo que se puede integrar con Netbeans, donde se disea de forma grfica los archivos XML que se define a travs de etiquetas que obedece una estructura, vocabulario y restricciones declarados en una archivo DTD. Instalacin Cuando se quiere implementar JasperReport en algunas aplicaciones debemos realizar procesos paralelos al desarrollo de la aplicacin. Adelante presentare algunos ejemplo de diseo e implementacin de esta herramienta desarrollado en iReport utilizado como Plug-in de Netbeans. Por lo tanto tambin explicaremos esta forma de instalacin 1. El primer paso que se debe hacer el momento de instalar cualquier aplicacin en la plataforma de NetBeans es conseguir los archivos .nbm. En el caso de iReport se pueden conseguir en la direccin http://jasperforge.org/project/ireport, Es la pagina principal del proyecto y estos instaladores contienen incluidos las libreras de JasperReport.

2. Una vez en la pagina del proyecto iReport hay mltiples opciones de obtener la herramienta y mltiples plataformas, solo se ofrece en modalidad de plug-in en la plataforma NetBeans; las otras opciones son para utilizar de forma independiente en Windows, Mac Os o Linux.

3. Cuando se descarga iReport para trabajar en NetBeans se obtiene un archivo comprimido el cual al descomprimirse se obtienen los siguientes archivos.

4. Una vez se obtienen los archivos de instalacin en NetBeans entramos a Herramientas Complementos Descargado Agregar Plugin. Seleccionan los archivos de instalacin y se procede a realizar la instalacin.

5. En este punto NetBeans ya contiene las libreras de JasperReport y tambin tiene incorporado la herramienta de diseo de reportes iReport, la cual se relaciona directamente con una Base de Datos configurada en la barra de herramientas y tambin existe una nueva opcin en la creacin de archivos.

Como Funciona?

Principalmente debemos comprender que se inicia con un archivo XML donde las etiquetas difieren entre elementos como textos estticos, textos dinmicos, imgenes y formas geomtricas, tambin las etiquetas establecen las variables, campos, parmetros, posiciones y extensiones; dentro del diseo tambin se incluye la consulta a realizar en la base de datos, de donde se obtendr la informacin que finalmente se mostrara en el reporte. Una vez creado nuestro diseo, este debe ser compilado, por lo cual se genera un archivo de extensin .jasper, durante este proceso de compilacin se verifica que la sintaxis del archivo XML para comprobar la consistencia del diseo.Una vez el diseo se encuentra compilado entran en juego las clases que permiten visualizar, imprimir o exportar el reporte, para dar fin al ciclo de vida. Conceptos de Bsicos de Diseo

El diseo se representa en un template que va a ser utilizado por el motor de JasperReport para generar un reporte de acuerdo con la estructura y completando con la informacin obtenida de la base de datos. Cuando diseamos un reporte debemos tener en cuenta que el template esta dividi principalmente en la siguientes secciones comnmente llamadas Band o Bandas que cuando se genera el reporte con los datos, cada una de ella se comporta de forma diferente: Title Page Header Column Header Detail 1 Column Footer Page Footer Last Page Footer Summary No Data

Cuando diseamos debemos tener en cuenta que estos reportes estn muy adjuntos a funcionar con una fuente de datos, cuando esta fuente es una base de datos en Postgres, MySQL entre otras, debemos especificar la consulta (Query) que se va a realizar. Tambin es muy importante que JasperReport maneja tres tipos diferentes de variables para el manejo de los datos que son: Parmetros: Se le asigna su valor antes de que el reporte sea llamado, principalmente se utilizan para filtrar la informacin de la consulta a la base de datos o para obtener datos que no se encuentra fcilmente en la fuente de datos. Variables: Son utilizadas para realizar clculos dentro del reporte, como ejemplo el conteo de las paginas. Campos o Filas: Representan la nica manera de mapear las columnas o datos obtenidos de la consulta realizada al sistema administrador de bases de datos, deben tener como requerimiento el mismo nombre de cada columna con su tipo de dato compatible.

Para complementar el uso de los tipos de variables que podemos usar en JasperReport, tenemos las Expresiones, que hacen referencia a ellos de la siguiente manera: $P{Nombre} para hacer referencia a algn parmetro previamente declarado $V{Nombre} para hacer referencia a alguna variable previamente declarado $F{Nombre} para hacer referencia a algn campo o columna previamente declarado

Obteniendo estos conceptos bsicos de diseo, procederemos a crear un ejemplo completo utilizando los anteriormente citado:
<?xmlversion="1.0"encoding="UTF8"?> <jasperReportxmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports

http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"name="reportname"pageWidth="595"pageHeight="842" columnWidth="535"leftMargin="20"rightMargin="20"topMargin="20"bottomMargin="20"> <propertyname="ireport.zoom"value="1.0"/> <propertyname="ireport.x"value="0"/> <propertyname="ireport.y"value="0"/> <queryString> <![CDATA[SELECTA.Identificacion,A.NombreAsistente,I.NombreInstitucionFROMAsistentesA, InstitucionesIWHEREI.idInstitucion=A.Institucion]]> </queryString> <fieldname="Identificacion"class="java.lang.String"/> <fieldname="Asistente"class="java.lang.String"/> <fieldname="Institucion"class="java.lang.String"/> <title> <bandheight="59"splitType="Stretch"> <staticText> <reportElementx="0"y="0"width="555"height="59"/> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Arial"size="40"isBold="true"/> </textElement> <text><![CDATA[VJornadadelSoftwareLibre]]></text> </staticText> </band> </title> <pageHeader> <bandheight="26"> <staticText> <reportElementx="0"y="0"width="555"height="26"/> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Arial"size="20"isBold="true"/> </textElement> <text><![CDATA[Asistentes]]></text> </staticText> </band> </pageHeader> <columnHeader> <bandheight="20"splitType="Stretch"> <staticText> <reportElementx="0"y="0"width="82"height="20"/> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Arial"size="12"/> </textElement> <text><![CDATA[Identificacion]]></text> </staticText> <staticText> <reportElementx="82"y="0"width="254"height="20"/> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Arial"size="12"/> </textElement> <text><![CDATA[Nombres]]></text> </staticText> <staticText> <reportElementx="336"y="0"width="219"height="20"/> <textElementtextAlignment="Center"verticalAlignment="Middle"> <fontfontName="Arial"size="12"/> </textElement> <text><![CDATA[Institucion]]></text> </staticText> </band>

</columnHeader> <detail> <bandheight="20"splitType="Stretch"> <textField> <reportElementx="82"y="0"width="254"height="20"/> <textElementtextAlignment="Left"verticalAlignment="Middle"markup="none"> <fontfontName="Arial"size="12"/> </textElement> <textFieldExpressionclass="java.lang.String"><! [CDATA[$F{Asistente}]]></textFieldExpression> </textField> <textField> <reportElementx="0"y="0"width="82"height="20"/> <textElementtextAlignment="Left"verticalAlignment="Middle"markup="none"> <fontfontName="Arial"size="12"/> </textElement> <textFieldExpressionclass="java.lang.String"><! [CDATA[$F{Identificacion}]]></textFieldExpression> </textField> <textField> <reportElementx="336"y="0"width="219"height="20"/> <textElementtextAlignment="Left"verticalAlignment="Middle"markup="none"> <fontfontName="Arial"size="12"/> </textElement> <textFieldExpressionclass="java.lang.String"><! [CDATA[$F{Institucion}]]></textFieldExpression> </textField> </band> </detail> </jasperReport>

Generacin del Reporte desde el cdigo Java Observamos anteriormente la forma de disear un reporte con iReport iniciando desde lo mas simple. Ahora ya que aprendimos a disear y compilar el reporte, veremos como es llamado en reporte desde

una clase Java indicndole los valores de las variables de tipo Parmetro y la fuente de donde obtendr los datos, tambin debemos indicar en nuestra clase que tipo de salida obtendr; es decir, si se exporta a un archivo, se har una impresin o se mostrara en el JasperViewer.
importjava.sql.Connection; importjava.sql.DriverManager; importjava.util.HashMap; importjava.util.Map; importnet.sf.jasperreports.engine.JasperExportManager; importnet.sf.jasperreports.engine.JasperFillManager; importnet.sf.jasperreports.engine.JasperPrint; importnet.sf.jasperreports.engine.JasperPrintManager; importnet.sf.jasperreports.view.JasperViewer; publicclassEjemploJSL{ publicstaticvoidmain(String[]args){ newEjemploJSL(); } publicEjemploJSL(){ try{ MapParametros=newHashMap(); JasperPrintReporte=JasperFillManager.fillReport("EjemploJSL.jasper",Parametros,this.getConnection()); JasperExportManager.exportReportToPdfFile(Reporte,"archivo.pdf"); JasperExportManager.exportReportToHtmlFile(Reporte,"archivo.html"); JasperPrintManager.printReport(Reporte,true); JasperViewer.viewReport(Reporte); } catch(Exceptionex){} } privateConnectiongetConnection(){ try{ Class.forName("com.mysql.jdbc.Driver"); ConnectionConn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jsl","root",""); return(Conn); } catch(Exceptionex){return(null);} } }

Vous aimerez peut-être aussi