SlideShare a Scribd company logo
1 of 4
Download to read offline
{ Java }

COMBINANDO REPORTES EN JAVA

JasperReports
Analizaremos cómo podemos utilizar una de las librerías más conocidas
en el lenguaje Java, para poder trabajar de una manera sencilla con los
reportes realizados con otras herramientas.



 U
              n punto muy importante de los sistemas
              se presenta a la hora de mostrar la infor-
              mación resultante de los procesos de las
              aplicaciones y/o del día a día, principal-
mente, cuando esto implica tomar decisiones comer-
ciales o gerenciales. Dicha información, por lo gene-
ral, está almacenada en bases de datos o, en su de-
fecto, en archivos planos.
  Es posible realizar consultas a las bases de datos, leer
estos archivos, diseñar y codificar ventanas o interfa-
ces de usuarios, para interactuar con esa información.
Pero este proceso se torna complicado cuando es nece-
sario sumarle la funcionalidad de impresión, la “custo-
mización” rápida de la información que estamos mos-
trando, o bien cuando la aplicación tiene múltiples in-
terfaces, es decir, cuando el usuario puede utilizarla
como un cliente Windows o desde un navegador.
  A partir de estos puntos, toma importancia la gene-
ración de reportes, tanto para obtener dinamismo en
las consultas, como para lograr múltiples vistas e, in-      [Figura 1] Diseño visual del reporte con IReport.
cluso, para facilitar el mantenimiento posterior y su
extensibilidad.                                                La librería es 100% Java, y puede reutilizarse tanto en aplicaciones clien-
  Para Java, durante un tiempo, éste fue uno de los          te y cliente/servidor, como en aplicaciones web, J2EE, etc.
puntos más débiles del lenguaje. Hoy en día, existen           JasperReports permite organizar la información obtenida desde una base
diversas librerías y herramientas dedicadas (varias de       de datos relacional, a través de conectores JDBC, en diseños de reportes pre-
ellas, Open Source) para la rápida generación de re-         definidos en un formato XML.
portes. Veremos en esta ocasión la librería JasperRe-          Son varios los conceptos que deben conocerse, especialmente, su estructu-
ports, una de las más conocidas e interesantes, que,         ra de paquetes. Para mejorar su entendimiento, a lo largo de este artículo
combinada con herramientas para el diseño, facilita          presentaremos un ejemplo y describiremos los pasos por seguir.
y agiliza la generación, la previsualización y la im-
presión de los reportes.                                     Conociendo la librería
  JasperReports es, precisamente, una poderosa he-            La estructura de paquetes y las clases más importantes son:
rramienta para generar reportes en Java, con la ha-
bilidad de producir contenido completo para la pan-          >   net.sf.jasperreports.engine.JasperExportManager
talla, directo para impresora o en diferentes formatos       >   net.sf.jasperreports.engine.JasperPrintManager
de archivo (PDF, XLS, CSV y XML, entre otros).               >   net.sf.jasperreports.engine.JasperFillManager
                                                             >   net.sf.jasperreports.engine.JasperCompileManager
                                                             >   net.sf.jasperreports.view.JasperViewer
     JasperReports es, precisamente,                         >   net.sf.jasperreports.view.JasperDesignViewer
      una poderosa herramienta para
                                                               Estas clases presentan una abstracción para facilitar la vista del reporte, el di-
     generar reportes en Java, con la                        seño, la impresión, el llenado, la compilación, etc. Las primeras cuatro permi-
                                                             ten manejar el motor de generación del reporte, y las últimas dos (las pertene-
      habilidad de producir contenido                        cientes al paquete view), la visualización de los reportes. A continuación, des-
     completo para la pantalla, directo                      cribiremos su funcionalidad principal.

      para impresora o en diferentes                         Armando un reporte
                                                              Los reportes se generan basados en un diseño (xml), armado y compilado
             formatos de archivo.
                                                             antes de la puesta en marcha del motor generador del reporte. Una vez lis-

62                                                                                                                                     users.code
to el diseño, el motor realiza la carga de datos a tra-
vés de una conexión JDBC a una base de datos rela-
cional, respetando los campos y las consultas prede-
                                                                   Aplicaciones con ANT
finidas.
                                                                  http://jasperreports.sourceforge.net
  Cumplidos estos pasos, entran en juego las clases que
                                                                  Página oficial de Jasper Reports, con herramientas, documentación,
permiten exportar, imprimir o visualizar el reporte, pa-
                                                                  noticias y todo lo referido a esta comunidad.
ra darle fin a su ciclo de vida.

Vamos por partes                                                  www.businessobjects.com/products/reporting/
  A partir de ahora, nos dedicaremos a ver cuáles son
                                                                  crystalreports/java/default.asp
