Está en la página 1de 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);}
}

También podría gustarte