Documentos de Académico
Documentos de Profesional
Documentos de Cultura
JasperReport & Ireport
Autor:
José Luis Ayerdis Espinoza
Índice de contenido
Requisitos para comprender y practicar........................................................................4
Convenciones................................................................................................................4
Los códigos..............................................................................................................4
La consola de comandos..........................................................................................5
Tablas de descripcion ..............................................................................................5
Notas o Referencias..................................................................................................5
Errata.............................................................................................................................5
I. Introducción a JasperReport...........................................................................................6
Breve Historia...............................................................................................................6
¿Que es JasperReport?..................................................................................................6
Características...............................................................................................................7
Posicionamiento de elementos flexibles..................................................................7
Múltiples maneras de presentar datos......................................................................7
Múltiples fuentes de datos........................................................................................7
Soporte a subreportes...............................................................................................8
Capacidad de exportación .......................................................................................8
Obtener JasperReport....................................................................................................8
Construcción de las fuentes(sources) con Ant.........................................................8
Formatos soportados...................................................................................................10
Donde Conseguir Soporte...........................................................................................11
Resumen de Capitulo..................................................................................................11
II. Comenzando JasperReport..........................................................................................12
Configurando todo......................................................................................................12
Plantilla de Reporte JRXML ......................................................................................13
¿Que es JRXML?...................................................................................................13
Estructura de una plantilla......................................................................................13
Previsualizando diseño de plantilla JRXML...............................................................14
Creando binario a partir de plantilla (.jasper).............................................................16
Compilando plantilla con programaticamente.......................................................16
Previsualizando el precompilado con ant...............................................................18
Compilando plantilla con Ant................................................................................19
Rellenar el reporte (filling).........................................................................................21
Visualización del reporte............................................................................................23
Resumen de Capitulo..................................................................................................24
Durante el capitulo anterior aprendimos detalles fundamentales para la utilizacion de
JasperReport, estos seran de vital importancia en los capitulos subsiguientes,
terminologias y usos particularmente de ant. Algunos puntos fundamentales:..........24
III. Estructura de Reportes...............................................................................................25
Elementos de Reportes(tags).......................................................................................25
Propepiedades ( <property> ): ..............................................................................25
Importacines ( <import> ): ...................................................................................25
Parametros ( <parameter> ): .................................................................................26
Cadena de consulta( <queryString> ): ..................................................................26
Campos( <field> ): ...............................................................................................26
Variables( <variable> ): .......................................................................................26
Bandas de Reportes.....................................................................................................26
Background............................................................................................................26
Title........................................................................................................................27
Page Header...........................................................................................................27
Column Header......................................................................................................28
Report Detail..........................................................................................................28
Column Footer.......................................................................................................28
Page Footer.............................................................................................................29
Last Page Footer.....................................................................................................29
Summary................................................................................................................29
Practicas de elementos con Ireport.............................................................................30
¿Que es Ireport?.....................................................................................................30
Ireport 3.0, creando reportes..................................................................................30
Estudiando JRXML generado por Ireport..............................................................34
Proceso de creacion de un reporte..............................................................................35
Vistazo JasperReport API...........................................................................................36
JasperDesign..........................................................................................................36
JasperCompileManager..........................................................................................36
JasperReport...........................................................................................................36
JasperPrint..............................................................................................................37
JasperFillManager..................................................................................................37
JasperPrintManager................................................................................................37
JasperExportManager.............................................................................................37
Resumen de Capitulo..................................................................................................37
IV. Reportes dinámicos, con fuentes de datos JDBC......................................................38
Fuentes de Datos.........................................................................................................39
Tipos ......................................................................................................................39
Ventajas..................................................................................................................40
Crear Fuentes de Datos JDBC....................................................................................40
Fuentes de datos JDBC ¿que sucede?........................................................................44
Creacion de Reportes Dinamicos: Uso de la fuente de datos.....................................45
Filtros.....................................................................................................................50
Ordenar...................................................................................................................53
Invocar Reporte Dinamico desde Java........................................................................54
Pregunta Bonus: ¿Como cambiar propiedades reporte desde java?..........................55
Resumen de Capitulo..................................................................................................56
V. Reportes: diseño y propiedades utiles.........................................................................57
Estilos personalizados.................................................................................................57
Agrupaciones de Reportes..........................................................................................59
Parametros ..................................................................................................................61
Parametros no modificables (NonModifiable )....................................................61
Parametros modificables (Modifiable)...................................................................62
Utilizar parametros dentro de consultas.................................................................64
Variables.....................................................................................................................65
Variables no modificables (NonModifiable)........................................................65
Variables modificables (Modifiable).....................................................................65
Utilizar Variables en Reportes...............................................................................66
Uso de parametros con Java........................................................................................67
Bonus: Como colocar Imagenes con Blob (como flujos de bytes).............................68
Crosstabs.....................................................................................................................68
Prefacio
Requisitos para comprender y practicar.
Convenciones
En este documento ud observara distintos estilos de textos, todos tienen un
proposito especifico para que le preste particular atencion.
Los códigos
package com.org.report;
import java.util.HashMap;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
Codigos con bloques relevantes, prestar mayor atencion a las negrillas para
orientarse mejor:
<title>
<band height="50">
<textField>
<reportElement x="0" y="0" width="200" height="50" />
<textFieldExpression
class="java.lang.String">$P{Title}</textFieldExpression>
</textField>
</band>
La consola de comandos
~$ ant -help
Tablas de descripcion
Método Descripción
nombredelMetodo() Breve descripción del metodo, resaltando
los warnings, o algo importante.
Fuente( Generalmente Traducida): URL, referencia, autor, etc.
Notas o Referencias
Para notas o referencias en particular se hara uso de una caja como esta!!!
Errata
En Abril del 2005 JasperSoft formalmente patrocino el proyecto, la versión 1.0 fue
liberada en Julio de ese mismo ano, y originalmente se licencio como CopyLeft para
luego ser movido a GPL permitiendo incluir un paquete de productos mas amplio como
iReport Visual Designer para JasperReport. Entre productos derivados de JasperSoft
están JasperServer una aplicación web de Java que provee capacidad avanzada de servir
reportes con permisos.
¿Que es JasperReport?
JasperReport es una librería de código abierto que permite la creación de reportes en
Java con facilidad de exportación a múltiples formatos. JasperReports es un contenido
de la prestación de biblioteca, no una aplicación independiente. Esta escrita en código
Java y es soportada por cualquier plataforma que soporte Java.
Características
JasperReport tiene un sin numero de características que hacen que sea la librería de
generación de reportes mas completa de todas para Java. Entre las generales estan los
soportes para imágenes, flujos de datos (InputStream), gráficas y cuadros, estos ultimo
con la ayuda de JFreeChart. En resumen mencionamos las siguientes:
● Posicionamiento de elementos flexibles.
● Múltiples maneras de presentar datos.
● Proporciona múltiples formas de fuentes de datos.
● Soporte para subreportes.
● Exportación a una gran variedad de formatos comunes.
Posicionamiento de elementos flexibles.
JasperReport nos permite separar los datos en secciones opcionales del reporte, estas se
representan como bandas e incluyen las siguientes:
● Report Title(Titulo del Reporte): Esta aparece al tope del la pagina del
reporte.
● Page Header(Encabezado de pagina): aparece al tope de cada pagina.
● Detail Section(Seccion de detalle): contiene la informacion vital del reporte.
● Page footer(Pie de pagina): se posiciona al final de cada pagina del reporte.
● Sumary Section(Resumen): la cual aparece al final del reporte.
Múltiples maneras de presentar datos.
JasperReport provee la capacidad de presentar información de manera textual o gráfica.
Nos permite utilizar extensiones generadas para mostrar información dinámica.
Múltiples fuentes de datos.
JasperReport como tal provee además de un extenso soporte para multiples tipos de
conexiones JDBC, Hibernate, EJB o XML DataSource. Tambien da la oportunidad de
pasar informacion como parametros a traves de cualquier clase Java que lo requiera.
Soporte a subreportes
Entre las mas destacadas caracteristicas es la de subreportes, estos facilitan la creacion
de reportes con gran variedad de informacion que requieren informacion de multiples
fuentes de datos como los maestro detalles.
Capacidad de exportación
Una de las grandes riquezas de JasperReport es que se auxilia de otras librerías para
agregar utilidad, particularmente en la exportación de reportes a múltiples formatos (ver
formatos soportados mas abajo).
Obtener JasperReport
Al ser una librería la cual se auxilia de muchas otras para su extensión, como hemos
hablado, entonces mas que hablar de instalación, podríamos referirnos a como hacer
obtenerlo . Lo primero que haremos es dirigirnos a la pagina de descarga y descargamos
la ultima versión disponible del proyecto:
http://sourceforge.net/projects/jasperreports/
Ahora que tenemos el jasperreports-3.0.0.jar, ahora para usarlo haremos uso del
ClassPath, con la opcion -cp al compilar.
Construcción de las fuentes(sources) con Ant
Para los mas atrevidos, vamos a descargarnos desde la misma pagina del proyecto:
(http://sourceforge.net/projects/jasperreports/ )las fuentes(source) de JasperReport, para
compilarlas con Ant, este tambien tiene una serie de ejemplos con JasperReport.
Carpeta Descripcion
/build Donde se encuentra los .class del proyecto
compilado.
Imagen 1-2. Resultado del comando ant -p, muestra las opciones de compilacion.
Nos desplegara las opciones de compilación, para conseguir por ejemplo la
distribución, utilizamos el comando ant con la opcion de compilacion jar
~$ ant jar
Imagen 1-3. Resultado del comando ant jar, muestra como se compila el
jasperreport-3.0.0.jar, con ant.
Formatos soportados
Resumen de Capitulo
A lo largo del capitulo anterior logramos conocer:
Configurando todo
Para tener nuestro ambiente óptimo de trabajo nos auxiliaremos por momentos de
cualquier procesador de texto plano, en lo personal el auto utilizara la herramienta vim,
pero ud podrá hacer uso de la que mas se adapte a sus necesidades, si esta en ambiente
Win32 le recomendaría Notepad++ (http://notepad-plus.sourceforge.net/es/site.htm). Si
se preguntara si utilizaremos IDE, lo haremos en los próximos capítulos, y se explicara
como configurarlo para hacer uso de JasperReport y los Plugin que contienen para hacer
uso de iReport mas fácilmente.
● Crearemos una carpeta donde tengamos los ejemplos, le llamare cap2 (ud puede
crearla como guste).
● Ubicaremos la carpeta JasperReport compilada, dentro de una ubicación en
nuestro Disco duro. (En los ejemplos la ruta ubicada sera /usr/lib/jasperreport)
● Nos aseguramos de tener ant instalado.
● Escogemos un editor de texto y la consola lista y ahora manos a la obra.
¿Que es JRXML?
Es un formato basado en XML, esto significa que esta compuesto por etiquetas (tags),
bajo esta extensión se almacena la descripción de la plantillas de reportes, con
información que la librería utiliza para compilar el reporte y transformarlo en un
.jasper. Esta es la diferencia entre ambos formato, el primero(JRXML) debe ser
compilado en tiempo de ejecución y el segundo no, simplemente se visualiza. Esto es
similar al proceso de ant, para la compilación basado en un XML generalmente
build.xml. Si desea obtener información a profundidad sobre el DTD del formato puede
descargarlo directamente de http://jasperreports.sourceforge.net/dtds/jasperreport.dtd.
Sin embargo abordaremos durante todo el libro casi todos los rasgos de esta extensión
dado que se considera como la mas básica e importante al momento de crear reportes
con JasperReport.
Estructura de una plantilla
Siguiendo con la lógica del capitulo, tengamos presente que una plantilla es un
documento con extensión JRXML y que tienen una estructura estándar basada en el
DTD del mismo. JasperReport a través del formato JRXML sigue la siguiente estructura
del archivo PrimerPlantilla.jrxml:
<?xml version="1.0"?>
<!DOCTYPE jasperReport
PUBLIC "-//JasperReports//DTD Report Design//EN"
"http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<jasperReport name="Plantilla">
<detail>
<band height="200">
<staticText>
<reportElement x="20" y="0" width="300" height="30"/>
<text><![CDATA[Este es un ejemplo de reportes con JasperReport
3.0]]></text>
</staticText>
</band>
</detail>
</jasperReport>
Ahora si bien, JasperReport como tal no posee una GUI de avanzada que ayude a
diseñar los reportes( es necesario auxiliarse de iReport). Sin embargo lo que si posee es
una clase basada en Swing llamada net.sf.jasperreports.view.JasperDesigner la cual
carga y despliega una plantilla como la antes creada.
Imagen 2-2. Para visualizar se digita ant, donde se guardo el build.xml.
Es valido aclarar que JasperDesignViewer, tan solo presenta informacion que contenga
texto, como en este caso particular, pero no se espera ver recursos que tengan
operatividad con base de datos, en vez obtendrá la expresion de dicha fuente. (Lo
veremos mas adelante), esto es por que esta clase (JasperDesignViewer), no accede a
fuentes de datos o parametros del reporte.
Creando binario a partir de plantilla (.jasper)
Hasta ahora hemos visto el formato basico JRXML, que en realidad es un XML que
describe el reporte y el posicionamiento de sus elementos. Pero en realidad estos no
pueden ser usados directamente para visualizar un reporte es nada mas para crear la
estructura del mismo, es por esto que las plantillas (JRXML), son compiladas para
generar la vista final del mismo estos documentos se denominan Archivos Jasper, en
honor a la extension .jasper que contienen. Existen dos metodos para crear este
documento, como dijimos estos tienen que provenir de un JRMXL, la primera manera
es programaticamente, y la segunda es mediante la compilacion Ant.
Compilando plantilla con programaticamente
Este metodo es particularmente efectivo cuando se necesitan que el reporte sea
dinamico en tiempo de ejecucion pueda cambiar algunas particularidades del JRXML.
Se utlizan un metodo provista por las librerias de jasperreport, llamado
compileReportToFile.
Clase: net.sf.jasperreports.engine.JasperCompileManager
Método Descripción
static String compileReportToFile(String Compila el diseño del reporte XML,
sourceFileName) especificado por el parámetro.
static void compileReportToFile(String Compila el diseño del reporte XML
sourceFileName, String destFileName) especificado en el
parámetro(sourceFileName), y coloca el
resultado del archivo especificado por el
segundo parámetro.
static void Compila el diseño del reporte recibiendo
compileReportToFile(JasperDesign un objeto de JasperDesign1 y colocando
jasperDesign, String destFileName) el .jasper en el segundo parametro de
destino.
Fuente(Traducida): http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/
JasperCompileManager.html
1 JasperDesign es una clase que se utiliza como una representacion en memoriadel diseño, la cual puede
ser facilmente creada con el archivo JRXML o viceversa. Ver (http://jasperreports.sourceforge.net/api/
net/sf/jasperreports/engine/design/JasperDesign.html)
Para la compilación de cogido escribimos una clase Java que haga uso de
JasperCompileManager, similar a la siguiente:
//Importaciones
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
Recordemos que el -cp especifica algo adicional al classpath de java, en windows seria
algo parecido a lo siguiente:
C:\javac -cp .;jasperreports-3.0.0.jar CompileProgramaticly.java
Algunas particularidades con el anterior es que se agrega lib/*, que son las
dependencias propias de jasperreport, como el Apache Digester, es una librería que
se utiliza para la creación de reglas a traves de XML. Las cuales se profundizan en los
capítulos X, XX, XXX.
Si todo esta, como debería entonces vera que se creo un archivo .jasper en directorio de
trabajo.
<target name="viewDisenoCompilado"
description="Lanza la aplicacion de previsualizar el diseño
compilado.">
<java classname="net.sf.jasperreports.view.JasperDesignViewer"
fork="true">
<arg value="-F${file.name}.jasper"/>
<classpath refid="classpath"/>
</java>
</target>
</project>
Si nota el archivo que busca es .jasper y no .jrxml, por tanto se comprueba que los
.jasper también pueden ser previsualizado. Para ver como funciona digitemos en
consola con el target definido.
~$ ant viewDisenoCompilado
Compilando plantilla con Ant
Método Descripción
static String fillReportToFile(String Rellena el diseño del reporte y lo carga a
sourceFileName, java.util.Map un archivo especifico. Y retorna el nombre
parameters) del archivo creado.
static String fillReportToFile(String Rellena el diseño del reporte y lo carga en
sourceFileName, java.util.Map un archivo, ademas utiliza connection
parameters, java.sql.Connection como fuente de datos y ejecutar consultas
connection) SQL. Y retorna el nombre del archivo
creado.
static String fillReportToFile(String Rellena el diseño del reporte y lo carga en
sourceFileName, java.util.Map un archivo, usa un JRDataSource como
parameters, JRDataSource dataSource ) fuente de datos. Y retorna el nombre del
archivo creado.
static void fillReportToFile(String Rellena el diseño del reporte y lo carga a
sourceFileName, String destFileName, un archivo especifico. Y lo coloca en el
java.util.Map parameters) archivo destino especificado
Fuente(Traducida): http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/
JasperFillManager.html
Existen una variedad de metodos a utilizar puede ver mas informacion en el API oficial
de JasperReport.
A continuacion crearemos la clase Java que nos permitira rellenar el reporte:
import static java.lang.System.*;
import java.util.HashMap;
import net.sf.jasperreports.engine.*;
public class FillReportClass
{
public static void main(String... args)
{
try
{
out.println("Rellenando el reporte");
JasperFillManager.fillReportToFile("PrimerPlantilla.jasper",new
HashMap(), new JREmptyDataSource());
out.println("Rellenado con exito!!");
}
catch (JRException e)
{
err.println("Error JRException");
e.printStackTrace();
}
}
}
Imagen 2-6. Visualizacion del Reporte con JasperViewer, compilado por ant.
Resumen de Capitulo
Durante el capitulo anterior aprendimos detalles fundamentales para la
utilizacion de JasperReport, estos seran de vital importancia en los capitulos
subsiguientes, terminologias y usos particularmente de ant. Algunos puntos
fundamentales:
● Crear la plantillas.
● Previsualizar la plantilla (opcional).
● Tecnicas de creacion de .jasper:
○ Por programacion
○ Por compilacion ant.
● Rellenar plantillas binarias .jasper
● Visualizar Reportes
III. Estructura de Reportes
Al finalizar el capitulo Ud debera poder:
● Conocer y aplicar los elementos que conforman un reporte en JasperReport.
● Visualizar un reporte dentro de un navegador.
● Familiarizarse con el API de JasperReport.
Elementos de Reportes(tags)
Todos los reportes en JasperReport se encuentran divididos en partes que representan
distintos elementos dentro de la creacion de los mismos; dicho de una manera mas facil
“cada reporte tiene elemento, y cada elemento sirve para visualizar algo de manera
distinta”. Por tanto sin darse cuenta ud ya ha hecho uso de estos elementos a los que se
denominan (tags) o etiquetas, por ejemplo la etiqueta <detail> se utiliza para desplegar
texto estatico. Sin embargo, JRXML puede contener muchos mas elementos, de hecho
existen al menos 8 elementos como <detail>, que se conocen como bandas, por
reportes, aunque no es obligatorios usarlos todos, es depende de que tipo y como desea
desplegar esa informacion.
Algunos de los siguientes elementos pueden ser utilizados, dado que las bandas las
discutiremos por luego:
■ Propepiedades ( <property> ):
Es un elemento arbitrario y opcional, generalmente coloca informacion
adicional al reporte. Estas pueden ser retribuidas como un Java Property
invocando el metodo JasperReport.getProperty().
<property name="mipropiedad" value="mivalor"/>
■ Importacines ( <import> ):
Mediante este elemento es posible importar paquetes o clases de Java.
Se utiliza una para cada importacion por ejemplo:
<import value=”java.util.Vector”>
■ Parametros ( <parameter> ):
La etiqueta permite tener parametros definidos en el reportes, los cuales
luego pueden ser sustituido al invocar el reporte mediante un objeto de
java.util.Map, un reporte puede tener cero o mas parametros:
<parameter name="miparametro" class="java.lang.String"/>
<parameter name="parametroInt" class="java.lang.Integer"/>
■ Cadena de consulta( <queryString> ):
Este elemento permite colocar una sentencia para una consulta SQL, para
obtener datos de una base de datos, un reporte solo puede contener entre
cero y un elemnto queryString, es necesario para realizar consultas:
<queryString> <![CDATA [select columna1,columna2 from
tabla ]]</queryString>
■ Campos( <field> ):
Es un elemento visualizable en el reporte, utilizado comunmente para
desplegar informacion de una fuente de dato, pueden ser combinados con
otros elementos para obetener salidas necesarias, es posible tener cero o
mas campos:
<field name="Nombre_Campo" class="java.lang.String"/>
<field name="Cantidad" class="java.lang.Integer"/>
■ Variables( <variable> ):
Se utiliza varias veces, ayuda a simplificar expresiones, en los reportes
puede tener de cero a mas:
<variable name="MiVariable" calculation="Sum"
class="java.lang.Integer > <variableExpression>
$F{Cantidad}</variableExpression> </variable>
Bandas de Reportes
Las bandas son elementos mas visibles en los reportes, delimitan sectores o regiones en
los cuales se pueden colocar elementos, a partir de estas secciones los elementos
contenido se visualizaran diferentemente.
Background
El bacground es un elemento usado para colocar un fondo al reporte, es util al momento
de colocar una imagen o texto como marca de agua. Es la banda mas simple de utilizar y
se coloca al fondo de cada pagina del reporte. Esta banda puede ser usada a lo sumo una
vez:
<background>
<band height="820">
<image scaleImage="Clip" hAlign="Left" vAlign="Bottom">
<reportElement x="0" y="0" width="200" height="820"/>
<imageExpression>"image_fondo.gif"
</imageExpression>
</image>
</band>
</background>
Title
Otra basica pero util banda del reporte, se muestra a manera de encabezado y aparece
tan solo una vez en cada reporte, un reporte solo tiene un <title>, en este puede colocar
informacion relevante como el Nombre del reporte, una resumen del reporte, etc.
<title>
<band height="80">
<staticText>
<reportElement x="100" y="10" width="500" height="80"/>
<text>
<![CDATA[Titulo del Reporte]]>
</text>
</staticText>
</band>
</title>
Page Header
Este elemento se imprime al inicio de cada pagina del reporte, es un encabezado que
identifica elementos por paginas. Un reporte solo puede contener un pageHeader
<pageHeader>
<band height="40">
<staticText>
<reportElement x="200" y="30" width="500" height="30"/>
<text>
<![CDATA[Encabezado de Pagina]]>
</text>
</staticText>
</band>
</pageHeader>
Column Header
El siguiente es un encabezado que aparece por columna, la cantidad de elementos debe
concordar con la cantidad de columnas especificadas en el reporte.
<columnHeader>
<band height="20">
<staticText>
<reportElement x="180" y="50" width="200" height="20"/>
<text>
<![CDATA[Encabezado de columnas]>
</text>
</staticText>
</band>
</columnHeader>
Nota: En caso de existir una sola columna este elemento es ignorado
Report Detail
Este elemento define la seccion mas importante y repitende de datos en el reporte,
deacuerdo a la cantidad de filas y factores de agrupacion proporcionados por la fuente
de datos. La plantilla solo puede contener entre 0 a 1 elementos de detalles, la mayoria
contiene un detalle dado que es la mejor manera de visualizar repeticiones de datos.
<detail>
<band height="20">
<textField>
<reportElement x="10" y="0" width="600" height="20"/>
<textFieldExpression class="java.lang.String">
<![CDATA[$F{campoBD}]]>
</textFieldExpression>
</textField>
</band>
</detail>
Column Footer
Los elementos de tipos footer se colocan luego de terminar los detalles siguen la misma
logica que sus homologos header y en general se utilizan para presentar resumenes de
totales/subtotales, cantidades promediadas, etc.
<columnFooter>
<band height="20">
<staticText>
<reportElement x="0" y="0" width="200" height="20"/>
<text>
<![CDATA[Pie de columnas]]>
</text>
</staticText>
</band>
</columnFooter>
Nota: En caso de existir una sola columna este elemento es ignorado
Page Footer
El page footer representa un pie de que se coloca en cada pagina, puede ser provechoso
al momento de presentar datos como: el numero de la pagina, la persona que solicito el
reporte, o algun mensaje adicional.
<pageFooter>
<band height="20">
<staticText>
<reportElement x="0" y="5" width="200" height="20"/>
<text>
<![CDATA[Pie de Pagina]]>
</text>
</staticText>
</band>
</pageFooter>
Last Page Footer
Es el ultimo footer que aparece en la pagina de los reportes, en vez del pageFooter
corriente.
<lastPageFooter>
<band height="20">
<staticText>
<reportElement x="0" y="5"
width="200" height="20"/>
<text>
<![CDATA[El Ultimo pie de pagina es este]]>
</text>
</staticText>
</band>
</lastPageFooter>
Summary
Este elemento se imprime una vez que el reporte ha terminado. Util para hacer un
resumen general de los datos presentados en el reporte. Un reporte contiene entre 0 y 1,
banda de resumen.
<summary>
<band height="20">
<staticText>
<reportElement x="0" y="5" width="200" height="20"/>
<text>
<![CDATA[Resumenes de datos]]>
</text>
</staticText>
</band>
</summary
Practicas de elementos con Ireport
Probablemente al ver tanto XML estes pensando en renunciar a esto de hacer reportes
con Java, pero fue exactamente la razon por la cual aparecion Ireport la cantidad de
XML que se tenia que escribir para generar un reporte era bastante y controlar tanto
XML no es tan divertido como parece. En fin para no hacer largo el cuento a partir de
ahora nos auxiliaremos de iReport, para la creacion de reportes; sin embargo
seguiremos estudiando el JXML que se genera para no descuidar la escencia del
documento.
¿Que es Ireport?
Ireport es una herramienta visual que permite la rapida creacion de reportes basados en
las librerias JaperReport de java, actualmente es la aplicación mas completa de
generacion de reportes en Java basado en RAD de codigo abierto, y es soportada por
JasperForge. Desde su aparicion en 2005 su popularidad ha incrementado y se ha
convertido en el icono de creacion de reportes, sin envidiarle nada a las herramientas de
creacion de reportes como CrystalReport, XtraReport, ActiveReport, etc. Las cuales
tienen licencias comerciales.
Ireport 3.0, creando reportes
Ejecutar sin fuente de datos o Ejecucion Pasiva: compila yejecuta el reporte sin
tomar en cuenta las fuentes de datos, osea que sin conexión activa para conseguir o
retribuir informacion externa. Este tipo de ejecucion es ideal para reportes con carácter
estatico que solo presentan informacion que muy dificilmente cambie.
● Nunca hacer caso omiso de los warnings a no ser que se sepan que
son inofensivos
Estudiando JRXML generado por Ireport
Puedes optar por saltar esta seccion, pero si eres lo suficientemente curioso para
atreverte a ojear el codigo generado por iReport del anterior reporte, veras no es nada
diferente de loque hemos venido estudiando.
Las importaciones:
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
Texto estatico:
<staticText>
<reportElement x="40" y="12" width="431" height="30" forecolor="#FF0000"
key="staticText-1"/>
<box></box>
<textElement>
<font size="24"/>
</textElement>
<text>
<![CDATA[Mi primer Reporte en Ireport]]>
</text>
</staticText>
Observen el CDATA especifica el texto estatico para el reporte.
Entre otras basicas etiquetas que ya han sido mencionadas en este capitulo. De aquí en
adelante se detallara tan solo el JXML que sea de carácter relevante; pero se utilizara
iReport com herramienta principal de desarrollo en ambientes mas interesantes como
Conexiones de datos.
Proceso de creacion de un reporte
Un reporte es una tarea que lleva un proceso fundamental desde su creacion como
plantilla hasta su visualizacion/exportacion. Acontinuacion se muestra un diagrama de
flujo que simplifica dicho proceso.
Acción API/Herramienta
Crear la plantilla JRXML Editor de texto, iReport, JasperDesign
Compilacion de la plantilla JasperCompileManager
Llenar el reporte JasperFillManager
Exportar JasperExportManager
Mostrar JasperPrintManager
A continuacion veremos mas a fondo las clases descritas en la tabla anterior.
Vistazo JasperReport API
JasperDesign
Esta clase es fundamental para la creacion de un reporte, es una representacion
programatica de las propiedades y caracteristicas del reporte en tiempo de diseño,
facilmente creado a partir de un XML asi como almacenado en uno. Su caracteristica
principal de uso es que provee la habilidad de modificar las propiedades del reporte en
tiempo de ejecucion (run-time).
JasperCompileManager
Responsable de la administracion de la compilacion del diseño del reporte y
transformarlo en una instancia lista para llenarse (ready-to-fill). La compilacion de los
reportes para esta clase es delegada a travez de JRDefaultCompiler (la cual esta
@Deprecated).
JasperReport
Es la representacion de una reporte compilado (generalmente por
JasperCompilerManager), la gran diferencia entre un reporte compilado y uno en
tiempo de diseño esta en que el primer proceso requiere compilacion y validacion por
tanto existen muchas propiedades (caracteristicas) del diseño que pasan a modo lectura
(read-only).
JasperPrint
Esta clase se identifica como una instancia de “documento orientado a la pagina” el cual
puede ser visto, impreso o exportado a distintos formatos. Una vez que el se llena el
diseño del reporte con los datos, el motor interno de JasperReport produce una instancia
de esta clase serializada, con compatibilidad de exporacion a PDF, HTML, XLS, CSV o
XML.
JasperFillManager
La clase que se encarga de cargar la informacion respectiva al reporte para
transformarse en un objeto de impresion JasperPrint. Esta clase puede hacer uso de
fuentes de datos para la carga de informacion, ademas todos los metodos reciben un
Map<T> de objetos el cual debera contener los parametros del reporte, estos tendran
una llave de asignacion unica que sera utilizada para la asignacion de dichos parametros
dentro del reporte. Existen don formas de llenar el reporte:
● Los metodos que reciban instancias provenientes de implementaciones de
JRDataSource.
● Metodos que reciban instancias directas de la interfaz Connection de JDBC y
retribuyan informacion del reporte ejecutando sentencias SQL.
Ambos metodos son detallados con mas detalle en el capitulo XXXX.
JasperPrintManager
Una vez compilado y llenado esta clase facilita la capacidad de visualizar el documento
ya creado, la cual contiene metodo para la impresion de visualizacion del reporte, con el
visor interno o bien desplegar el contenido como instancia de java.awt.Image.
JasperExportManager
Como ya ha sido mencionado existe la posibilidad de exportacion del documento a
formatos mas estandares y portatiles tales como PDF, CSV. Esta clase es la encargada
de llevar a cabo dicha tarea
Resumen de Capitulo
Este Capitulo nos introdujo de manera mas practica al mundo de JasperReport e
iReport, aprendimos las etiquetas basicas de lectura de JasperReport asi como la
utilizacion de iReport como herramienta fundamental de creacion de reportes.
Los procesos de creacion de reportes desde que se crea la plantilla hasta su
visualizacion/exportacion y el detalle de las clases que nos ayudaran a hacer y mostrar
nuestros reportes. En el proximo capitulo abarcaremos mas sobre la naturaleza real de
los reporte que es el dinamismo y como crearlo utilizando fuentes de datos JDBC.
IV. Reportes dinámicos, con
fuentes de datos JDBC
Al finalizar el capitulo Ud debera poder:
● Conceptualizar el principio de las fuentes de datos (tipos, importancia,
ventajas y usos)
● Crear y usar fuentes de datos SQL con iReport.
● Creacion de filtros, ordenamiento
● Creara aplicaciones java que puedan invocar dichos reportes.
● Modificaciones dinamicas basicas a travez de Java
Fuentes de Datos
Los DataSources nos permiten vincular nuestra herramientas de creacion de reportes
con fuentes de almacenamientos de informacion, tales como Bases de datos, objetos
java POJO (Plain Old Java Objects), XML, CSV, etc. Estas fuentes alimentaran de
informacion al reporte. Lo interesante de dichas fuentes de datos es la diversidad y la
capacidad de iReport para interpretarla; algunas veces utilizando API's de terceros para
la correcta interpretacion de la informacion
Tipos
Diversos tipos de fuentes de datos encontramos en JasperReport, la tabla a continuacion
resume el tipo y una breve descripcion de la misma.
Tipo de Fuente de Dato (DataSource) Descripcion
JDBC Es probablemente la mas conocida y usada
permite el enlace a travez de conexiones
JDBC con iReport para el despliege de la
informacion mediante sentencias SQL las
cuales almacena las respectivas columnas
interpretando el tipo de dato, con su
correspondiente Casting (ej. varchar-
String) y asignandolo a un campo en
iReport.
JavaBeans Esta Fuente de datos puede reconocer dos
tipos de implementaciones: Collections o
Arreglos de objetos Java, su disponibilidad
yace debido al uso de Reflection. Es
particularmente util al momento de
realizar reportes a traves de EJB,
Hibernate, objetos JDO e incluso POJO's.
TableModels En muchas aplicaciones del lado del
clientes, los datos son desplegados de
manera tabular, JasperReport permite la
impresion de este tipo de formato como
reporte al pasar la fuente de dato como un
TableModels.
XML XML es un formato universal entre
aplicaciones ampliamente usado con
SOAP y por supuesto soportado por
JasperReport utilizando expresiones Xpath
para la extraccion de informacion.
CSV En ocasiones atipicas se hace necesario el
uso del formato CSV quizas pequeñas
aplicaciones o que no requieran de un
SGBD para manipular la informacion,
CSV es un formato comun el cual
JasperReport soporta su propio enlace de
datos a travez de
net.sf.jasperreports.engine.data.JRCsv
DataSource.
EmptyDataSource Se refiere a fuentes de datos vacias, su uso
es la simulacion de una fuente de datos
con un numero de datos “virtuales” osea
ficticios dentro.
Ventajas
● Creacion de reportes dinamicos.
● Facilita la abstraccion de informacion mediante enlaces separados.
● No Requiere de extensa configuracion
● Es una sencilla forma de obtener informacion externa
Crear Fuentes de Datos JDBC
La creacion de enlace de datos con SQL es de hecho realmente simple con iReport. Solo
siga los siguientes pasos para crear su propia fuente de datos:
4. Por ultimo click en salvar y nuestra conexión esta creada y lista para utilizarse.
Como se aprecia es posible modificar, eliminar y establecer por defecto (para
cuando tenemos multiples fuentes). La exportacion e importacion son temas que
veremos con mas detalle luego.
Con las fuentes de datos JDBC lo que sucede es lo siguiente: cuando se especifica la
consulta a ejecutar dentro del reporte para la extraccion de la informacion, el motor del
reporte envuelve tanto la conexión creada, como la sentencia retornando un
java.sql.ResultSet posteriormente en una instancia de
net.sf.jasperreports.engine.JRResultSetDataSource Pero en general al momento de
crear o llamar el reporte lo que se le asigna es un objeto de tipo java.sql.Connection,
luego JasperReport ejecutara lo necesario para hacer lo antes dicho.
<iReportConnection name="fcys"
connectionClass="it.businesslogic.ireport.connection.JDBCConnection">
<connectionParameter name="ServerAddress">
<![CDATA[localhost]]></connectionParameter>
<connectionParameter name="SavePassword">
<![CDATA[true]]></connectionParameter>
<connectionParameter name="Url">
<![CDATA[jdbc:mysql://localhost/fcys]]></connectionParameter>
<connectionParameter name="JDBCDriver"><![CDATA[com.mysql.jdbc.Driver]]>
</connectionParameter> <connectionParameter name="Database">
<![CDATA[fcys]]></connectionParameter> <connectionParameter
name="Password">
<![CDATA[fcys]]></connectionParameter>
<connectionParameter name="Username">
<![CDATA[mi_password]]></connectionParameter> </iReportConnection>
<QueryExecuter factory="com.jaspersoft.jrx.query.JRXPathQueryExecuterFactory"
fieldsProvider=""><![CDATA[xpath2]]></QueryExecuter> </iReportProperties>
Creacion de Reportes Dinamicos: Uso de la
fuente de datos
Una vez poseamos un enlace de datos, es necesario hacer uso de el. Recordemos que los
enlaces de datos son solamente conexiones preconfiguradas para la ejecucion de
consultas y obtencion de informacion.
Caso de estudio en el que no enfocaremos durante los siguientes capitulos es con la base
de datos FCYS que es un sencillo EJEMPLO de diagrama relacional de entidades
universitarias o colegiadas.Tenemos docentes, asignaturas, semestres, cursos lectivos.
Conforme avanzemos el diagrama va ir incrementandose y nos va proporcionar mas
potenciales reportes. Empezemos con tres tablas sencillas:
4. Una vez que la consulta sea cargada al reporte los campos respectivos son
creados automaticamente. Para visualizarlos dentro del reporte hay una seccion
llamada “Document Structure” generalmente se encuentra en el borde
izquierdo, que mantiene la estructura del documento tal como campos (fields),
variables (variables), parametros (parameters); asi como otras particularidades
como la estructura de cada banda.
5. Ahora arrastramos cada campos y hacemos algunos ajustes como quitar algunas
bandas colocandole height de “0” o simplemente arrastrandola hasta la banda
superior. Recordemos que los titulos son textos estaticos, lo novedoso es la
variable PAGE_NUMBER, que indica el numero de pagina que nos
encontramos.
Existe una seccion donde se puede navegar por todos los reportes abiertos un arbol con
raiz “Open File” seleccionamos este para optener las propiedades del reporte al borde
derecho “Properties”. Vemos un espacio para las columnas del reporte llamado Report
Column, ahi en la propiedad Column cambiamos el valor de “1” a “4”. Luego
seleccionamos la Opcion de Print Order cambiamos de “Vertical” a “Horizontal”,
esto asegurara que los datos sean impresos de manera horizontal osea por columna en
vez de ser impresos verticalmente o por fila (Imagen 4-15).
Filtros
Los datos generalmente requieren de algun tipo de ajustes antes de presentarse, y a
pesar que a travez de las consultas SQL es posible realizar la mayoria de los filtros, hay
casos especiales en donde sera mas conveniente utilizar filtros ajustados al reporte. Por
ejemplo en el caso que sean dos reportes con los mismo datos solo que con filtros
distintos, para no utilizar tantos recursos del servidor se obtiene la consulta general y se
filtran, ademas estos filtros estan basados en expresiones Java lo que nos permite una
ventaja al controlar la informacion.
Para generar filtros den iReport es muy sencillo primero vamos al “Report Query”,
que es donde digitamos la consulta, al margen inferior vemos un boton que dice “Filter
Expression”,
Imagen 4-17. Creacion de Filtros -1.
Nuestro filtro seria:
new Boolean( $F{nombre}.startsWith("A") || $F{nombre}.endsWith("a") )
Explicacion:
$F{nombre}*: determina un objeto nombre tipo campo (Field), que ha sido
apropiadamente asignado a una clase en este caso java.lang.String. Dado que es un
objeto de tipo String podemos utilizar sus metodos startWith para disponer la letra de
inicio y endsWith para la letra final. Luego instanciamos a la clase Boolean dado que
JasperReport solo puede interpretar clases para filtros y no tipos de datos primitivos
como boolean.
Esta consulta afirma que filtre las clases que comienzan con “A” o que terminen con
“a”
Es conveniente saber que cuando necesitamos validar una expresion,
iReport cuenta con una especie de Wizard para la creacion de las mismas en
este caso filtros. Estos se representan con este icono.
* Todos los campos se representan con $F{variable_consulta}, las variables con $V{VARIABLE} y los
parametros $P{PARAMETRO}.
Imagen 4-18. Editor de Expresiones iReport 3.0.
....
JasperDesign jasperDesign=JRXmlLoader.load(reportName);
//coloca numero de columnas
jasperDesign.setColumnCount(3);
/*Agregamos una banda de diseno con un texto estatico*/
JRDesignBand newBand= new JRDesignBand();
newBand.setHeight(100);
JRDesignStaticText staticTextField=new JRDesignStaticText() ;
staticTextField.setText("Texto estatic en banda");
staticTextField.setHeight(50);
staticTextField.setWidth(400);
newBand.addElement(staticTextField);
jasperDesign.setSummary(newBand);
JasperReport jasperReport=JasperCompileManager.compileReport(jasperDesign);
.....
Clase: net.sf.jasperreports.engine.design.JasperDesign
Método Descripción
addImport(String value) Permite agregar la importacion de librerias
al reporte.
addStyle(JRStyle style) Para agregar estilos dentro del repote.
setDetail(JRBand band) Para agregar una banda al diseño del
reporte. Este metodo tambien tiene sus
homologos por banda:
setSummary
setTitle
setColumnFooter
setColumnHeader
setOrientation(byte orientation) Para cambiar la orientacion en la que
despliegan los datos. Deacuerdo a
variables finales en el reporte:
● ORIENTATION_PORTRAIT
● ORIENTATION_LANDSCAPE
Resumen de Capitulo
Como vemos las fuentes de datos son la base para crear reportes dinamicos, estan son
las que realmente proveen la informacion que el reporte hara visible, particularmente las
fuentes de datos JDBC son de gran importancia dado que la mayoria de los sistemas de
informacion en los que se despliegan reportes tienen conexiones JDBC, ademas
pudimos ver los filtros y el ordenamiento de la informacion desde el diseño del reporte
y que escenarios serian convenientes de utilizar. Por ultimo abordamos nuevamente la
visualizacion de los reportes en Java y la capacidad de la clase JasperDesign, para
modificar en tiempo de ejecucion las propiedades generales de los reportes.
V. Reportes: diseño y
propiedades utiles.
Estilos personalizados
Los estilos personalizados son utiles en el diseño de reportes por dos razones:
1. Permiten estandarizar los estilos de los reportes que se crean.
2. Mantienen la capacidad de enfocarse en otras estructuras mas complicadas del
reporte.
Los estilos personalizados no son diferente de los vistos en otros WYGIWYS, son muy
faciles de crear desde iReport, se conocen como Style Library, ubicados en el menu
Format>Style. Creamos el estilo con las propiedades que creamos conveniente:
Imagen 5-1. Creacion de estilo personalizado
Otra caracteristica particularmente util son las agrupaciones, estas permiten tener una
serie de datos que contienen un dato en comun. Como por ejemplo las asignaturas
tienen en comun el semestre al cual pertenece, por ello el campo semestre podria
tomarse como criterio de agrupacion..
Entre las utilidades que se aprecian en lac creacion de las agrupaciones estan:
1. Start on a New Column: al momento de cambiar el valor de la agrupacion se
inicia en una columna nueva.
2. Start on a New Page: al momento de cambiar el valor de la agrupacion se inicia
en otra pagina.
3. Reset Page Number: para restaurar el contador de las paginas.
4. Print header on each page: para imprimir el encabezado de la agrupacion en cada
pagina.
Ahora ajustamos nuestros datos con el nuevo header creado. Y nuestro nuevo reporte se
vera asi:
Parametros no modificables (NonModifiable )
Este tipo de parametros son factores en comun en cada reporte, no pueden ser
modificados para mantener la estabilidad de los mismos; esto se define por el Built-in=
yes, asignado. Veamos ahora algunos parametros no modificables y su utilidad dentro
de JasperReport.
Parametro Descripcion
REPORT_PARAMETERS_MAP Mantiene los valores de los parametros de
reportes, en un java.util.Map. Este parametro
trabaja de manera auxiliar, proveiendo los
parametros y valores modificables.
REPORT_CONNECTION Reservada para la conexión
java.sql.Connection, la cual es posible ajustar
su valor al momento de invocar el reporte.
REPORT_TIME_ZONE Parametro para la zona horaria util para saber
el momento de ejecucion de un reporte.
REPORT_DATA_SOURCE En caso de los reportes que se invocan con
fuentes de datos gracias a la clase:
net.sf.jasperreports.engine.JRDataSource
HIBERNATE_SESSION Mantiene valores de sesiones de hibernate el
cual es una popular herramienta ORM que se
ajusta muy bien con iReport.
JPA_ENTITY_MANAGER Para la administracion de entidades con la
clase javax.persistence.EntityManager de
JPA
Parametros modificables (Modifiable)
Los parametros modificables son aquellos que son creados dentro de JasperReport con
un valor propenso a cambio dentro de la ejecucion del reporte. Su utilizacion comun
son:
● Para criterios de filtracion de una consulta SQL.
● Personalizacion de reportes (ej. Titulos distintos o encabezados diferentes).
● La utilizacion de clases propias con caracteristicas inherentes al negocio.
Comunmente sirven como filtros personalizados de las consultas. Para la creacion de un
parametros:
1. Nos dirigimos View>Parameters.
2. Click New (Nuevo)
3. Creamos el nombre del parametro Seleccionamos y el tipo de clase del parametro
4. Le asignamos un valor por defecto.
Dentro de la clausula where vemos que el uso del parametro. Los parametros se
identifican por $P{NOMBRE_PARAMETRO}, esto permite la facil aplicación del
mismo.
Variables
Al igual que con los parametros las variables se clasifican en modificables (modifiable)
y no modificables (non modifiable). Sin embargo la funcion entre ambos (parametros y
variables) es muy distinta. Mientras que los parametros pueden ser modificados al
momento de invocar un reporte, las variables son utilizadas a lo interno del reporte y
sirven en general para calculo (promedios, contadores, sumas, etc) de datos del reporte.
Variables no modificables (NonModifiable)
Las variables built-in o no modificables son de principal orden dentro del reporte y
muy facil de identificar y explicar:
Variable Descripcion
PAGE_NUMBER Variable registra el numero de la pagina
corriente que se despliega en el reporte.
COLUMN_NUMBER Registra el numero de columna que es
desplegada, esta se reinicia con cada pagina.
REPORT_COUNT Mantiene el valor de numeros de repotes
desplegados. (cuenta subreportes).
PAGE_COUNT Contiene el numero de paginas en el reporte.
COLUMN_COUNT Contiene el numero de columnas en el reporte
(no se reinicia).
BAND_NAME_COUNT A cada banda que se crea se asigna un
contador para saber la cantidad de datos que se
despliegan.
Variables modificables (Modifiable)
Las variables modificables son aquellos que se crean para tener una caracteristica
especial y manipulacion particular de los datos. Su uso comun se limita al calculo de
ciertas caracteristicas tales como promedios, sumas, desviaciones estandares, el mayor,
el menor, etc.
Comunmente sirven como filtros personalizados de las consultas. Para la creacion de un
parametros:
1. Nos dirigimos View>Variables.
2. Click New (Nuevo)
3. Creamos el nombre de la variable aquí:
1. Especificamos el tipo de clase para la variable.
2. El tipo de calculo a ejecutar. ( count, sum, average, lowest, highest, etc).
3. Reset Type para ver en que momento la variable puede reiniciarse.
4. Increment Type es para saber en que momento debe incrementar
4. Luego asignamos una expresion y un valor inicial.
Utilizar Variables en Reportes
Es muy sencillo de utilizar las variables para que se desplieguen en los reportes.
Simplemente deben ser arrastradas desde Document Structure al lugar donde se
utilizaran.
Uso de parametros con Java
La parametrizacion de reportes es muy comun, dado que estos son utiles para filtrar el
incluir al usuario como una fuente potencial de informacion para que obtenga reportes a
fines a sus intereses es lo mas conveniente. La manera mas comun de colocar
parametros a un reporte java es con un objeto de tipo java.util.Map, teniendo como
llave el nombre del parametro y asignando los respectivos valores. Veamos el siguiente
ejemplo para invocar un reporte y asignar valores a parametros:
...........
MySQLConexion con=new MySQLConexion();
Map parameters=new HashMap();
/*Init parameters*/
System.out.print("Ingrese un # de semestre : ");
Scanner scan=new Scanner(System.in);
int n_semestre=scan.nextInt();
parameters.put("N_SEMESTRE",n_semestre);
JasperReport jasperReport=JasperCompileManager.compileReport(reportNames);
JasperPrint
jasperprint=JasperFillManager.fillReport(jasperReport,parameters,con.getConnecti
on());
JasperViewer viewer=new JasperViewer(jasperprint,false);
viewer.setVisible(true);
viewer.setTitle("Reporte Capitulo 4, La Preeminencia");
viewer.setLocation(100,100);
.........
VI. Subreportes
VII. Tecnicas avanzadas de reportes
Crosstabs
Bibliografia:
http://ireport.sourceforge.net/manual0.2.0.html