los pasos que se deben seguir para utilizar la librería
                                                                  Página de Crystal Reports para Java, con recursos, documentos
JasperReports.
                                                                  y hasta una versión trial para bajar y probar este software.
Diseñando
  El diseño representa un ‘template’ que va a ser utili-
zado por el motor para armar el reporte de acuerdo con
su estructura, y completado con la información obteni-
da desde la base de datos.
  El documento de diseño está representado por un ar-
chivo XML que mantiene la estructura de un archivo
DTD definido por el motor de JasperReports, que se ob-
tiene al descargar las librerías.
  Para poder darle vida al reporte y completarlo,
previamente es necesario compilar el archivo.
  La generación de un diseño implica editar un archivo
XML siguiendo el formato publicado por:

 <!DOCTYPE jasperReport PUBLIC
   "-//JasperReports//DTD Report Design//EN"

                                                                  www.jfree.org/jfreereport
 "http://jasperreports.sourceforge.net/dtds/
                                                                  Sitio oficial de una alternativa a Jasper Reports, aún en estado beta,
   jasperreport.dtd">
                                                                  pero realmente interesante.
  Habitualmente, estos documentos XML cuentan con
                                                                  www.ftponline.com/javapro/whitepapers/reporting/
una estructura similar a la de cualquier documento de
                                                                  crystalreports
texto, lo cual facilita su entendimiento. Principalmente,
                                                                  White Paper sobre reportes desde Crystal Reports, en Java, de la
se siguen estas secciones:
                                                                  comunidad JavaPro.

                                                                  www.reportingengines.com
 title                   Título del reporte
                                                                  Sitio con gran cantidad de software para hacer reportes desde Java,
 pageHeader              Encabezado del documento
                                                                  con posibilidad de exportar a Excel, etc.
 columnHeader            Encabezado de las columnas
 detail                  Detalle del documento. Cuerpo
                                                                  www.java4less.com
 columnFooter            Pie de la columna
                                                                  Java for Less ofrece una variedad de componentes para Java, entre
 pageFooter              Pie del documento
                                                                  los cuales se incluye RReport, que cuenta con un diseñador visual.
 sumary                  Cierre del documento


  El orden en el que están enunciadas las secciones,           <?xml version="1.0" encoding="UTF-8"?>
comúnmente llamadas ‘band’, es el orden en que, por            <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD
lo general, se declaran dentro de un documento, según             Report Design//EN"
su nivel.                                                      "http://jasperreports.sourceforge.net/dtds/
  Dentro de cada una de las secciones pueden encon-              jasperreport.dtd">
trarse, también, ‘tags’ (delimitadores), similares a los del   <jasperReport name="Reporte .CODE" >
lenguaje HTML, para indicar campos de texto (<text-              <parameter name="Title" class="java.lang.String"/>
field>), tamaño (<size=””>), altura (<height=””>), ancho         <queryString><![CDATA[select name, cost from
(<width=””>), etc.                                             product]]></queryString>
  Incluso, se encuentran las consultas que se realizan a         <field name="NOMBRE" class="java.lang.String"/>
la base de datos para cargar el reporte, indicadas por el        <field name="PRODUCTO" class="java.lang.String"/>
delimitador: <query String>, así como también, la refe-          <title>
rencia a los parámetros, variables y campos del reporte,           <band height="50">
a través de los delimitadores $P{parámetro}, $V{varia-                <textField>
ble} y $F{campo} respectivamente, etc.                                  <reportElement x="0" y="0" width="200"
  Para entender mejor la estructura de este archivo            height="50" />
XML, veamos a continuación un breve ejemplo:                            <textFieldExpression>$P{Title}

users.code                                                                                                                            63
{ Java }



 </textFieldExpression>
        </textField>
     </band>
   </title>
   <pageHeader>
          <textField>Encabezado</textField>
   </pageHeader>
   <columnHeader>
     <band height="20">
        <staticText>
          <reportElement x="180" y="0"
             width="180" height="20"/>
          <textElement>
            <font isUnderline="true"/>
          </textElement>
          <text><![CDATA[NAME]]></text>
        </staticText>
 …                                                           [Figura 2] Muestra de la publicación de un reporte.

 Una herramienta para tener en cuenta es IReport (ire-
port.sourceforge.net). En la [Figura 1] podremos ver el      lizar la carga de datos del reporte, pasándole como parámetros el objeto de
ambiente de desarrollo.                                      diseño (o bien, el archivo que lo representa en formato serializado) y la co-
                                                             nexión JDBC a la base de datos desde donde se obtendrá la información que
Compilación                                                  necesitemos.
  Una vez que el diseño está listo, es necesario com-          El resultado de este proceso es un objeto que representa un documento
pilarlo antes de poder iniciar el proceso de llenado.        listo para ser impreso, un objeto serializable del tipo net.sf.jasperreports.
La compilación se lleva a cabo a través del método           engine.JasperPrint. Este objeto puede guardarse en disco para su uso pos-
compileReport() expuesto en la clase net.sf.jasperreports.   terior, o bien puede ser impreso, enviado a la pantalla o transformado en
engine.JasperManager.                                        PDF, XLS, CSV, etc.
  En este proceso, el diseño es transformado en un ob-
jeto serializable del tipo net.sf.jasperreports.engine.      Visualización
JasperReport, que luego se guarda en disco. Este archi-        Luego de cumplir los pasos anteriores, son varios los caminos que podemos
vo (objeto serializado) es utilizado cuando la aplica-       tomar. Por ejemplo, podemos optar por mostrar un reporte por pantalla, impri-
ción completa el reporte con información.                    mirlo o bien transformarlo en algún tipo particular de archivo, como PDF.
  Para previsualizar un diseño, puede utilizarse la cla-
se net.sf. jasperreports.view.JasperDesignViewer, a          > Mostrar un reporte por pantalla: utilizaremos la clase net.sf. jasperreports-
cuyo método main() es posible entregarle el archivo            .view.JasperViewer, la cual, a través de su método main(), recibe el repor-
xml o el archivo compilado, a fin de visualizarlo.             te, ya en su etapa final, para mostrar.
                                                             > Imprimir el reporte: utilizaremos los métodos printReport(), printPage() o
Generación                                                     printPages(), contenidos en la clase net.sf. jasperreports.engine.
  Una vez concluida la etapa de diseño del reporte, va-        JasperPrintManager.
mos a darle vida completándolo con el contenido ob-          > Exportar los datos a un formato de archivo especial: podemos utilizar los
tenido directamente de la base de datos o de cálculos          métodos exportReportXXX(), expuestos en la clase net.sf.jasperreports.
intermedios.                                                   engine.JasperExportManager.
  Así como existen clases que abstraen la complejidad
de compilación del reporte, también las hay para la car-     Un ejemplo
ga de datos del reporte. La clase net.sf.jasperreports.       Veamos el funcionamiento de este motor realizando un ejemplo de códi-
engine.JasperManager expone los métodos fillRe-              go, el cual nos permitirá entender lo visto.
portXXX(), a través de los cuales nos permitirán rea-         El siguiente es el código que deberemos utilizar:

                                                               Map parametrosReporte;       // Mapa de parámetros del reporte
                                                               JasperDesign disenioReporte; // diseño del reporte
     Algunas herramientas                                      JRDesignQuery queryReporte; // consulta a la base para
                                                                                              armar el reporte
     interesantes
                                                              // Armamos el MAP de parámetros adicionales a pasar al reporte
     Jasper Assistant: www.jasperassistant.com                  (los nombres están determinados por el XML diseñado
                                                               parametrosReporte.put("Identificacion", "121");
     JasperPal: jasperpal.sourceforge.net                      parametrosReporte.put("NumeroSecuencia", "01");
     OpenReports Designer: opensourcesoft.net
                                                              // Cargamos el diseño desde el archivo xml, la extensión por
     Sunshine Reports: www.sunshinereports.com
                                                                defecto: .jrxml
                                                               disenioReporte = JRXmlLoader.load("DisenoXML.jrxml");

64                                                                                                                                users.code
Incluso, algunas herramientas de desa-
                                                                                              rrollo la traen incorporada en su IDE; una
                                                                                              de ellas es, por ejemplo, Borland JBuilder.
                                                                                                Respecto a las librerías Open Source, la
                                                                                              mayoría puede agregarse a las herramientas
                                                                                              de desarrollo, simplemente, descargando la
                                                                                              librería desde el sitio de su fabricante e im-
                                                                                              portando los paquetes .jar, aunque en este
                                                                                              caso, seguramente, no se contará con asis-
                                                                                              tentes gráficos.

                                                                                              Para seguir investigando
                                                                                               Para terminar, algunos temas y links im-
                                                                                              portantes para tener en cuenta y utilizar re-
                                                                                              portes en nuestras aplicaciones:

                                                                                              > El primer paso para comenzar a utilizar
[Figura 3] Configurando Crystal Reports para Java.                                              las librerías del presente artículo es la
                                                                                                descarga del paquete de clases Jaspe-
                                                                                                rReports completo; no sólo el conjunto
 // Armamos y asignamos el query                                                                de librerías, sino la completa e intere-
  queryReporte.setText("Select * from CLIENTES");                                               sante documentación que incluye y los
  disenioReporte.setQuery(queryReporte);                                                        ejemplos de código.
                                                                                              > Como segundo paso, es útil conocer las
    // Compilamos el reporte y genera un objeto JasperReport                                    características de licenciamiento de Jas-
    JasperReport report = JasperCompileManager.compileReport                                    perReports. Si bien es de código abierto,
      (disenioReporte);                                                                         debemos saber qué podemos hacer y qué
                                                                                                no con estas librerías. Todo lo referente
 /* Llenamos el reporte, pasando el reporte compilado, los                                      a licenciamiento puede consultarse en:
   parámetros y la conexión a DB y se genera un objeto                                          jasperreports.sourceforge.net/license.html.
   JasperPrint. La información se obtendrá desde la conexión,                                 > Por último, podemos mencionar que
   a partir del query indicado */                                                               para diseñar reportes y evitar el trabajo
 JasperPrint reporteListo = JasperFillManager.fillReport(report,                                manual de generación de archivos
  parametrosReporte, DBConnection);                                                             XML, es importante conocer diferentes
                                                                                                herramientas visuales con el fin de en-
  /* Generamos el objeto de preview del reporte una vez listo*/                                 contrar la que mejor se adapte a cada
  JasperViewer ReporteParaPreview = new JasperViewer(reporteListo,                              necesidad o nos permita reducir tiem-
    false);                                                                                     pos en el armado.
  ReporteParaPreview.setTitle("Nuestro Primer Reporte");
                                                                                               Para obtener información adicional, po-
  // Mostramos el reporte                                                                     demos dirigirnos al sitio oficial de Jasper-
  ReporteParaPreview.show();                                                                  Reports, jasperreports.sourceforge.net.

                                                                                                Sólo queda determinar los reportes que el
¿Y qué otras opciones existen?                                                                cliente precisa diseñar, el formato que me-
 JasperReports no es la única solución para el manejo de reportes en Java; existen            jor se adapte a esas necesidades, y reutili-
otras librerías que posibilitan y facilitan la generación de reportes. Elegimos JasperRe-     zar las librerías para la automatización del
ports porque es una de las librerías Open Source más completas, pero en la categoría          proceso de armado. q
de librerías gratuitas también podemos encontrar otros productos. Algunos de ellos son:

> Itext: se utiliza, habitualmente, para generar reportes de formatos planos, en gene-
  ral, sin campos complejos, aunque cuenta con herramientas para mejorarlos. Sopor-                  JasperReports no es la
  ta la posibilidad de ser exportado a PDF. www.lowagie.com/iText
                                                                                                      única solución para el
> FOP: es un reporteador basado en XSL Formatting Objects (XSL – FO). Maneja diversos
  tipos de formatos, incluso más complejos que Itext. xml.apache.org/fop                             manejo de reportes en

> POI: principalmente utilizado para formatos XLS, tanto para lectura como para escri-           Java; existen otras librerías
  tura. Está basado en Microsoft OLE 2 Compound Document Format. jakarta.apache.org/poi
                                                                                                  que posibilitan y facilitan la
 Por el lado de los productos pagos, también existen librerías para el manejo de reportes.
Por ejemplo, hay una versión de Crystal Reports for Java, que cumple las funciones de dise-
                                                                                                    generación de reportes.
ñador, más motor generador de reportes.

 users.code                                                                                                                              65

More Related Content

What's hot (20)

Lenguaje sql
Lenguaje sqlLenguaje sql
Lenguaje sql
 
E:\Ricardo Topicos\Ultimo Corte\Tareas 16 Abril
E:\Ricardo Topicos\Ultimo Corte\Tareas 16 AbrilE:\Ricardo Topicos\Ultimo Corte\Tareas 16 Abril
E:\Ricardo Topicos\Ultimo Corte\Tareas 16 Abril
 
Base de datos en microsoft sql server
Base de datos en microsoft sql serverBase de datos en microsoft sql server
Base de datos en microsoft sql server
 
Tema 1 base de datos
Tema 1   base de datosTema 1   base de datos
Tema 1 base de datos
 
Abap
AbapAbap
Abap
 
BASE DE DATOS EN MICROSOFT SQL SERVER
BASE DE DATOS EN MICROSOFT SQL SERVERBASE DE DATOS EN MICROSOFT SQL SERVER
BASE DE DATOS EN MICROSOFT SQL SERVER
 
Trabajo Castillo.Max Juan.Pablo.Cabezas Antonio.Mendoza 1c
Trabajo Castillo.Max Juan.Pablo.Cabezas Antonio.Mendoza 1cTrabajo Castillo.Max Juan.Pablo.Cabezas Antonio.Mendoza 1c
Trabajo Castillo.Max Juan.Pablo.Cabezas Antonio.Mendoza 1c
 
1.14 Abap
1.14 Abap1.14 Abap
1.14 Abap
 
Base de datos en sql
Base  de datos en sqlBase  de datos en sql
Base de datos en sql
 
Integración de Datos sin límites con Pentaho
Integración de Datos sin límites con PentahoIntegración de Datos sin límites con Pentaho
Integración de Datos sin límites con Pentaho
 
Access 2010 jaja
Access 2010 jajaAccess 2010 jaja
Access 2010 jaja
 
ADO.NET
ADO.NETADO.NET
ADO.NET
 
Lenguaje transact
Lenguaje transactLenguaje transact
Lenguaje transact
 
Base de datos - Por Juan Ventura
Base de datos  - Por Juan VenturaBase de datos  - Por Juan Ventura
Base de datos - Por Juan Ventura
 
Diapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.netDiapositivas de acceso a datos ado.net
Diapositivas de acceso a datos ado.net
 
Sql
SqlSql
Sql
 
alumno: jose carlos leocadio matines ...
                                    alumno: jose carlos leocadio matines     ...                                    alumno: jose carlos leocadio matines     ...
alumno: jose carlos leocadio matines ...
 
Manual sql1(1)
Manual sql1(1)Manual sql1(1)
Manual sql1(1)
 
Access contra MySQL
Access contra MySQLAccess contra MySQL
Access contra MySQL
 
Sql
SqlSql
Sql
 

Similar to Jasperreports

Similar to Jasperreports (20)

Reports
ReportsReports
Reports
 
Java persitence api
Java persitence apiJava persitence api
Java persitence api
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Motor de persistencia nhibernate
Motor de persistencia nhibernateMotor de persistencia nhibernate
Motor de persistencia nhibernate
 
Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)Manual 2014 i 04 lenguaje de programación ii (0870)
Manual 2014 i 04 lenguaje de programación ii (0870)
 
Guía estratégica de migración de WAS a JBoss
Guía estratégica de migración de WAS a JBossGuía estratégica de migración de WAS a JBoss
Guía estratégica de migración de WAS a JBoss
 
Documento Web2Py
Documento Web2PyDocumento Web2Py
Documento Web2Py
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Java
JavaJava
Java
 
J2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos SlidesJ2 Ee Para Seres Humanos Slides
J2 Ee Para Seres Humanos Slides
 
Sesion03 apuntes
Sesion03 apuntesSesion03 apuntes
Sesion03 apuntes
 
Resumen jee
Resumen jeeResumen jee
Resumen jee
 
No numerica ii
No numerica iiNo numerica ii
No numerica ii
 
Oracle
OracleOracle
Oracle
 
Oracle
OracleOracle
Oracle
 
Tutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasosTutorial javafx-primeros-pasos
Tutorial javafx-primeros-pasos
 
Presentación no numerica ii
Presentación no numerica iiPresentación no numerica ii
Presentación no numerica ii
 
Manual ireport
Manual ireportManual ireport
Manual ireport
 
REPORTES
REPORTESREPORTES
REPORTES
 
Introducción a JBoss
Introducción a JBossIntroducción a JBoss
Introducción a JBoss
 

Jasperreports

  • 1. { Java } COMBINANDO REPORTES EN JAVA JasperReports Analizaremos cómo podemos utilizar una de las librerías más conocidas en el lenguaje Java, para poder trabajar de una manera sencilla con los reportes realizados con otras herramientas. U n punto muy importante de los sistemas se presenta a la hora de mostrar la infor- mación resultante de los procesos de las aplicaciones y/o del día a día, principal- mente, cuando esto implica tomar decisiones comer- ciales o gerenciales. Dicha información, por lo gene- ral, está almacenada en bases de datos o, en su de- fecto, en archivos planos. Es posible realizar consultas a las bases de datos, leer estos archivos, diseñar y codificar ventanas o interfa- ces de usuarios, para interactuar con esa información. Pero este proceso se torna complicado cuando es nece- sario sumarle la funcionalidad de impresión, la “custo- mización” rápida de la información que estamos mos- trando, o bien cuando la aplicación tiene múltiples in- terfaces, es decir, cuando el usuario puede utilizarla como un cliente Windows o desde un navegador. A partir de estos puntos, toma importancia la gene- ración de reportes, tanto para obtener dinamismo en las consultas, como para lograr múltiples vistas e, in- [Figura 1] Diseño visual del reporte con IReport. cluso, para facilitar el mantenimiento posterior y su extensibilidad. La librería es 100% Java, y puede reutilizarse tanto en aplicaciones clien- Para Java, durante un tiempo, éste fue uno de los te y cliente/servidor, como en aplicaciones web, J2EE, etc. puntos más débiles del lenguaje. Hoy en día, existen JasperReports permite organizar la información obtenida desde una base diversas librerías y herramientas dedicadas (varias de de datos relacional, a través de conectores JDBC, en diseños de reportes pre- ellas, Open Source) para la rápida generación de re- definidos en un formato XML. portes. Veremos en esta ocasión la librería JasperRe- Son varios los conceptos que deben conocerse, especialmente, su estructu- ports, una de las más conocidas e interesantes, que, ra de paquetes. Para mejorar su entendimiento, a lo largo de este artículo combinada con herramientas para el diseño, facilita presentaremos un ejemplo y describiremos los pasos por seguir. y agiliza la generación, la previsualización y la im- presión de los reportes. Conociendo la librería JasperReports es, precisamente, una poderosa he- La estructura de paquetes y las clases más importantes son: rramienta para generar reportes en Java, con la ha- bilidad de producir contenido completo para la pan- > net.sf.jasperreports.engine.JasperExportManager talla, directo para impresora o en diferentes formatos > net.sf.jasperreports.engine.JasperPrintManager de archivo (PDF, XLS, CSV y XML, entre otros). > net.sf.jasperreports.engine.JasperFillManager > net.sf.jasperreports.engine.JasperCompileManager > net.sf.jasperreports.view.JasperViewer JasperReports es, precisamente, > net.sf.jasperreports.view.JasperDesignViewer una poderosa herramienta para Estas clases presentan una abstracción para facilitar la vista del reporte, el di- generar reportes en Java, con la seño, la impresión, el llenado, la compilación, etc. Las primeras cuatro permi- ten manejar el motor de generación del reporte, y las últimas dos (las pertene- habilidad de producir contenido cientes al paquete view), la visualización de los reportes. A continuación, des- completo para la pantalla, directo cribiremos su funcionalidad principal. para impresora o en diferentes Armando un reporte Los reportes se generan basados en un diseño (xml), armado y compilado formatos de archivo. antes de la puesta en marcha del motor generador del reporte. Una vez lis- 62 users.code
  • 2. to el diseño, el motor realiza la carga de datos a tra- vés de una conexión JDBC a una base de datos rela- cional, respetando los campos y las consultas prede- Aplicaciones con ANT finidas. http://jasperreports.sourceforge.net Cumplidos estos pasos, entran en juego las clases que Página oficial de Jasper Reports, con herramientas, documentación, permiten exportar, imprimir o visualizar el reporte, pa- noticias y todo lo referido a esta comunidad. ra darle fin a su ciclo de vida. Vamos por partes www.businessobjects.com/products/reporting/ A partir de ahora, nos dedicaremos a ver cuáles son crystalreports/java/default.asp los pasos que se deben seguir para utilizar la librería Página de Crystal Reports para Java, con recursos, documentos JasperReports. y hasta una versión trial para bajar y probar este software. Diseñando El diseño representa un ‘template’ que va a ser utili- zado por el motor para armar el reporte de acuerdo con su estructura, y completado con la información obteni- da desde la base de datos. El documento de diseño está representado por un ar- chivo XML que mantiene la estructura de un archivo DTD definido por el motor de JasperReports, que se ob- tiene al descargar las librerías. Para poder darle vida al reporte y completarlo, previamente es necesario compilar el archivo. La generación de un diseño implica editar un archivo XML siguiendo el formato publicado por: <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD Report Design//EN" www.jfree.org/jfreereport "http://jasperreports.sourceforge.net/dtds/ Sitio oficial de una alternativa a Jasper Reports, aún en estado beta, jasperreport.dtd"> pero realmente interesante. Habitualmente, estos documentos XML cuentan con www.ftponline.com/javapro/whitepapers/reporting/ una estructura similar a la de cualquier documento de crystalreports texto, lo cual facilita su entendimiento. Principalmente, White Paper sobre reportes desde Crystal Reports, en Java, de la se siguen estas secciones: comunidad JavaPro. www.reportingengines.com title Título del reporte Sitio con gran cantidad de software para hacer reportes desde Java, pageHeader Encabezado del documento con posibilidad de exportar a Excel, etc. columnHeader Encabezado de las columnas detail Detalle del documento. Cuerpo www.java4less.com columnFooter Pie de la columna Java for Less ofrece una variedad de componentes para Java, entre pageFooter Pie del documento los cuales se incluye RReport, que cuenta con un diseñador visual. sumary Cierre del documento El orden en el que están enunciadas las secciones, <?xml version="1.0" encoding="UTF-8"?> comúnmente llamadas ‘band’, es el orden en que, por <!DOCTYPE jasperReport PUBLIC "-//JasperReports//DTD lo general, se declaran dentro de un documento, según Report Design//EN" su nivel. "http://jasperreports.sourceforge.net/dtds/ Dentro de cada una de las secciones pueden encon- jasperreport.dtd"> trarse, también, ‘tags’ (delimitadores), similares a los del <jasperReport name="Reporte .CODE" > lenguaje HTML, para indicar campos de texto (<text- <parameter name="Title" class="java.lang.String"/> field>), tamaño (<size=””>), altura (<height=””>), ancho <queryString><![CDATA[select name, cost from (<width=””>), etc. product]]></queryString> Incluso, se encuentran las consultas que se realizan a <field name="NOMBRE" class="java.lang.String"/> la base de datos para cargar el reporte, indicadas por el <field name="PRODUCTO" class="java.lang.String"/> delimitador: <query String>, así como también, la refe- <title> rencia a los parámetros, variables y campos del reporte, <band height="50"> a través de los delimitadores $P{parámetro}, $V{varia- <textField> ble} y $F{campo} respectivamente, etc. <reportElement x="0" y="0" width="200" Para entender mejor la estructura de este archivo height="50" /> XML, veamos a continuación un breve ejemplo: <textFieldExpression>$P{Title} users.code 63
  • 3. { Java } </textFieldExpression> </textField> </band> </title> <pageHeader> <textField>Encabezado</textField> </pageHeader> <columnHeader> <band height="20"> <staticText> <reportElement x="180" y="0" width="180" height="20"/> <textElement> <font isUnderline="true"/> </textElement> <text><![CDATA[NAME]]></text> </staticText> … [Figura 2] Muestra de la publicación de un reporte. Una herramienta para tener en cuenta es IReport (ire- port.sourceforge.net). En la [Figura 1] podremos ver el lizar la carga de datos del reporte, pasándole como parámetros el objeto de ambiente de desarrollo. diseño (o bien, el archivo que lo representa en formato serializado) y la co- nexión JDBC a la base de datos desde donde se obtendrá la información que Compilación necesitemos. Una vez que el diseño está listo, es necesario com- El resultado de este proceso es un objeto que representa un documento pilarlo antes de poder iniciar el proceso de llenado. listo para ser impreso, un objeto serializable del tipo net.sf.jasperreports. La compilación se lleva a cabo a través del método engine.JasperPrint. Este objeto puede guardarse en disco para su uso pos- compileReport() expuesto en la clase net.sf.jasperreports. terior, o bien puede ser impreso, enviado a la pantalla o transformado en engine.JasperManager. PDF, XLS, CSV, etc. En este proceso, el diseño es transformado en un ob- jeto serializable del tipo net.sf.jasperreports.engine. Visualización JasperReport, que luego se guarda en disco. Este archi- Luego de cumplir los pasos anteriores, son varios los caminos que podemos vo (objeto serializado) es utilizado cuando la aplica- tomar. Por ejemplo, podemos optar por mostrar un reporte por pantalla, impri- ción completa el reporte con información. mirlo o bien transformarlo en algún tipo particular de archivo, como PDF. Para previsualizar un diseño, puede utilizarse la cla- se net.sf. jasperreports.view.JasperDesignViewer, a > Mostrar un reporte por pantalla: utilizaremos la clase net.sf. jasperreports- cuyo método main() es posible entregarle el archivo .view.JasperViewer, la cual, a través de su método main(), recibe el repor- xml o el archivo compilado, a fin de visualizarlo. te, ya en su etapa final, para mostrar. > Imprimir el reporte: utilizaremos los métodos printReport(), printPage() o Generación printPages(), contenidos en la clase net.sf. jasperreports.engine. Una vez concluida la etapa de diseño del reporte, va- JasperPrintManager. mos a darle vida completándolo con el contenido ob- > Exportar los datos a un formato de archivo especial: podemos utilizar los tenido directamente de la base de datos o de cálculos métodos exportReportXXX(), expuestos en la clase net.sf.jasperreports. intermedios. engine.JasperExportManager. Así como existen clases que abstraen la complejidad de compilación del reporte, también las hay para la car- Un ejemplo ga de datos del reporte. La clase net.sf.jasperreports. Veamos el funcionamiento de este motor realizando un ejemplo de códi- engine.JasperManager expone los métodos fillRe- go, el cual nos permitirá entender lo visto. portXXX(), a través de los cuales nos permitirán rea- El siguiente es el código que deberemos utilizar: Map parametrosReporte; // Mapa de parámetros del reporte JasperDesign disenioReporte; // diseño del reporte Algunas herramientas JRDesignQuery queryReporte; // consulta a la base para armar el reporte interesantes // Armamos el MAP de parámetros adicionales a pasar al reporte Jasper Assistant: www.jasperassistant.com (los nombres están determinados por el XML diseñado parametrosReporte.put("Identificacion", "121"); JasperPal: jasperpal.sourceforge.net parametrosReporte.put("NumeroSecuencia", "01"); OpenReports Designer: opensourcesoft.net // Cargamos el diseño desde el archivo xml, la extensión por Sunshine Reports: www.sunshinereports.com defecto: .jrxml disenioReporte = JRXmlLoader.load("DisenoXML.jrxml"); 64 users.code
  • 4. Incluso, algunas herramientas de desa- rrollo la traen incorporada en su IDE; una de ellas es, por ejemplo, Borland JBuilder. Respecto a las librerías Open Source, la mayoría puede agregarse a las herramientas de desarrollo, simplemente, descargando la librería desde el sitio de su fabricante e im- portando los paquetes .jar, aunque en este caso, seguramente, no se contará con asis- tentes gráficos. Para seguir investigando Para terminar, algunos temas y links im- portantes para tener en cuenta y utilizar re- portes en nuestras aplicaciones: > El primer paso para comenzar a utilizar [Figura 3] Configurando Crystal Reports para Java. las librerías del presente artículo es la descarga del paquete de clases Jaspe- rReports completo; no sólo el conjunto // Armamos y asignamos el query de librerías, sino la completa e intere- queryReporte.setText("Select * from CLIENTES"); sante documentación que incluye y los disenioReporte.setQuery(queryReporte); ejemplos de código. > Como segundo paso, es útil conocer las // Compilamos el reporte y genera un objeto JasperReport características de licenciamiento de Jas- JasperReport report = JasperCompileManager.compileReport perReports. Si bien es de código abierto, (disenioReporte); debemos saber qué podemos hacer y qué no con estas librerías. Todo lo referente /* Llenamos el reporte, pasando el reporte compilado, los a licenciamiento puede consultarse en: parámetros y la conexión a DB y se genera un objeto jasperreports.sourceforge.net/license.html. JasperPrint. La información se obtendrá desde la conexión, > Por último, podemos mencionar que a partir del query indicado */ para diseñar reportes y evitar el trabajo JasperPrint reporteListo = JasperFillManager.fillReport(report, manual de generación de archivos parametrosReporte, DBConnection); XML, es importante conocer diferentes herramientas visuales con el fin de en- /* Generamos el objeto de preview del reporte una vez listo*/ contrar la que mejor se adapte a cada JasperViewer ReporteParaPreview = new JasperViewer(reporteListo, necesidad o nos permita reducir tiem- false); pos en el armado. ReporteParaPreview.setTitle("Nuestro Primer Reporte"); Para obtener información adicional, po- // Mostramos el reporte demos dirigirnos al sitio oficial de Jasper- ReporteParaPreview.show(); Reports, jasperreports.sourceforge.net. Sólo queda determinar los reportes que el ¿Y qué otras opciones existen? cliente precisa diseñar, el formato que me- JasperReports no es la única solución para el manejo de reportes en Java; existen jor se adapte a esas necesidades, y reutili- otras librerías que posibilitan y facilitan la generación de reportes. Elegimos JasperRe- zar las librerías para la automatización del ports porque es una de las librerías Open Source más completas, pero en la categoría proceso de armado. q de librerías gratuitas también podemos encontrar otros productos. Algunos de ellos son: > Itext: se utiliza, habitualmente, para generar reportes de formatos planos, en gene- ral, sin campos complejos, aunque cuenta con herramientas para mejorarlos. Sopor- JasperReports no es la ta la posibilidad de ser exportado a PDF. www.lowagie.com/iText única solución para el > FOP: es un reporteador basado en XSL Formatting Objects (XSL – FO). Maneja diversos tipos de formatos, incluso más complejos que Itext. xml.apache.org/fop manejo de reportes en > POI: principalmente utilizado para formatos XLS, tanto para lectura como para escri- Java; existen otras librerías tura. Está basado en Microsoft OLE 2 Compound Document Format. jakarta.apache.org/poi que posibilitan y facilitan la Por el lado de los productos pagos, también existen librerías para el manejo de reportes. Por ejemplo, hay una versión de Crystal Reports for Java, que cumple las funciones de dise- generación de reportes. ñador, más motor generador de reportes. users.code 65