SlideShare una empresa de Scribd logo
1 de 217
Desarrollo de interfaces:
                     5.CONFECCIÓN DE INFORMES


                                                               Jose Alberto Benítez Andrades
                                                                             jose@indipro.es
                                                                              www.indipro.es
                                                                                @indiproweb
                                                                                @jabenitez88

Jose Alberto Benítez Andrades– jose@indipro.es - @indiproweb                                   1
CONFECCIÓN DE INFORMES – iReport Y JasperReports


 JasperReports es el más popular motor de creación
  de informes en código abierto. Está escrito
  completamente en Java y es capaz de utilizar los
  datos procedentes de cualquier tipo de fuente de
  datos y presentar los documentos con precisión de
  píxeles, lo cuales se pueden ver, imprimir o exportar
  en una variedad de formatos de documentos
  incluyendo HTML, PDF, Excel, OpenOffice y Word.



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   2
CONFECCIÓN DE INFORMES – iReport Y JasperReports


 iReport es un diseñador gratuito y de código abierto
  para JasperReports. Crea diseños muy sofisticados
  que contienen gráficos, imágenes, subinformes,
  tablas de referencias cruzadas y mucho más. Puede
  acceder a datos a través de JDBC, TableModels,
  JavaBeans, XML, Hibernate, CSV, y fuentes
  personalizadas y luego publicar estos informes en
  formato PDF, RTF, XML, XLS, CSV, HTML, XHTML,
  texto, DOCX, u OpenOffice.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   3
iReport – INSTALACIÓN
 http://community.jaspersoft.com
  /download
 Debemos descargar
  iReportDesigner y JasperReports
  Library.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   4
iReport – Creación de un informe
 Suponiendo que tenemos instalado un servidor de MySQL en nuestro
  ordenador (http://dev.mysql.com/downloads/mysql/)
 En primer lugar creamos una pequeña base de datos, la llamamos
  como queramos y dentro introducimos una tabla con unos registros.

CREATE TABLE participantes (
         ID bigint(21) NOT NULL,
         NOMBRE varchar(100) NOT NULL,
         USERNAME varchar(100) NOT NULL,
         PASSWORD varchar(100) NOT NULL,
         COMENTARIOS varchar(100) default NULL,
         PRIMARY KEY (ID)
       ) ENGINE=InnoDB DEFAULT CHARSET=latin1;


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88        5
iReport – Creación de un informe
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (1,'Participante
  1','par1user','part1pass','comentarios participante 1');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (2,'Participante
  2','par2user','part2pass','comentarios participante 2');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (3,'Participante
  3','par3user','part3pass','comentarios participante 3');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (4,'Participante
  4','par4user','part4pass','comentarios respecto al participante 4');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (5,'Participante
  5','par5user','part5pass','sin comentarios para el participante 5');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (6,'Participante
  6','par6user','part6pass',NULL);
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (7,'Participante
  7','par7user','part7pass','comentatios participante 7');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (8,'Participante
  8','par8user','part8pass','comentarios participante 8');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (9,'Participante
  9','par9user','part9pass','comentarios participante 9');
  insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (10,'Participante
  10','par10user','part10pass',NULL);




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                  6
iReport – Creación de un informe
 Una vez hemos creado nuestra base de datos MySQL,
  abrimos el iReport. Creamos un datasource clickando
  en el icono




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   7
iReport – Creación de un informe

 Se abrirá la ventana
  de Connections /
  Datasources y
  clickamos en New




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   8
iReport – Creación de un informe


 Seleccionamos
  Database JDBC
  Connection




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   9
iReport – Creación de un informe

 Damos un nombre
  cualquiera a la conexión.
 Seleccionamos el JDBC
  Driver de MySQL
 En JDBC URL indicamos el
  nombre de nuestra BBDD
 Insertamos los datos de
  nuestro login.
 Pulsamos Test para
  comprobar que todo
  funciona correctamente.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   10
iReport – Creación de un informe

     Ahora nos dirigimos al menú superior File > New… y en Report seleccionamos una
      plantilla (yo he seleccionado Wood) y pulsamos Launch Report Wizard




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                      11
iReport – Creación de un informe

 Posteriormente realizaremos 6 pasos:

     1.     Selección de la ubicación en la que se guardará nuestro reporte.
     2.     Selección del datasource e introducción del query para obtener los
            datos que nos interesan.
     3.     Selección de los datos que queremos mostrar en el reporte.
     4.     Creación de grupos para el informe ( en este primer ejemplo no
            probaremos esto).
     5.     Selección del layout o acomodo de los datos en el reporte
     6.     Felicitación por terminar nuestro informe.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                   12
iReport – Creación de un informe

     Los pasos interesantes son el 3 y el 4, así que será en estos en los que nos enfocaremos
      más.

     El paso 1 se realiza de forma automática, así que no tenemos mucho que hacer en él. En
      el paso 2 (en donde comenzamos) seleccionamos el directorio en el que queremos
      guardar nuestro reporte y el nombre que tendrá.

     Nota: La extensión de documentos de reportes generados por JasperReports es ".jrxml"
      que significa "jasper reports xml", y es un documento xml que contiene los datos para
      generar un archivo compilado (".jasper") que es el que usaremos principalmente en
      nuestras aplicaciones Java (aunque también podriamos optar por compilar nuestro
      archivo ".jrxml" desde la misma aplicación Java y así generar el archivo ".jasper"
      correspondiente).

     En este momento no importa mucho en donde guardemos el archivo que se generará, ya
      que posteriormente tendremos que moverlo para que nuestra aplicación java pueda
      encontrarlo. Por mi parte llamaré al archivo “ReportePruebaCurso"


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                13
iReport – Creación de un informe

 Hacemos clic en el botón "Next" para continuar con el paso 3. En este paso
  debemos seleccionar el datasource desde el que los datos del reporte serán
  tomados. Por default está seleccionado el "Empty datasource". Así que
  nosotros seleccionamos el datasource "Conexion MySQL Pruebas" (el
  datasource que creamos anteriormente).

 Al hacer el cambio del datasource veremos que aparece un textarea con el
  título "Query(SQL)" y en la parte inferior debemos tener un mensaje de
  error que dice "Invalid query". (IMAGEN EN DIAPO SIGUIENTE)




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               14
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   15
iReport – Creación de un informe

 Esto ocurre porque, efectivamente, en el textarea no tenemos una consulta
  válida (de hecho no tenemos ninguna). Por lo que ahora corregiremos eso.
  Para esto tenemos 3 opciones:

1.   Escribir una consulta nosotros mismos de forma directa.
2.   Cargar una consulta que tengamos guardada en algún archivo .sql o .txt.
3.   Crear una consulta usando el "diseñador de consultas".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 16
iReport – Creación de un informe
 Nosotros haremos uso del diseñador de consultas. Hacemos clic en el botón
  "Design query" con lo que se abrirá una nueva ventana que está dividida en
  tres secciones.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88            17
iReport – Creación de un informe

 La primer sección es la de la estructura de la consulta. Aquí básicamente
  podremos cambiar entre las sentencias que estamos editando (SELECT, WHERE,
  ORDER BY, etc.). La segunda sección es la de los elementos de nuestra base de
  datos (tablas, vistas, y temporales locales). Aquí podremos seleccionar los
  elementos de los que queremos obtener datos para la consulta. Finalmente la
  tercer sección nos muestra los elementos que hemos seleccionado de la
  segunda sección para que podamos seleccionar los datos a obtener.

 La consulta que haremos será para obtener todos los datos de la tabla
  "participantes", con excepción del "ID". Para esto hacemos doble clic sobre el
  nombre de la tabla "participantes" en la segunda sección de la ventana que
  tenemos abierta. Con esto aparecerá en la tercer sección otra ventana con el
  título "participantes" y un conjunto de checkboxes, cada uno con un campo de
  nuestra tabla. Para generar la consulta que nos interesa solamente
  seleccionamos todos los checkboxes (con excepción del "ID") y veremos que la
  consulta se genera en la primer sección. Ya solo damos clic en el botón "OK".


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                     18
iReport – Creación de un informe

 Con esto ya tendremos nuestra consulta en el textarea correspondiente y
  podemos continuar con el paso 4, para lo que hacemos clic en el botón
  "Next".

 En este paso solo tenemos que seleccionar cuáles campos del query
  generado en el paso anterior queremos que se muestren en el reporte.
  Como nosotros queremos que se muestren todos pasamos todos los
  campos del lado izquierdo al lado derecho y hacemos clic en el botón
  "Next".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              19
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   20
iReport – Creación de un informe

 Ahora en el paso 5 debemos seleccionar cómo queremos que los datos
  sean agrupados. Esto lo explicaré en algún otro post, pero por el momento
  dejemos todo en blanco y demos clic en el botón "Next".

 El último paso es el solamente una felicitación por haber creado un nuevo
  informe.

 Ahora hacemos clic en el botón "Finish" y ya podremos ver la plantilla de
  nuestro informe.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                21
iReport – Creación de un informe

 Si queremos ver como se verá el reporte final, en este caso, podemos ver
  un preview con los datos reales si cambiamos a la vista de "preview" en la
  ventana del editor.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 22
iReport – Creación de un informe

 Al hacer clic en la pestaña de "preview", nuestro reporte se compilará y se
  mostrará. En este caso el reporte puede ser pre-visualizado porque las
  siguientes condiciones se cumplen:
 Tenemos una base de datos poblada (esto es muy importante, ya que si no
  tiene datos obtendremos un mensaje de error).
 Tenemos un datasource configurado para esta base de datos.
 Nuestro reporte hace una consulta directa a esta base de datos a través del
  datasource anterior.
 El reporte está preparado para mostrar los datos recuperados
  anteriormente.
 Algo importante que ocurre al hacer este preview es que el reporte se
  compila generando el archivo “ReportePruebaCurso.jasper" el cual es el
  archivo que usaremos desde la aplicación Java que crearemos en un
  momento.



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              23
iReport – Creación de un informe

 Si queremos compilar nuestro reporte de forma manual podemos hacer clic
  en el botón "Compile Report" de la vista de diseño:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88         24
iReport – Creación de un informe

 Haremos algunas modificaciones para que este reporte se vea un poco
  mejor: primero cambiaremos el título que dice "Wood Title" por "Reporte
  de Participantes", cambiamos el color de texto a negro, y eliminamos el
  fondo y el subtitulo que tiene.

 Además cambiamos el título de cada una de las columnas por algo más
  claro. Por ejemplo, podemos cambiar el título de la columna
  "participantes_USERNAME" a "Usuario", "participantes_NOMBRE" a
  "Nombre", etc.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              25
iReport – Creación de un informe

 Ahora que tenemos un reporte que nos agrada (o al menos que no se ve
  tan mal) veremos cómo generar este reporte desde una aplicación Java.
 Lo primero que haremos es crear un nuevo proyecto en NetBeans. Para
  esto vamos al menú "File -> new Project...". En la ventana de nuevos
  proyectos seleccionamos la categoría "Java" y de tipo de proyecto
  seleccionamos "Java Application" y hacemos clic en el botón "Next". En la
  siguiente ventana introducimos el nombre de nuestro proyecto y dejamos
  seleccionada la opción "Create Main Class" y "Set as Main Project".
 Hacemos clic en el botón "Finish" para que nuestro proyecto se genere. Lo
  que haremos a continuación es crear una biblioteca que contenga los
  archivos jars básicos necesarios de JasperReports. De esta forma no
  tendremos que agregar cada uno de los jars cada vez que necesitemos usar
  JasperReports en un proyecto. Además si actualizamos la versión del API
  que usamos, solo debemos actualizar esta bibliotec


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88            26
iReport – Creación de un informe

 Clickamos en Tools -> libraries




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   27
iReport – Creación de un informe
 Con esto se abrirá la
  ventana del "Library
  Manager". En esta
  ventana hacemos clic
  en el botón "New
  Library":
 En la ventana que se
  abre escribimos el
  nombre de la nueva
  biblioteca (en mi caso
  será "JasperReports")
  y en el tipo de la
  biblioteca
  seleccionamos la
  opción "Class
  Libraries".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   28
iReport – Creación de un informe
      Al hacer clic en el botón
       "OK" regresaremos al
       "Library Manager" y
       tendremos nuestra
       nueva biblioteca creada.
       Pero aún nos hace falta
       agregar los archivos jars
       que conformarán esta
       biblioteca. Nos
       aseguramos que la
       pestaña "Classpath" esté
       seleccionada y hacemos
       clic en el botón "Add
       Jar/Folder" situado a la
       derecha. Se abrirá un
       cuadro de dialogo para
       que seleccionemos los
       jars que queremos
       agregar.



    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   29
iReport – Creación de un informe
      Navegamos hasta el directorio en el que tenemos los jars de JasperReports que bajamos
       anteriormente. Para que los ejemplos que haremos más adelante (en los siguientes posts) funcionen,
       debemos agregar a la biblioteca los siguientes jars:

      jasperreports-3.7.6.jar
      jasperreports-3.7.6-javaflow.jar
      jasperreports-fonts-3.7.6.jar
      commons-beanutils-1.8.0.jar
      commons-collections-2.1.1.jar
      commons-digester-1.7.jar
      commons-logging-1.0.4.jar
      commons-javaflow-20060411.jar
      groovy-all-1.7.5.jar
      iText-2.1.7.jar
      png-encoder-1.5.jar
      poi-3.6.jar

      Algunos de estos jars se encuentran en el directorio "dist" y otros en el directorio "lib" del archivo .zip
       de JasperRepots que bajamos anteriormente.

      Hacemos clic en el botón "Add Jar/Folder" y con esto tendremos lista nuestra biblioteca
       "JasperReports" para agregarla a nuestro proyecto.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                                    30
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   31
iReport – Creación de un informe
 Hacemos clic en el botón "OK" para regresar al ambiente de trabajo.

 Ahora hacemos clic derecho en el nodo "Libraries" de la ventana
  "Projects". Con esto se abrirá un menú contextual con 4 opciones,
  seleccionamos la opción "Add Library..."




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88          32
iReport – Creación de un informe
 En la ventana que se abre seleccionamos la biblioteca que creamos
  anteriormente ("JasperReports") y hacemos clic en el botón "Add
  Library". Al hacer esto veremos se agregar al nodo "Libraries" de
  nuestro proyecto todos los jars que tiene nuestra biblioteca.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88        33
iReport – Creación de un informe
 Ahora debemos recoger el fichero ReportePruebas.jasper que se generó
  hace unas diapositivas y lo colocamos en el directorio raíz del proyecto
  de NetBeans que acabamos de crear (la raíz del proyecto es el directorio
  en el que se encuentran los subdirectorios "nbproject", "src", entre
  otros). Copiamos también la imagen wood.jpg si la hemos mantenido en
  nuestro informe.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               34
iReport – Creación de un informe
      Lo primero que debemos hacer es agregar el conector de mysql al proyecto
       JAVA. Para ello debemos descargar el conector de mysql JDBC
       (http://www.mysql.com/downloads/connector/j/ ). Una vez descargada la
       agregaremos a la biblioteca de nuestro proyecto.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 35
iReport – Creación de un informe




      Lo siguiente que debemos hacer ahora es crear una conexión a la base de datos que
       creamos anteriormente.

public static void main(String[] args) throws Exception {
    // TODO code application logic here
    Class.forName("com.mysql.jdbc.Driver");
    Connection conexion = (Connection)
DriverManager.getConnection("jdbc:mysql://localhost:3306/pruebascurso", "root",
"cursomysql");
  }



    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          36
iReport – Creación de un informe
 Lo siguiente que debemos hacer es cargar el archivo ".jasper" generado
  anteriormente y colocarlo en un objeto
  "net.sf.jasperreports.engine.JasperReport". Para esto hacemos uso de la
  clase de utilidad "net.sf.jasperreports.engine.util.JRLoader":

JasperReport reporte = (JasperReport) JRLoader.loadObject("RepotePruebaCurso.jasper");

      Ahora el objeto "reporte" contiene la definición del reporte, pero aún hace falta
       que llenemos este reporte con los datos que obtendrá de la base de datos. Para
       esto usamos la clase "net.sf.jasperreports.engine.JasperFillManager". Esta clase
       tiene un método estático, "fillReport", que nos permite llenar el reporte con
       datos obtenidos de distintas fuentes de datos (una de estas fuentes es la
       sentencia SQL que escribimos al generar el reporte con el wizard en iReports y la
       conexión que usaremos en un momento, veremos qué otras fuentes de datos
       existen y cómo usarlos en los siguientes posts). En este caso la fuente de datos
       es la conexión directa a la base de datos que creamos anteriormente (el objeto
       conexion):

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, conexion);
    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          37
iReport – Creación de un informe
 Pasamos "null" como segundo parámetro porque no estamos pasando
  ningún parámetro al reporte (esto también lo veremos después).

 El objeto "JasperPrint" que obtenemos como resultado de la invocación
  del método "fillReport" es la representación de nuestro reporte (ahora
  con datos) que podemos mandar a imprimir, mostrar en pantalla (si
  estamos usando una aplicación swing o awt), o, como en este caso,
  guardarlo en un archivo.

 Si están haciendo una aplicación swing y quieren mostrar este reporte
  directamente en un componente pueden pasar el objeto "JasperPrint"
  que acabamos de crear como parámetro a un nuevo objeto
  "net.sf.jasperreports.view.JasperViewer", el cual es un componente
  swing, y agregar este último a un panel.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             38
iReport – Creación de un informe
 Para guardar este reporte a un archivo debemos usar un
  "net.sf.jasperreports.engine.JRExporter".
  "net.sf.jasperreports.engine.JRExporter" es una interface, y las clases
  que la implementan nos permiten generar el reporte en distintos
  formatos de una forma sencilla. Veremos cómo generar los reportes en
  los siguientes formatos:
         PDF
         HTML
         CSV
         RTF
         TXT
         XLS
         XML
         XLSX
         DOCX
         PPTX




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              39
iReport – Creación de un informe
 Primero declaramos una referencia a un objeto de tipo "JRExporter" de la
   siguiente forma:
JRExporter exporter =

 Será esta referencia la que usaremos de ahora en adelante. Para que
   nuestro reporte sea guardado en formato PDF creamos un objeto de tipo
   "net.sf.jasperreports.engine.export.JRPdfExporter" y lo asignamos a nuestra
   referencia exporter:
JRExporter exporter = new JRPdfExporter();

 Ahora, las siguientes líneas son comunes no importando el formato en el
  que vaya a quedar nuestro reporte:

exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new java.io.File("reportePDF.pdf"));
exporter.exportReport();



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                               40
iReport – Creación de un informe
      La primer línea asigna a nuestro objeto "exporter" el "jasperPrint" (el reporte
       con datos) que creamos anteriormente. La segunda línea le dice al "exporter"
       cuál será el nombre del archivo generado (en este caso "reportePDF.pdf").
       Recuerden cambiar el nombre y la extensión del archivo cada vez que
       cambiemos de formato.
      La última línea es la que realiza el proceso de exportación.
      Si ahora ejecutamos nuestra aplicación veremos que en el directorio raíz del
       proyecto se ha creado un archivo llamado "reportePDF.pdf":




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        41
iReport – Creación de un informe
   Ahora, para que nuestro reporte sea exportado a formato HTML cambiamos la
    línea:
JRExporter exporter = new JRPdfExporter();
Por
JRExporter exporter = new JRHtmlExporter();
• y el nombre del archivo de "reportePDF.pdf" a "reporteHTML.html". Al ejecutar
    nuevamente nuestra aplicación tendremos veremos que se genera el archivo
    "reporteHTML.html" en el directorio raíz de la aplicación:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 42
iReport – Creación de un informe
      Como pudimos ver, con un par de modificaciones pudimos hacer que nuestro
       reporte se generara en un formato completamente distinto. Con el resto de los
       formatos es igual de simple. Usamos las siguientes clases para generar los
       reportes en los siguientes formatos:

      PDF: net.sf.jasperreports.engine.exportJRPdfExporter
      HTML: net.sf.jasperreports.engine.exportJRHtmlExporter
      CSV: net.sf.jasperreports.engine.exportJRCsvExporter
      RTF: net.sf.jasperreports.engine.exportJRRtfExporter
      XLS: net.sf.jasperreports.engine.exportJRXlsExporter
      XML: net.sf.jasperreports.engine.exportJRXmlExporter
      TXT: net.sf.jasperreports.engine.exportJRTextExporter
      XLSX: net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter
      DOCX: net.sf.jasperreports.engine.export.ooxml.JRDocxExporter
      PPTX: net.sf.jasperreports.engine.export.ooxml.JRPptxExporter


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                      43
iReport – Creación de un informe
      Para generar archivos .txt tendrán que agregar, además, estas dos líneas:

 exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, 12);//text
  exporter
 exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, 12);//text
  exporter




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                  44
iReport – Creación de un informe
  PARTE 2: Uso de DataSources
         Personalizados




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   45
iReport – Creación de un informe
      Ahora veremos cómo generar nuestros reportes sin hacer uso de una conexión.
       Esto puede ser muy útil en los casos en los que ya tengamos los datos en
       memoria y no necesitemos realizar una conexión a la base de datos; o en el caso
       en que, por alguna razón ajena a nosotros, no podamos obtener la conexión.
      Para poder hacer esto se nos proporciona una interface:
       "net.sf.jasperreports.engine.JRDataSource". Esta interface tiene solo dos
       métodos:

getFieldValue(JRField jrField)
next()




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        46
iReport – Creación de un informe
      Creamos un nuevo proyecto en NetBeans (menú "File -> New Project..."). En la
       ventana de nuevos proyectos seleccionamos la categoría "Java" y como tipo de
       proyecto seleccionamos "Java Application" y hacemos clic en el botón "Next".
       En la siguiente ventana introducimos el nombre de nuestro proyecto y dejamos
       seleccionada las opciones "Create Main Class" y "Set as Main Project".

      Para que podamos pasar datos a nuestro reporte es necesario que utilicemos un
       datasource. En el ejemplo anterior veíamos que el datasource que usábamos
       era la base de datos y la conexión a la misma. En esta ocasión el datasource será
       una de nuestras clases. Esta clase deberá implementar la interface
       "JRDataSource" y contendrá la lógica para pasar los datos correspondientes a
       nuestro reporte.

      Creamos una nueva clase haciendo clic derecho sobre el nodo "Source
       Packages" de la ventana "Projects", o sobre el paquete que ya tenemos creado,
       y en el menú contextual que se abre seleccionamos la opción "New -> Java
       Class...".

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          47
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   48
iReport – Creación de un informe
      En la ventana que se abre escribimos como en nombre de la nueva clase
       "Participante" y presionamos el botón "Finish". Con esto veremos en la ventana
       de nuestro editor la nueva clase "Participante".

      Esta clase "Partcipante" representará los datos que se mostrarán en el reporte,
       tal como en el ejemplo anterior cada uno de los registros de la tabla
       "participantes" representaba una fila en el reporte final, cada objeto
       participante que creemos representará una fila en el nuevo reporte.

      Agreguemos los siguientes atributos a nuestra clase:

    private int id;
    private String nombre;
    private String username;
    private String password;
    private String comentarios;

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        49
iReport – Creación de un informe
   Además agregamos sus getters y sus setters y dos constructores, uno sin argumentos y uno que
    reciba como argumentos todas las propiedades declaradas anteriormente.
public class Participante
{
  private int id;
  private String nombre;
  private String username;
  private String password;
  private String comentarios;

    public Participante()
    {
    }

    public Participante(int id, String nombre, String username, String password, String comentarios)
    {
      this.id = id;
      this.nombre = nombre;
      this.username = username;
      this.password = password;
      this.comentarios = comentarios;
    }

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                      50
iReport – Creación de un informe
public String getComentarios()
 {
   return comentarios;
 }

 public void setComentarios(String comentarios)
 {
   this.comentarios = comentarios;
 }

 public int getId()
 {
   return id;
 }

 public void setId(int id)
 {
   this.id = id;
 }

 public String getNombre()
 {
   return nombre;
 }



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   51
iReport – Creación de un informe
    public void setNombre(String nombre)
    {
      this.nombre = nombre;
    }
    public String getPassword()
    {
      return password;
    }
    public void setPassword(String password)
    {
      this.password = password;
    }
    public String getUsername()
    {
      return username;
    }
    public void setUsername(String username)
    {
      this.username = username;
    }
}




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   52
iReport – Creación de un informe
•      Ahora, antes de seguir con nuestro
       código Java, pasaremos a crear la
       plantilla de nuestro reporte con
       iReport, por lo que abrimos esta
       herramienta.

•      En esta ocasión no haremos uso de
       un wizard para crear el reporte, sino
       que lo haremos desde cero.

•      Para crear el nuevo reporte vamos
       el menú "File -> New...". En la
       ventana que se abre seleccionamos
       uno de los formatos "Blank" y
       presionamos el botón "Open this
       Template":


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   53
iReport – Creación de un informe
•      Después introducimos el nombre del reporte, yo lo llamaré "reporte2.jrxml", y la
       ubicación en la que se guardará. Recomiendo que en esta ocasión guardemos el
       reporte en el directorio raíz del proyecto de NetBeans que acabamos de crear.
       Hacemos clic en el botón "Next" y se nos mostrará un mensaje de felicitación por
       haber creado un nuevo reporte. Cuando presionen el botón "Finish" verán una
       hoja dividida en 7 u 8 diferentes porciones horizontales llamadas bandas.
•      Cuando generamos nuestro reporte final con datos, cada una de estas bandas se
       comporta de una forma distinta. Algunas aparecen solo al principio o al final del
       reporte, otras aparecen con cada nueva fila que se le agrega, otras solo al final
       de los datos, etc.

•      La plantilla de reportes está dividida en 10 bandas predefinidas. Una banda
       siempre tiene el mismo ancho que la página. Sin embargo el alto de algunas de
       las bandas puede variar durante la fase de llenado de datos, aún si establecimos
       un alto en el momento del diseño.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          54
iReport – Creación de un informe
•      Las bandas existentes son:

            Background
            Title
            Page Header
            Column Header
            Detail 1
            Column Footer
            Page Footer
            Last Page Footer
            Summary
            No Data




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   55
iReport – Creación de un informe
      Lo primero que haremos es agregar texto a nuestro reporte. En iReport existen
       dos tipos de texto: texto estático y texto dinámico (también llamado
       expresiones). El texto estático es aquel que no cambia, mientras que las
       expresiones son como etiquetas que le indican a JasperReports que debe
       reemplazarlas por algún valor al momento de generar el reporte final.

      Existen 3 tipos de expresiones:

         Campos (fields) representados con "$F{nombre_campo}".
         Variables representadas por "$V{nombre_variable}".
         Parámetros representados por "$P{nombre_parámetro}".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                      56
iReport – Creación de un informe
      Cada uno de estos tipos de expresiones tiene un uso particular:

      Los campos ("$F{}") le dicen al reporte dónde colocará los valores obtenidos a
       través del datasource. Por ejemplo, nuestro objeto "Partcipante" tiene un
       atributo llamado "username". Usando una expresión de campo indicamos en
       cuál parte o sección del reporte debe aparecer el valor de ese atributo usando
       "$F{username}". Esto quedará más claro un poco más adelante.

      Los parámetros ("$P{}") son valores que usualmente se pasan al reporte
       directamente desde el programa que crea el JasperPrint del reporte (en nuestra
       aplicación Java). Aunque también existen algunos parámetros internos que
       podemos leer pero no modificar. Para hacer uso de estos parámetros
       simplemente indicamos el nombre del parámetro en el lugar que queremos
       colocarlo. Pueden encontrar los nombres y significados de los parámetros
       internos en la documentación de JasperReports.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                       57
iReport – Creación de un informe
      Las variables ("$V{}") son objetos usados para almacenar valores como los
       resultados de cálculos. Al igual que con los parámetros, JasperReports tiene
       algunas variables internas que podemos leer. Pueden encontrar los nombres y
       significados de las variables la documentación de JasperReports.

      Cada uno de estos elementos tiene un nombre, un tipo (que debe corresponder
       con un tipo de objeto Java como String o Integer), y una descripción opcional.
       Además deben ser registrados para poder ser usados en tiempo de diseño y que
       puedan ser entendidos al momento de compilar el reporte, y por lo tanto para
       que nuestro reporte funcione correctamente en tiempo de ejecución. Esto lo
       veremos un poco más adelante.

      Regresemos a donde nos quedamos. Queremos agregar un texto estático a
       nuestro reporte a modo de título. Para esto debemos agregar un elemento
       llamado "Static Text". Los elementos que podemos agregar a nuestros reportes
       están en una ventana llamada "Palette", que se encuentra en la parte derecha de
       iReport, bajo la categoría "Report Elements". Si no pueden ver la ventana
       "Palette" presionen las teclas "Ctrl + Shift + 8":
    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        58
iReport – Creación de un informe
      De esta ventana arrastramos el elemento "Static Text" a la banda "Title". "Title"
       es una banda que solo aparece en la parte superior de la primer página. Por lo
       que nos sirve para colocar el título del reporte y/o el nombre y logo de nuestra
       empresa.

      Una vez que hayamos colocado el texto estático en la banda correspondiente y
       mientras aún esté seleccionado, modificamos sus propiedades usando la ventana
       de propiedades del elemento y la barra de formato de texto. También podemos
       abrir otra ventana que nos ayude a alinear y controlar el alto y el ancho de los
       elementos yendo al menú "Window -> Formatting Tools".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          59
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   60
iReport – Creación de un informe
      Ahora agregamos los encabezados de las columnas en las que se mostrarán los datos que
       pasaremos al reporte. Agregamos estos nombres en la banda "Column Header", la cual se
       repetirá en cada página antes de mostrar los datos de las columnas.

      Agregaremos las columnas "Nombre", "Usuario", "Contraseña", y "Comentarios". Por lo
       que nuevamente arrastramos un elemento "Static Text" para cada una de las columnas.
       También podemos ajustar el alto de esta banda para que se ajuste al de nuestro texto, ya
       sea moviéndola directamente en el diseñador, o desde la ventana de propiedades:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                 61
iReport – Creación de un informe
      Nuestro reporte ya casi está terminado, ahora solo nos queda agregar los campos en los
       que se mostrarán los datos que pasaremos al reporte en un momento. Para que estos
       campos puedan ser reemplazados por el valor real es necesario que usemos las
       expresiones (texto dinámico) de las que hablé anteriormente. Para esto definiremos un
       "field" para cada uno de los campos que queramos mostrar (en este caso serán los mismos
       campos para los que definimos las cabeceras de las columnas).

      Los fields deben definirse antes de poder ser usados. Esta definición incluye el nombre del
       field y su tipo. Los fields (así como el resto de las expresiones) se definen en la ventana
       "Report Inspector" a la izquierda del diseñador del reporte. Ahí existe un nodo llamado
       "Fields" que es donde se encuentran los fields que hemos definido y que por lo tanto
       podemos usar.

      Hacemos clic derecho en el nodo "Fields" de la ventana "Report Inspector". Con esto se
       abre un menú contextual. Seleccionamos la opción "Add Field" (la única habilitada).




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                    62
iReport – Creación de un informe
      Con esto se agregará un field llamado "field1" que por default es de tipo "java.lang.String".
       Cambiamos el nombre de este campo por "nombre" usando la ventana de propiedades.
       Esto es importante porque donde pongamos este campo será en donde se muestre el valor
       del campo nombre de nuestros objetos Participantes.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                      63
iReport – Creación de un informe
      Hacemos lo mismo para el resto de los campos ("username", "password", "comentarios",
       "id"). Hay que tener cuidado cuando agreguemos el field "id". Si recuerdan, en la definición
       de la clase "Participante" la propiedad "id" está definida como "int". Sin embargo, a
       JasperReports solo podemos pasarle objetos para ser usados como valores, por lo que será
       necesario cambiar el tipo de la clase ("Field Class en la ventana de propiedades) a
       "java.lang.Integer" (aunque en realidad no mostraremos el "id" en este ejemplo).




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                     64
iReport – Creación de un informe
 Ahora debemos indicar en qué parte de nuestro reporte queremos que
  se muestren los valores correspondientes a los atributos de los objetos
  "Participante" que le pasemos. Para eso simplemente arrastramos los
  fields correspondientes al lugar en el que queremos que se muestren
  (arrastramos el field "nombre" a donde queremos que se muestre el
  atributo "nombre", el campo "username" en donde queremos que se
  muestre el atributo "username", etc.) desde el "Report Inspector". Al
  arrastrar los fields, iReport agregará automáticamente un encabezado
  para este field, solo borren el encabezado agregado




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              65
iReport – Creación de un informe
      Estos fields los colocaremos en la banda "Detail 1" la cual se repite cada vez que recibe un
       nuevo objeto y coloca sus valores en la misma fila (quedará más claro cuando ejecutemos
       el ejemplo). Al final, el reporte debe quedar de la siguiente forma:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                     66
iReport – Creación de un informe
      Por el momento esto es todo lo que necesitamos hacer en iReport para mostrar este
       reporte básico. Hacemos clic en el botón "Compile Report" para compilar el reporte y
       generar su archivo ".jasper" respectivo.

      Podemos ver una vista previa del reporte haciendo clic en la pestaña "Preview".
       Asegúrense de seleccionar el "Empty datasource" antes de ver el preview, de lo contrario
       les aparecerá un error indicado que el documento no tiene páginas. Al final deben ver algo
       como esto:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   67
iReport – Creación de un informe
      Los "nulls" aparecen porque no se recuperó ningún valor que coincidiera con el nombre de
       ese field usando nuestro datasource (que en este caso está vacío, lo cual solucionaremos a
       continuación).

      Regresamos al NetBeans y ahora crearemos una clase que implemente la interface
       "JRDataSource" de la que hablé antes. Esta clase será la que usaremos como datasource
       para nuestro reporte, y la que regresará los valores correspondientes a cada uno de los
       fields que creamos antes.

      Primero agregamos a nuestro proyecto la libreria "JasperReports" que creamos en las
       primeras diapos de este ppt. En esta ocasión no necesitaremos agregar el jar con el Driver
       de la base de datos, ya que no usaremos ninguna.

      Creamos una nueva clase llamada "ParticipantesDatasource" y hacemos que esta nueva
       clase implemente la interface "JRDataSource". Podemos hacer que NetBeans implemente
       de forma automática los métodos de esta interface (proporcionando una implementación
       vacía) presionando las teclas "Alt + Insert" y seleccionando la opción "Implement Method"
       en el menú contextual que se abre.


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   68
iReport – Creación de un informe




      Con esto se abrirá una ventana llamada
       "Generate Implement Methods" en la cual
       seleccionamos la interface "JRDataSource"
       para que se seleccionen de forma
       automática todos sus métodos y hacemos
       clic en el botón "Generate".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   69
iReport – Creación de un informe
      Ahora agregaremos a nuestra clase un atributo de tipo "java.util.List" llamado
       "listaParticipantes" que mantendrá justamente eso: la lista de los participantes de los cuales
       mostraremos los datos en el reporte. Inicializamos esta lista a un objeto de tipo
       "java.util.ArrayList", de esta forma:

private List<Participante> listaParticipantes = new ArrayList<Participante>();

•      También agregamos un contador llamado "indiceParticipanteActual" de tipo "int", que
       usaremos enseguida, y lo inicializamos a "-1"; un poco más adelante explicaré por qué este
       valor:

private int indiceParticipanteActual = -1;




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                       70
iReport – Creación de un informe
      Ahora implementaremos el método getFieldValue. Este método recibe un argumento de
       tipo JRField. Este parámetro nos indicará por cuál de los "fields" nos está preguntando el
       reporte.

      En la implementación de este método regresaremos los valores correspondientes a cada
       uno de los atributos de nuestros objetos "Participante" conforme se vayan pidiendo. Por lo
       que el método queda así:

public Object getFieldValue(JRField jrField) throws JRException
{
  Object valor = null;

    if("nombre".equals(jrField.getName()))
    {
       valor = listaParticipantes.get(indiceParticipanteActual).getNombre();
    }




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   71
iReport – Creación de un informe
else if("username".equals(jrField.getName()))
  {
     valor = listaParticipantes.get(indiceParticipanteActual).getUsername();
  }
  else if("password".equals(jrField.getName()))
  {
     valor = listaParticipantes.get(indiceParticipanteActual).getPassword();
  }
  else if("comentarios".equals(jrField.getName()))
  {
     valor = listaParticipantes.get(indiceParticipanteActual).getComentarios();
  }

    return valor;
}




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 72
iReport – Creación de un informe
      Donde básicamente ocurre lo que dije anteriormente: cada vez que el reporte pregunta por
       el valor de un atributo del objeto "Participante" actual (al que hace referencia el contador
       "indiceParticipanteActual") se regresa el valor correspondiente. Esta petición se hace en
       base al nombre del field que creamos desde iReport.

      Ahora tal vez se estén preguntando ¿en qué momento se incrementa el contador?, o ¿cómo
       sabe JasperReport cuántos participantes existen? Pues bien, ambas cosas ocurren gracias a
       la implementación del método "next()".

public boolean next() throws JRException
{
  return ++indiceParticipanteActual < listaParticipantes.size();
}
public void addParticipante(Participante participante)
  {
    this.listaParticipantes.add(participante);
  }


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                     73
iReport – Creación de un informe
      JasperReport pregunta a este método para saber si existe otro "Participante" en la lista. Este
       método es el primero que se llama al generar el reporte. Por lo que el contador debe
       comenzar en "-1", así cuando este método se llama la primera vez el contador queda en "0",
       y cuando se invoca al método "getFieldValue" se regresa el objeto Participante del índice
       adecuado.

      Esto es todo lo que necesitamos para que nuestro datasource funcione para generar
       reportes. Agregaré un método de utilidad a esta clase, llamado "addParticipante", que me
       permita agregar un nuevo participante a la lista (aunque si lo prefieren pueden agregar el
       setter de "listaParticipantes")




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                       74
iReport – Creación de un informe
      Para finalizar agregaremos en nuestra clase "Main" un ciclo dentro del cual crearemos 10
       objetos "Participante", los cuales iremos agregando uno a uno a un objeto de tipo
       "ParticipantesDatasource":

ParticipantesDatasource datasource = new ParticipantesDatasource();

for (int i = 1; i <= 10; i++)
{
  Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios
para " + i);
  datasource.addParticipante(p);
}




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                      75
iReport – Creación de un informe
      El resto del código para generar el reporte es similar al de la primera parte de esta
       presentación , solo que en esta ocasión en lugar de pasar un objeto de tipo "Connection" al
       método "fillReport" del "JasperFillManager" pasamos nuestro objeto
       "ParticipantesDatasource" de esta forma:

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, datasource);




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                    76
iReport – Creación de un informe
       En el progarma principal tendremos el siguiente código
public static void main(String[] args) throws Exception
 {
   ParticipantesDatasource datasource = new ParticipantesDatasource();

        for (int i = 1; i <= 10; i++)
        {
          Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i);
          datasource.addParticipante(p);
        }

        File reporteFichero = new File("reporte2.jasper");
        JasperReport reporte = (JasperReport) JRLoader.loadObject(reporteFichero);
        JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, datasource);

        JRExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte2PDF.pdf"));
        exporter.exportReport();
    }

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                                           77
iReport – Creación de un informe
      Al ejecutar este código debemos terminar con un archivo llamado "reporte2PDF.pdf" en el
       directorio raíz de nuestro proyecto y que tiene el siguiente contenido:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                78
iReport – Creación de un informe
      Podemos ver que los datos importantes (los datos de los "Participantes") aparecen en la
       banda "Details 1" (donde colocamos los fields) y que esta banda se repite por cada uno de
       los participantes de la lista.

      Bien, con esto vemos que podemos crear nuestros propios datasources y pasar datos para
       generar reportes sin la necesidad de una conexión a base de datos. Es bastante sencillo,
       solamente debemos proporcionar una clase que implemente la interface "JRDataSource" y
       que regrese los valores correspondientes a los fields del reporte.

      Aunque esto ya es bastante fácil y útil, existe una forma aún más simple para crear un
       datasource, sin la necesitad de implementar la interface "JRDataSource". Esto es gracias a
       un conjunto de clases que JasperReports ya nos proporciona y realizan básicamente la
       misma función que la clase "ParticipantesDatasource" que acabamos de crear. Estas clases
       son:

 JRBeanCollectionDataSource
 JRJpaDataSource
 JRBeanArrayDataSource


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   79
iReport – Creación de un informe
      Las cuales ya implementan la interface "JRDataSource". Cada una funciona con distintos
       tipos de datos, pero en que nos interesa en este momento es
       "JRBeanCollectionDataSource" que puede convertir una "java.util.Collection" en un
       DataSource de forma automática. Modificaremos nuestro método "main" para hacer uso de
       esta clase.

      Ahora, en vez de llenar nuestro "ParticipantesDatasource" en el ciclo simplemente
       llenaremos un "java.util.List":

List listaPariticipantes = new ArrayList();

for (int i = 1; i <= 10; i++)
{
  Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios
para " + i);
  listaPariticipantes.add(p);
}



    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                      80
iReport – Creación de un informe
      Y en lugar de pasar un objeto de tipo "Connection" al método "fillReport" del
       "JasperFillManager" pasamos un nuevo objeto "JRBeanCollectionDataSource" construido
       con la lista "listaPariticipantes":

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new
JRBeanCollectionDataSource(listaPariticipantes));




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                            81
iReport – Creación de un informe
        Al final nuestra clase "Main" queda así:
public static void main(String[] args) throws Exception
  {
    List listaPariticipantes = new ArrayList();

        for (int i = 1; i <= 10; i++)
        {
          Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i);
          listaPariticipantes.add(p);
        }

        JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte2.jasper");

        JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(listaPariticipantes));

        JRExporter exporter = new JRPdfExporter();
        exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
        exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte2PDF_2.pdf"));
        exporter.exportReport();
    }




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                                                     82
iReport – Creación de un informe
 PARTE 3: Parámetros y Variables




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   83
iReport – Creación de un informe
 En la parte anterior vimos como hacer uso de los Fields para indicar la
  posición dentro de nuestro reporte en la que deben quedar los valores
  que obtenemos de nuestra aplicación Java.

 Ahora hablaré de los otros dos tipos de expresiones que proporciona
  JasperReports: Parameters y Variables. Y la forma en la que podemos
  usarlos para hacer más dinámicos nuestros reportes.

 Para ello seguiremos usando el ejemplo de la segunda parte.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              84
iReport – Creación de un informe
 Abrimos iReport y el reporte de la parte anterior ("reporte2.jrxml"). En
  este momento nuestro reporte debe verse como en la siguiente imagen:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               85
iReport – Creación de un informe
 En donde solo tenemos textos estáticos y "fields" para mostrar un
  reporte básico de los datos de ciertos participantes. Si lo recuerdan, la
  salida del reporte al generarlo desde nuestra aplicación Java, era la
  siguiente:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                86
iReport – Creación de un informe
      Ahora pasaremos a agregar "Parameters" a este
       reporte. Como dije en el tutorial anterior: los
       parámetros son valores que usualmente se pasan al
       reporte desde el programa que crea el "JasperPrint"
       del reporte (nuestra aplicación Java) haciendo uso de
       un "java.util.Map".


      En este caso pasaremos dos parámetros: el título del
       reporte, y el nombre del autor del mismo.

      Al igual que con los Fields, para poder hacer uso de un
       parámetro primero hay que declararlo en el "Report
       Inspector" (situado en el panel izquierdo del iReport),
       por lo que nos dirigimos a esta ventana y hacemos clic
       derecho sobre el nodo "Parameters". Al hacer esto se
       abrirá un menú contextual. Seleccionamos la opción
       "Add Parameter" (la única habilitada).

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   87
iReport – Creación de un informe
• Con esto se agregará un nuevo parámetro llamado "parameter1" de tipo
  "java.lang.String". Cambiamos en nombre del parámetro en la ventana de
  propiedades a "titulo" (recuerden que este nombre es el que deberemos
  usar desde nuestra aplicación Java para establecer el valor del
  parámetro).




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             88
iReport – Creación de un informe
 Agregamos otro parámetro llamado "autor" de la misma forma que
  agregamos el de "titulo".




 Ahora eliminamos el elemento que teníamos como título del reporte (el
  que contiene el texto estático "Reporte de Participantes") y lo
  reemplazamos por el parámetro "titulo" arrastrándolo desde la ventana
  del "Report Inspector" a la banda "Title".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88            89
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   90
iReport – Creación de un informe
 Ajustamos este elemento
  para que tenga el mismo
  formato que el título que
  teníamos anteriormente.

 Ahora agregamos el
  segundo parámetro
  ("autor") en la banda
  "Page Header", la cual se
  repite en la parte
  superior de cada una de
  las páginas (en la primer
  página aparece después
  del título), arrastrándolo
  a esta banda.


 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   91
iReport – Creación de un informe
      Si dejamos esta expresión tal y como está ("$P{autor}") solo se mostrará en
       nombre del autor en la parte superior de cada una de las páginas (por ejemplo si
       el autor del reporte es "Juan", solo veremos la palabra "Juan" en la parte superior
       de los reportes). Esto podría no ser claro para quienes revisen este reporte, por lo
       que queremos indicar de forma explícita que a lo que se refiere el valor de este
       parámetro es el nombre del autor. Para hacer esto nos dirigimos a la ventana de
       propiedades de este parámetro (para lo cual debemos tenerlo seleccionado) y
       buscamos la categoría "Text field properties". Ahí se encuentra una propiedad
       llamada "Text Field Expression" cuyo valor es "$P{autor}".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                             92
iReport – Creación de un informe
      Lo que haremos es editar esta
       expresión para anteponer la palabra
       "Autor: ". Para hacer esto presionamos
       el botón "...", con lo que se abrirá una
       ventana que nos permitirá editar la
       expresión. En esta ventana
       modificamos la expresión "$P{autor}"
       para que quede "Autor: " + $P{autor}.
       Con esto lo que logramos es que a la
       cadena estática "Autor: " se le
       concatene el valor de la expresión
       dinámica "$P{autor}". Por lo que ahora
       el lo que aparecerá en la parte superior
       de cada página del reporte será la
       cadena "Autor: Juan".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   93
iReport – Creación de un informe
      Ahora presionamos el botón "Compile Report" para que se genere el reporte compilado
       "reporte2.jasper".

      Veamos una vista previa del reporte, para esto hacemos clic en la pestaña "Preview". Nos
       pedirá los valores de los dos parámetros. Si colocamos para el parámetro "titulo" el valor
       "Reporte" y para el parámetro "autor" el valor "Alex" el preview que veremos será el siguiente:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                   94
iReport – Creación de un informe
      Ahora veremos cómo pasarle estos valores desde nuestra aplicación Java, por lo que abrimos
       nuestro IDE de trabajo, NetBeans.

      Ahí nos dirigimos a la clase "Main" que creamos la última vez y buscamos la línea en donde
       creamos nuestro objeto "JasperPrint":

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new
JRBeanCollectionDataSource(listaPariticipantes));

      Y antes de esta línea crearemos un objeto "java.util.Map" que contendrá nuestros parámetros.
       Colocaremos el nombre de los parámetros (en este caso "autor" y "titulo") como llave y sus
       respectivos valores, "Juan" para el autor y "Reporte Participantes" para el título, como valores.

Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("autor", "Juan");
parametros.put("titulo", "Reporte Participantes");




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                     95
iReport – Creación de un informe
      Y pasamos este "Map" como el segundo parámetro del método "fillReport", al que hasta ahora
       le hemos pasado "null":

JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, parametros, new
JRBeanCollectionDataSource(listaPariticipantes));




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                              96
iReport – Creación de un informe
      El código de nuestro método "main" queda así:
public static void main(String[] args) throws Exception
{
  List<Participante> listaPariticipantes = new ArrayList<Participante>();

    for (int i = 1; i <= 10; i++)
    {
      Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i);
      listaPariticipantes.add(p);
    }

    JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte2.jasper");

    Map<String, Object> parametros = new HashMap<String, Object>();
    parametros.put("autor", "Juan");
    parametros.put("titulo", "Reporte Participantes");

    JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, parametros, new JRBeanCollectionDataSource(listaPariticipantes));

    JRExporter exporter = new JRPdfExporter();
    exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
    exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte3PDF.pdf"));
    exporter.exportReport();
}
    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                                                  97
iReport – Creación de un informe
 Si ejecutamos nuestro
  reporte obtendremos un
  archivo con el siguiente
  contenido:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   98
iReport – Creación de un informe
 Como podemos ver los parámetros "titulo" y "autor" han sido reemplazados
  por los valores "Reporte Participantes" y "Juan" respectivamente.

 Gracias a los parámetros podemos pasar valores (como en este caso
  cadenas, pero podemos pasar prácticamente cualquier tipo de objeto) a
  nuestro reporte directamente desde nuestra aplicación Java.

 Ahora veremos el último tipo de expresión que JasperReports nos
  proporciona, las Variables.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88            99
iReport – Creación de un informe
 En este caso usaremos dos variables. La primera será una de las variables
  internas que ya proporciona JasperReports: PAGE_NUMBER, que nos dice el
  número de la página actual. En este caso como el reporte solo tendrá una
  página solo aparecerá el número 1, pero pueden extender el ejemplo para
  que se generen más páginas.

 La segunda variable que usaremos será una variable creada por nosotros
  mismos y nos mostrará la suma de los puntos de los Participantes (en este
  momento los Participantes no tienen puntos, por lo que tendremos que
  agregarlos).




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                100
iReport – Creación de un informe
 Lo primero que haremos es modificar la clase "Participante" agregando el
  atributo "puntos" de tipo "int" con sus correspondientes setters y getters:

private int puntos;

public int getPuntos()
{
  return puntos;
}

public void setPuntos(int puntos)
{
  this.puntos = puntos;
}
 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                  101
iReport – Creación de un informe
 y en nuestro método "main" agregamos, en el ciclo que crea los objetos
   "Participante", el siguiente código para establecer los puntos de cada uno de
   los Participantes:
p.setPuntos(i);

 Ahora regresamos a iReport y agregamos un nuevo Field en la ventana
  "Report Inspector" llamado "puntos" de tipo "java.lang.Integer". Este field
  será usado para mostrar los puntos que tiene cada uno de los Participantes.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               102
iReport – Creación de un informe
 Agregamos una columna, dentro de la banda "Details 1", para mostrar este
  field:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88           103
iReport – Creación de un informe
 Si compilamos nuestro reporte y ejecutamos nuestra aplicación Java
  debemos ver un reporte con el siguiente contenido:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88         104
iReport – Creación de un informe
 Ahora agregaremos la variable que realizará la suma de los puntos de todos
  los Participantes. Para esto agregamos una nueva variable en el nodo
  "Variables" de la ventana "Report Inspector" haciendo clic derecho sobre
  este nodo y seleccionando la opción "Add Variable" del menú contextual
  que se abre.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             105
iReport – Creación de un informe
 Modificamos sus propiedades en la ventana "Properties" cambiando su
  nombre a "sumaPuntos", su "Variable Class" a "java.lang.Integer", y
  "Calculation" a "Sum" (con esto indicamos que la variable mantendrá la
  suma de los valores que indicaremos más adelante, otras opciones incluyen
  un contador, el promedio, el valor más alto, etc.).

 Ahora indicaremos la suma de cuáles valores son los que queremos que se
  almacene en este variable. Para eso hacemos clic en el botón "..." de la
  propiedad "Variable Expression", con lo que se abrirá una nueva ventana. Es
  esta nueva ventana indicaremos de dónde se tomarán los valores para la
  suma. Podemos usar una expresión tan compleja como necesitemos. Como
  en este caso solo queremos realizar la suma de los puntos escribimos
  “$F{puntos}". Y presionamos el botón "OK" para confirmar.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             106
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   107
iReport – Creación de un informe
 Modificamos sus propiedades en la ventana "Properties" cambiando su
  nombre a "sumaPuntos", su "Variable Class" a "java.lang.Integer", y
  "Calculation" a "Sum" (con esto indicamos que la variable mantendrá la
  suma de los valores que indicaremos más adelante, otras opciones incluyen
  un contador, el promedio, el valor más alto, etc.).

 Ahora indicaremos la suma de cuáles valores son los que queremos que se
  almacene en este variable. Para eso hacemos clic en el botón "..." de la
  propiedad "Variable Expression", con lo que se abrirá una nueva ventana. Es
  esta nueva ventana indicaremos de dónde se tomarán los valores para la
  suma. Podemos usar una expresión tan compleja como necesitemos. Como
  en este caso solo queremos realizar la suma de los puntos escribimos
  "F{puntos}". Y presionamos el botón "OK" para confirmar.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88             108
iReport – Creación de un informe
      Ahora solo arrastramos nuestra variable "sumaPuntos" desde el "Report Inspector"
       hasta la banda "Summary". Esta banda se muestra cuando ya se han mostrado todos
       los datos de la banda "Details 1" y se muestra justo abajo de ella.
      Agregaré un texto estático y una línea en esta banda solo para que se vea un poco
       mejor. Nuestro reporte hasta ahora debe verse así:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                     109
iReport – Creación de un informe
      Ahora para terminar agregaremos la variable "PAGE_NUMBER" que nos dice el número de
       página actual en el reporte. Arrastramos esta variable desde el "Report Inspector" hasta la
       banda "Page Footer", la cual se muestra en la parte inferior de cada página.

      Agregaré también un texto estático solo para indicar que el valor que estamos mostrando
       corresponde al número de página. Al final el reporte queda así:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                    110
iReport – Creación de un informe
      Ahora guardamos y compilamos
       nuestro reporte y ejecutamos
       nuestra aplicación desde el
       NetBeans. El reporte generado
       debe verse así:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   111
iReport – Creación de un informe
  PARTE 4: Gráficas en reportes




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   112
iReport – Creación de un informe
 Algunas veces es más fácil entender la información cuando se nos
  presenta en una imagen. En el caso de los datos, cuando estamos
  haciendo comparaciones, lo más fácil es visualizarlos en una gráfica de
  barras o en una gráfica de pie o pastel.

 Para este ejemplo los datos que graficaremos son las ventas de consolas
  de última generación (Wii, XBox360, y PS3). Tomaremos estos datos de
  VG Chartz que, aunque no son cifras oficiales, mantiene sus datos
  actualizados. En el momento de escribir este tutorial las ventas van:
 Wii: 41.6% para nosotros será 41%
 XBox 360: 29.6% para nosotros será 30%
 PS3: 28.8% para nosotros será 29%




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              113
iReport – Creación de un informe
      Bien, para comenzar crearemos un nuevo proyecto Java standalone en
       NetBeans (File -> New Project... -> Java -> Java Application), le asignamos un
       nombre (que en mi caso será ReporteGrafica) y presionamos el botón "Finish"
       para que el nuevo proyecto se genere y veamos en el editor nuestra clase Main.

      Agregamos al nodo "Libraries" de nuestro proyecto la biblioteca "JasperReports"
       que creamos en la primer parte del tutorial y el jar "commons-logging-
       1.1.1.jar",como lo hemos venido haciendo hasta ahora.

      Adicionalmente debemos agregar dos jars más que nos permitirán generar las
       gráficas. Puesto que JasperReports hace uso de JFreeChart para generar las
       gráficas debemos agregar dos de sus jars: jfreechart.jar y jcommon.jar. Si
       bajaron JasperReports en el archivo .zip que contiene las bibliotecas de soporte
       entonces ya tienen estos jars (que se encuentran en el directorio lib del .zip
       anterior), solo deben agregarlos al nodo "Libraries" del proyecto.




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                         114
iReport – Creación de un informe
      Ahora necesitamos, como en los casos anteriores, una clase cuyas instancias
       mantendrán los datos que mostraremos en el reporte. En este caso, como
       estamos hablando de consolas, creo que lo más adecuado es que esta sea una
       clase "Jugador". Así que agreguemos esta clase a nuestro proyecto.

      Esta clase tendrá tan solo tres atributos: un id , un nombre para distinguir al
       usuario, y el nombre de la consola que tiene (que es el dato que nos interesa
       para crear la gráfica).




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        115
iReport – Creación de un informe
      El código de la clase Jugador queda de
       la siguiente forma:
public class Jugador                                                    public int getId()
{                                                                       {
  private int id;                                                         return id;
  private String nombre;                                                }
  private String consola;
                                                                        public void setId(int id)
    public Jugador(int id, String nombre, String consola)               {
    {                                                                     this.id = id;
      this.id = id;                                                     }
      this.nombre = nombre;
      this.consola = consola;                                           public String getNombre()
    }                                                                   {
                                                                          return nombre;
    public String getConsola()                                          }
    {
      return consola;                                                   public void setNombre(String nombre)
    }                                                                   {
                                                                          this.nombre = nombre;
    public void setConsola(String consola)                              }
    {                                                               }
      this.consola = consola;
    }


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                              116
iReport – Creación de un informe
      El código de la clase Main es el código estándar que hemos estado usando en
       esta serie de tutoriales de JasperReports, con excepción de la parte en la que se
       crean los Jugadores. En este caso usaremos tres ciclos, uno para cada consola.
       Por lo que esta parte del código queda más o menos así (listaJugadores es una
       lista de objetos Jugador):
for (int i = 1; i <= 49; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii"));
}

for(int i = 50; i <= 79; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox"));
}

for(int i = 80; i <= 100; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3"));
}

    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                          117
iReport – Creación de un informe
      Ahora abriremos el iReport y comenzaremos con el diseño de nuestro reporte.
      Creamos un nuevo reporte vacío yendo al menú Archivo -> New... -> Empty
       Report. En la ventana que se abre colocamos el nombre de nuestro reporte
       (reporteGrafica.jrxml) y lo guardamos en el directorio raíz de nuestro proyecto
       de NetBeans:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        118
iReport – Creación de un informe
      Ahora abriremos el iReport y comenzaremos con el diseño de nuestro reporte.
      Creamos un nuevo reporte vacío yendo al menú Archivo -> New... -> Empty
       Report. En la ventana que se abre colocamos el nombre de nuestro reporte
       (reporteGrafica.jrxml) y lo guardamos en el directorio raíz de nuestro proyecto
       de NetBeans:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        119
iReport – Creación de un informe
      Comencemos colocando un título y los encabezados de nuestras columnas de
       datos usando textos estáticos, así como los fields para los datos que
       obtendremos de cada uno de los objetos Jugador (id, nombre, y consola) de la
       misma forma que lo hicimos en este tutorial (no olviden guardar de forma
       constante sus avances para no perder su trabajo):




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                     120
iReport – Creación de un informe
      Ahora vienen los pasos interesantes. Primero debemos crear un
       grupo. Un grupo nos permite tratar de forma especial un conjunto
       de datos que se encuentran asociados (es como un group by en
       SQL). Además, al crear un grupo se genera también una variable
       que mantiene el conteo de los elementos de cada grupo (como si
       hicieramos un count sobre los elementos de los grupos en SQL).

      En este caso el grupo que nos interesa es el de las consolas.

      Si estuvieramos usando consultas SQL obtener estos datos sería
       sencillo. Es más, si hubieramos creado nuestro reporte usando el
       "Report Wizard" podríamos haber creado el grupo que nos interesa
       desde ahí. Pero como estamos usando un DataSource propio,
       tenemos que agregar el grupo a mano. Afortunadamente es muy
       sencillo agregar grupos desde iReport. Lo único que debemos hacer
       es click derecho sobre el nodo "report name" (la raíz de los
       elementos del proyecto) en el panel "Report Inspector". Con esto
       se abrirá un menú contextual. De este seleccionamos el elemento
       "Add Report Group":


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88          121
iReport – Creación de un informe
      Al hacer esto se abrirá la ventana del "Group Wizard". En esta colocamos el
       nombre del grupo, en este caso será CONSOLAS, y en el campo "Group by the
       following report object:" seleccionamos el field "consola" que creamos
       anteriormente. Con esto conseguiremos que el nuevo grupo que se creará se
       haga con respecto al valor del atributo "consola" de nuestros objeto "Jugador".




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                        122
iReport – Creación de un informe
      Presionamos el botón "Siguiente >" y se nos mostrarán dos radio buttons
       preguntando si quieremos agregar la cabecera (header) y el pie de pagina
       (footer) del grupo. Nosotros deseleccionamos estas opciones (se encuentran
       seleccionadas por default) ya que no nos interesa agregar ninguno de estos
       elementos. Para terminar presionamos el botón "Finalizar" y ya tendremos
       agregado nuestro grupo.

      No es muy obvio el que este grupo existe, de hecho los únicos indicadores que
       tenemos son que se han agregado en la zona de las bandas del "Report
       Inspector" dos nuevas bandas: "CONSOLAS Group Header" y "CONSOLAS Group
       Footer", además se ha agregado una variable llamada "CONSOLAS_COUNT",
       que es la variable que nos interesa y por la que hemos creado el grupo, que
       mantendrá el número de jugadores que tienen cada una de las consolas:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                      123
iReport – Creación de un informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   124
iReport – Creación de un informe
      Ahora agregaremos nuestra gráfica. Para eso arrastraremos desde la Paleta de
       elementos del reporte un "Chart" y lo colocamos en la banda "Summary"
       (ajusten el tamaño de la banda para que la gráfica se vea bien).




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                     125
iReport – Confección de informe
 Al arrastrar la gráfica se abrirá
  una nueva ventana
  preguntándonos qué tipo de
  gráfico queremos mostrar. En
  este caso seleccionaremos el
  gráfico de pie o de pastel (la
  primer o segunda opción):
 Presionamos el botón "OK" y la
  gráfica se agregará a nuestro
  reporte, ajústenla         para
  que abarque toda el área de la
  banda.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   126
iReport – Confección de informe
 Lo último que haremos es configurar la gráfica para que obtenga los datos
  de los campos y variables que nos interesa mostrar. Para esto, hacemos
  click derecho sobre la gráfica, con lo que se abrirá un menú contextual. En
  este menú seleccionamos la opción "Chart Data".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                  127
iReport – Confección de informe
 Con lo que se abrirá una nueva ventana, y en esta ventana seleccionamos
  la pestaña "Details". En esta pestaña configuraremos tres valores:
 Key expression
 Value expression
 Label expression


 La "Key expression" dice cuál será la base que se usará para cada uno de
  las piezas de la gráfica. En nuestro caso queremos que cada trozo muestre
  las consolas. Por lo que colocamos como valor $F{consola}.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                128
iReport – Confección de informe
 La "Value expression" dice cuál será el tamaño de cada una de las piezas
  de la gráfica. Nosotros queremos que cada pieza sea equivalente al
  número de consolas que se han comprado. Por lo que colocamos como
  valor $V{CONSOLAS_COUNT}.

 Label expression es la etiqueta que se mostrará para cada valor. Nosotros
  queremos mostrar el nombre de la consola junto con el número de
  unidades que se han vendido de cada una. Por lo que colocamos como
  valor $F{consola} + " - " + $V{CONSOLAS_COUNT}. Lo cual colocará como
  valor el nombre de la consola, concatenándole el signo " - " y
  concatenándole el número de consolas vendidas (el número de jugadores
  que han comprado cada una de las consolas).



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                129
iReport – Confección de informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   130
iReport – Confección de informe
 Presionamos el botón "Close" y hemos terminado con nuestro reporte.
  Cambiamos a la vista "Preview" para compilar el reporte. No se nos
  mostrará nada del reporte final. De hecho los regresará a la vista del
  "Designer" y mostrará una excepción en la ventana de salida indicando
  algo así: "Key is null in pie dataset". Esto es normal ya que la gráfica no
  puede generarse ya que no existen datos. Lo importante es que se haya
  generado el archivo "reporteGrafica.jasper".




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                  131
iReport – Confección de informe
 Ahora ejecutamos nuestra aplicación, con lo que debe generarse nuestro
  reporte en PDF y debemos ver, al final del reporte, la siguiente gráfica:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                132
iReport – Confección de informe
    Finalmente este es el codigo de la clase Main (omitiendo los imports):
public class Main                                                              JasperReport reporte =
{                                                                             (JasperReport)JRLoader.loadObject("reporteGrafica.jasper");
  public static void main(String[] args) throws Exception                          JasperPrint jasperPrint =
  {                                                                           JasperFillManager.fillReport(reporte, null, new
    List listaJugadores = new ArrayList();                                    JRBeanCollectionDataSource(listaJugadores));

    for (int i = 1; i <= 49; i++)
                                                                                      JRExporter exporter = new JRPdfExporter();
    {
      listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii"));
    }                                                                         exporter.setParameter(JRExporterParameter.JASPER_PRINT,
                                                                              jasperPrint);
    for(int i = 50; i <= 79; i++)
    {                                                                         exporter.setParameter(JRExporterParameter.OUTPUT_FILE,
      listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox"));            new File("reporte grafica.pdf"));
    }
                                                                                      exporter.exportReport();
    for(int i = 80; i <= 100; i++)
                                                                                  }
    {
      listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3"));             }
    }




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                                                                     133
iReport – Creación de un informe
  PARTE 5: Grupos y subgrupos




Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   134
iReport – Confección de informe
 Ahora veremos cómo deben ser usados los grupos para, bueno, agrupar
  un conjunto de datos relacionados y mostrar estos grupos de forma clara
  en el reporte. Usaremos la misma idea del tutorial anterior, en la que se
  mostraron las ventas de las consolas de última generación (Wii, XBox 360,
  y PS3). Solo que en este caso mostraremos por cada consola el nombre de
  los jugadores que las han comprado, separados claramente de los que han
  comprado las otras consolas.
 Para comenzar creamos un nuevo proyecto en NetBeans (File -> New
  Project... -> Java -> Java Application). Damos un nombre y una ubicación a
  nuestro proyecto y presionamos el botón "Finish" para que la clase Main
  aparezca en nuestro editor.




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 135
iReport – Confección de informe
 Recuerden agregar al nodo "Libraries" del panel "Projects" la biblioteca
  "JasperReports" que creamos en la primer parte del tutorial.

 Usaremos la misma clase "Jugador" en en el tutorial anterior para
  mantener los datos que serán mostrados en el reporte.

 El código que colocaremos en la clase Main es el mismo que en el tutorial
  anterior. Solo que en este caso en vez de tener 100 jugadores,
  modificaremos los ciclos for para tener solo 10. Por lo tanto quedan de la
  siguiente forma:




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                 136
iReport – Confección de informe
for (int i = 1; i <= 4; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii"));
}

for(int i = 5; i <= 7; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox"));
}

for(int i = 8; i <= 10; i++)
{
  listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3"));
}

 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   137
iReport – Confección de informe
 Ahora abrimos iReport y creamos un nuevo reporte vacio (Archivo ->
  New... -> Empty Report). En la ventana que se abre le damos un nombre al
  reporte (reporteGrupo.jrxml) y lo guardamos en el directorio raíz del
  proyecto de NetBeans. Presionamos el botón "Finalizar" para que
  aparezca la plantilla vacio de nuestro reporte.

 Colocamos el título del reporte en la banda "Title" usando un texto
  estático. También agregamos los fields correspondientes para los datos de
  los objetos Jugador (id, nombre, y consola). En esta ocasión en la banda
  "Detail" solamente colocamos los fields id y nombre (ya que los grupos
  serán formados en base al field consola). Y no colocamos nada en la banda
  "Column Header":



 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               138
iReport – Confección de informe




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   139
iReport – Confección de informe
 Ahora crearemos el grupo correspondiente a las consolas. Para esto
  hacemos click derecho en el nodo "report name" del panel "Report
  Inspector". Y en el menú contextual que aparece seleccionamos la opción
  "Add Report Group":




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88              140
iReport – Confección de informe
 Con esto se abrirá la ventana "New group wizard". En ella debemos
  introducir el nombre del grupo, que en este caso será "CONSOLAS" y el
  campo sobre el cual se crearán los grupos que, como habiamos dicho, será
  el campo "consola":




 Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88               141
iReport – Confección de informe
     Presionamos el botón "Siguiente >". En la pantalla siguiente dejamos
      seleccionadas las dos opciones ("Add the group header" y "Add the group footer").
      Presionamos en botón "Finalizar" con lo que veremos que en la plantilla de
      nuestro reporte han aparecido dos nuevas bandas, "CONSOLAS Group Header" y
      "CONSOLAS Group Footer", además de una nueva variable, CONSOLAS_COUNT:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                     142
iReport – Confección de informe
     Agregaré un cuadro negro ("Rectangle" de la paleta de elementos del reporte) en
      la banda "CONSOLAS Group Header" para poder distinguirlo en el momento de
      generar el reporte final. Además arrastraré a esta banda el field $F{consola} que
      creamos anteriormente. Al arrastrar este field se nos preguntará qué es lo que
      queremos mostrar: el valor del campo ("The field value") o el resultado de una
      función de agregación ("The result of an aggregation fuction"). Como lo que
      queremos mostrar es el valor del campo dejamos seleccionada la primera opción
      (si queremos mostrar el número de los elementos del grupo podemos volver a
      arrastrar este field a la banda).




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                         143
iReport – Confección de informe
     Si, al igual que yo, agregaron el
      cuadro negro en la banda, será
      neccesario que cambien el
      color de la letra del campo
      (Forecolor) a blanco para
      poder verlo.

     El reporte final debe verse
      más o menos así:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   144
iReport – Confección de informe

     Ahora cambiamos a la pestaña
      "Preview" para que se compile
      nuestro reporte y genere, en el
      mismo directorio en el que
      colocamos nuestro archivo
      "reporteGrupo.jrxml", el archivo
      "reporteGrupo.jasper".

     Ahora regresamos al NetBeans y
      ejecutamos nuestra aplicación. Esto
      generará un archivo PDF en el
      mismo directorio que los archivos
      .jrxml y .jasper. El contenido del
      reporte el siguiente:


    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88   145
iReport – Confección de informe

     Como podemos ver, los tres grupos (uno por cada consola) se muestran de
      forma independiente uno de otro. Además en cada grupo se listan solo los
      jugadores que tienen la consola del grupo.
     El código final de la clase Main es el siguiente:




    Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88                146
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes
5.confección de informes

Más contenido relacionado

Similar a 5.confección de informes (20)

IREPORT
IREPORTIREPORT
IREPORT
 
I report
I reportI report
I report
 
I report
I reportI report
I report
 
Manual reportes jsp
Manual reportes jspManual reportes jsp
Manual reportes jsp
 
Reportes
ReportesReportes
Reportes
 
Practicas pre-profesionales
Practicas pre-profesionalesPracticas pre-profesionales
Practicas pre-profesionales
 
Informe de autocad
Informe de autocadInforme de autocad
Informe de autocad
 
Manual ireport
Manual ireportManual ireport
Manual ireport
 
trabajo de todo el periodo acces
trabajo de todo el periodo accestrabajo de todo el periodo acces
trabajo de todo el periodo acces
 
Bases de datos relacionales trabajo completo
Bases de datos relacionales trabajo completoBases de datos relacionales trabajo completo
Bases de datos relacionales trabajo completo
 
Bases de datos relacionales
Bases de datos relacionales Bases de datos relacionales
Bases de datos relacionales
 
Reportes
ReportesReportes
Reportes
 
Infot
InfotInfot
Infot
 
FORMULARIOS
FORMULARIOSFORMULARIOS
FORMULARIOS
 
EG LBDC
EG LBDCEG LBDC
EG LBDC
 
power
powerpower
power
 
Reportes
ReportesReportes
Reportes
 
EG LBDC
EG LBDC EG LBDC
EG LBDC
 
Reportes
ReportesReportes
Reportes
 
Manual de usuario caseware idea (imd)
Manual de usuario caseware idea (imd)Manual de usuario caseware idea (imd)
Manual de usuario caseware idea (imd)
 

Más de Jose Benítez Andrades

Más de Jose Benítez Andrades (7)

8.realizacion de pruebas
8.realizacion de pruebas8.realizacion de pruebas
8.realizacion de pruebas
 
7.distribucion de aplicaciones
7.distribucion de aplicaciones7.distribucion de aplicaciones
7.distribucion de aplicaciones
 
6.documentacion de aplicaciones
6.documentacion de aplicaciones6.documentacion de aplicaciones
6.documentacion de aplicaciones
 
4.usabilidad
4.usabilidad4.usabilidad
4.usabilidad
 
3.creacion de componentes visuales
3.creacion de componentes visuales3.creacion de componentes visuales
3.creacion de componentes visuales
 
Generación de Interfaces a partir de XML
Generación de Interfaces a partir de XMLGeneración de Interfaces a partir de XML
Generación de Interfaces a partir de XML
 
Confección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWINGConfección de interfaces de usuario con JAVA - SWING
Confección de interfaces de usuario con JAVA - SWING
 

Último

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 

Último (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 

5.confección de informes

  • 1. Desarrollo de interfaces: 5.CONFECCIÓN DE INFORMES Jose Alberto Benítez Andrades jose@indipro.es www.indipro.es @indiproweb @jabenitez88 Jose Alberto Benítez Andrades– jose@indipro.es - @indiproweb 1
  • 2. CONFECCIÓN DE INFORMES – iReport Y JasperReports  JasperReports es el más popular motor de creación de informes en código abierto. Está escrito completamente en Java y es capaz de utilizar los datos procedentes de cualquier tipo de fuente de datos y presentar los documentos con precisión de píxeles, lo cuales se pueden ver, imprimir o exportar en una variedad de formatos de documentos incluyendo HTML, PDF, Excel, OpenOffice y Word. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 2
  • 3. CONFECCIÓN DE INFORMES – iReport Y JasperReports  iReport es un diseñador gratuito y de código abierto para JasperReports. Crea diseños muy sofisticados que contienen gráficos, imágenes, subinformes, tablas de referencias cruzadas y mucho más. Puede acceder a datos a través de JDBC, TableModels, JavaBeans, XML, Hibernate, CSV, y fuentes personalizadas y luego publicar estos informes en formato PDF, RTF, XML, XLS, CSV, HTML, XHTML, texto, DOCX, u OpenOffice. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 3
  • 4. iReport – INSTALACIÓN  http://community.jaspersoft.com /download  Debemos descargar iReportDesigner y JasperReports Library. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 4
  • 5. iReport – Creación de un informe  Suponiendo que tenemos instalado un servidor de MySQL en nuestro ordenador (http://dev.mysql.com/downloads/mysql/)  En primer lugar creamos una pequeña base de datos, la llamamos como queramos y dentro introducimos una tabla con unos registros. CREATE TABLE participantes ( ID bigint(21) NOT NULL, NOMBRE varchar(100) NOT NULL, USERNAME varchar(100) NOT NULL, PASSWORD varchar(100) NOT NULL, COMENTARIOS varchar(100) default NULL, PRIMARY KEY (ID) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 5
  • 6. iReport – Creación de un informe insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (1,'Participante 1','par1user','part1pass','comentarios participante 1'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (2,'Participante 2','par2user','part2pass','comentarios participante 2'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (3,'Participante 3','par3user','part3pass','comentarios participante 3'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (4,'Participante 4','par4user','part4pass','comentarios respecto al participante 4'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (5,'Participante 5','par5user','part5pass','sin comentarios para el participante 5'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (6,'Participante 6','par6user','part6pass',NULL); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (7,'Participante 7','par7user','part7pass','comentatios participante 7'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (8,'Participante 8','par8user','part8pass','comentarios participante 8'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (9,'Participante 9','par9user','part9pass','comentarios participante 9'); insert into participantes(ID,NOMBRE,USERNAME,PASSWORD,COMENTARIOS) values (10,'Participante 10','par10user','part10pass',NULL); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 6
  • 7. iReport – Creación de un informe  Una vez hemos creado nuestra base de datos MySQL, abrimos el iReport. Creamos un datasource clickando en el icono Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 7
  • 8. iReport – Creación de un informe  Se abrirá la ventana de Connections / Datasources y clickamos en New Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 8
  • 9. iReport – Creación de un informe  Seleccionamos Database JDBC Connection Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 9
  • 10. iReport – Creación de un informe  Damos un nombre cualquiera a la conexión.  Seleccionamos el JDBC Driver de MySQL  En JDBC URL indicamos el nombre de nuestra BBDD  Insertamos los datos de nuestro login.  Pulsamos Test para comprobar que todo funciona correctamente. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 10
  • 11. iReport – Creación de un informe  Ahora nos dirigimos al menú superior File > New… y en Report seleccionamos una plantilla (yo he seleccionado Wood) y pulsamos Launch Report Wizard Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 11
  • 12. iReport – Creación de un informe  Posteriormente realizaremos 6 pasos: 1. Selección de la ubicación en la que se guardará nuestro reporte. 2. Selección del datasource e introducción del query para obtener los datos que nos interesan. 3. Selección de los datos que queremos mostrar en el reporte. 4. Creación de grupos para el informe ( en este primer ejemplo no probaremos esto). 5. Selección del layout o acomodo de los datos en el reporte 6. Felicitación por terminar nuestro informe. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 12
  • 13. iReport – Creación de un informe  Los pasos interesantes son el 3 y el 4, así que será en estos en los que nos enfocaremos más.  El paso 1 se realiza de forma automática, así que no tenemos mucho que hacer en él. En el paso 2 (en donde comenzamos) seleccionamos el directorio en el que queremos guardar nuestro reporte y el nombre que tendrá.  Nota: La extensión de documentos de reportes generados por JasperReports es ".jrxml" que significa "jasper reports xml", y es un documento xml que contiene los datos para generar un archivo compilado (".jasper") que es el que usaremos principalmente en nuestras aplicaciones Java (aunque también podriamos optar por compilar nuestro archivo ".jrxml" desde la misma aplicación Java y así generar el archivo ".jasper" correspondiente).  En este momento no importa mucho en donde guardemos el archivo que se generará, ya que posteriormente tendremos que moverlo para que nuestra aplicación java pueda encontrarlo. Por mi parte llamaré al archivo “ReportePruebaCurso" Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 13
  • 14. iReport – Creación de un informe  Hacemos clic en el botón "Next" para continuar con el paso 3. En este paso debemos seleccionar el datasource desde el que los datos del reporte serán tomados. Por default está seleccionado el "Empty datasource". Así que nosotros seleccionamos el datasource "Conexion MySQL Pruebas" (el datasource que creamos anteriormente).  Al hacer el cambio del datasource veremos que aparece un textarea con el título "Query(SQL)" y en la parte inferior debemos tener un mensaje de error que dice "Invalid query". (IMAGEN EN DIAPO SIGUIENTE) Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 14
  • 15. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 15
  • 16. iReport – Creación de un informe  Esto ocurre porque, efectivamente, en el textarea no tenemos una consulta válida (de hecho no tenemos ninguna). Por lo que ahora corregiremos eso. Para esto tenemos 3 opciones: 1. Escribir una consulta nosotros mismos de forma directa. 2. Cargar una consulta que tengamos guardada en algún archivo .sql o .txt. 3. Crear una consulta usando el "diseñador de consultas". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 16
  • 17. iReport – Creación de un informe  Nosotros haremos uso del diseñador de consultas. Hacemos clic en el botón "Design query" con lo que se abrirá una nueva ventana que está dividida en tres secciones. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 17
  • 18. iReport – Creación de un informe  La primer sección es la de la estructura de la consulta. Aquí básicamente podremos cambiar entre las sentencias que estamos editando (SELECT, WHERE, ORDER BY, etc.). La segunda sección es la de los elementos de nuestra base de datos (tablas, vistas, y temporales locales). Aquí podremos seleccionar los elementos de los que queremos obtener datos para la consulta. Finalmente la tercer sección nos muestra los elementos que hemos seleccionado de la segunda sección para que podamos seleccionar los datos a obtener.  La consulta que haremos será para obtener todos los datos de la tabla "participantes", con excepción del "ID". Para esto hacemos doble clic sobre el nombre de la tabla "participantes" en la segunda sección de la ventana que tenemos abierta. Con esto aparecerá en la tercer sección otra ventana con el título "participantes" y un conjunto de checkboxes, cada uno con un campo de nuestra tabla. Para generar la consulta que nos interesa solamente seleccionamos todos los checkboxes (con excepción del "ID") y veremos que la consulta se genera en la primer sección. Ya solo damos clic en el botón "OK". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 18
  • 19. iReport – Creación de un informe  Con esto ya tendremos nuestra consulta en el textarea correspondiente y podemos continuar con el paso 4, para lo que hacemos clic en el botón "Next".  En este paso solo tenemos que seleccionar cuáles campos del query generado en el paso anterior queremos que se muestren en el reporte. Como nosotros queremos que se muestren todos pasamos todos los campos del lado izquierdo al lado derecho y hacemos clic en el botón "Next". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 19
  • 20. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 20
  • 21. iReport – Creación de un informe  Ahora en el paso 5 debemos seleccionar cómo queremos que los datos sean agrupados. Esto lo explicaré en algún otro post, pero por el momento dejemos todo en blanco y demos clic en el botón "Next".  El último paso es el solamente una felicitación por haber creado un nuevo informe.  Ahora hacemos clic en el botón "Finish" y ya podremos ver la plantilla de nuestro informe. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 21
  • 22. iReport – Creación de un informe  Si queremos ver como se verá el reporte final, en este caso, podemos ver un preview con los datos reales si cambiamos a la vista de "preview" en la ventana del editor. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 22
  • 23. iReport – Creación de un informe  Al hacer clic en la pestaña de "preview", nuestro reporte se compilará y se mostrará. En este caso el reporte puede ser pre-visualizado porque las siguientes condiciones se cumplen:  Tenemos una base de datos poblada (esto es muy importante, ya que si no tiene datos obtendremos un mensaje de error).  Tenemos un datasource configurado para esta base de datos.  Nuestro reporte hace una consulta directa a esta base de datos a través del datasource anterior.  El reporte está preparado para mostrar los datos recuperados anteriormente.  Algo importante que ocurre al hacer este preview es que el reporte se compila generando el archivo “ReportePruebaCurso.jasper" el cual es el archivo que usaremos desde la aplicación Java que crearemos en un momento. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 23
  • 24. iReport – Creación de un informe  Si queremos compilar nuestro reporte de forma manual podemos hacer clic en el botón "Compile Report" de la vista de diseño: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 24
  • 25. iReport – Creación de un informe  Haremos algunas modificaciones para que este reporte se vea un poco mejor: primero cambiaremos el título que dice "Wood Title" por "Reporte de Participantes", cambiamos el color de texto a negro, y eliminamos el fondo y el subtitulo que tiene.  Además cambiamos el título de cada una de las columnas por algo más claro. Por ejemplo, podemos cambiar el título de la columna "participantes_USERNAME" a "Usuario", "participantes_NOMBRE" a "Nombre", etc. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 25
  • 26. iReport – Creación de un informe  Ahora que tenemos un reporte que nos agrada (o al menos que no se ve tan mal) veremos cómo generar este reporte desde una aplicación Java.  Lo primero que haremos es crear un nuevo proyecto en NetBeans. Para esto vamos al menú "File -> new Project...". En la ventana de nuevos proyectos seleccionamos la categoría "Java" y de tipo de proyecto seleccionamos "Java Application" y hacemos clic en el botón "Next". En la siguiente ventana introducimos el nombre de nuestro proyecto y dejamos seleccionada la opción "Create Main Class" y "Set as Main Project".  Hacemos clic en el botón "Finish" para que nuestro proyecto se genere. Lo que haremos a continuación es crear una biblioteca que contenga los archivos jars básicos necesarios de JasperReports. De esta forma no tendremos que agregar cada uno de los jars cada vez que necesitemos usar JasperReports en un proyecto. Además si actualizamos la versión del API que usamos, solo debemos actualizar esta bibliotec Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 26
  • 27. iReport – Creación de un informe  Clickamos en Tools -> libraries Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 27
  • 28. iReport – Creación de un informe  Con esto se abrirá la ventana del "Library Manager". En esta ventana hacemos clic en el botón "New Library":  En la ventana que se abre escribimos el nombre de la nueva biblioteca (en mi caso será "JasperReports") y en el tipo de la biblioteca seleccionamos la opción "Class Libraries". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 28
  • 29. iReport – Creación de un informe  Al hacer clic en el botón "OK" regresaremos al "Library Manager" y tendremos nuestra nueva biblioteca creada. Pero aún nos hace falta agregar los archivos jars que conformarán esta biblioteca. Nos aseguramos que la pestaña "Classpath" esté seleccionada y hacemos clic en el botón "Add Jar/Folder" situado a la derecha. Se abrirá un cuadro de dialogo para que seleccionemos los jars que queremos agregar. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 29
  • 30. iReport – Creación de un informe  Navegamos hasta el directorio en el que tenemos los jars de JasperReports que bajamos anteriormente. Para que los ejemplos que haremos más adelante (en los siguientes posts) funcionen, debemos agregar a la biblioteca los siguientes jars:  jasperreports-3.7.6.jar  jasperreports-3.7.6-javaflow.jar  jasperreports-fonts-3.7.6.jar  commons-beanutils-1.8.0.jar  commons-collections-2.1.1.jar  commons-digester-1.7.jar  commons-logging-1.0.4.jar  commons-javaflow-20060411.jar  groovy-all-1.7.5.jar  iText-2.1.7.jar  png-encoder-1.5.jar  poi-3.6.jar  Algunos de estos jars se encuentran en el directorio "dist" y otros en el directorio "lib" del archivo .zip de JasperRepots que bajamos anteriormente.  Hacemos clic en el botón "Add Jar/Folder" y con esto tendremos lista nuestra biblioteca "JasperReports" para agregarla a nuestro proyecto. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 30
  • 31. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 31
  • 32. iReport – Creación de un informe  Hacemos clic en el botón "OK" para regresar al ambiente de trabajo.  Ahora hacemos clic derecho en el nodo "Libraries" de la ventana "Projects". Con esto se abrirá un menú contextual con 4 opciones, seleccionamos la opción "Add Library..." Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 32
  • 33. iReport – Creación de un informe  En la ventana que se abre seleccionamos la biblioteca que creamos anteriormente ("JasperReports") y hacemos clic en el botón "Add Library". Al hacer esto veremos se agregar al nodo "Libraries" de nuestro proyecto todos los jars que tiene nuestra biblioteca. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 33
  • 34. iReport – Creación de un informe  Ahora debemos recoger el fichero ReportePruebas.jasper que se generó hace unas diapositivas y lo colocamos en el directorio raíz del proyecto de NetBeans que acabamos de crear (la raíz del proyecto es el directorio en el que se encuentran los subdirectorios "nbproject", "src", entre otros). Copiamos también la imagen wood.jpg si la hemos mantenido en nuestro informe. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 34
  • 35. iReport – Creación de un informe  Lo primero que debemos hacer es agregar el conector de mysql al proyecto JAVA. Para ello debemos descargar el conector de mysql JDBC (http://www.mysql.com/downloads/connector/j/ ). Una vez descargada la agregaremos a la biblioteca de nuestro proyecto. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 35
  • 36. iReport – Creación de un informe  Lo siguiente que debemos hacer ahora es crear una conexión a la base de datos que creamos anteriormente. public static void main(String[] args) throws Exception { // TODO code application logic here Class.forName("com.mysql.jdbc.Driver"); Connection conexion = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/pruebascurso", "root", "cursomysql"); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 36
  • 37. iReport – Creación de un informe  Lo siguiente que debemos hacer es cargar el archivo ".jasper" generado anteriormente y colocarlo en un objeto "net.sf.jasperreports.engine.JasperReport". Para esto hacemos uso de la clase de utilidad "net.sf.jasperreports.engine.util.JRLoader": JasperReport reporte = (JasperReport) JRLoader.loadObject("RepotePruebaCurso.jasper");  Ahora el objeto "reporte" contiene la definición del reporte, pero aún hace falta que llenemos este reporte con los datos que obtendrá de la base de datos. Para esto usamos la clase "net.sf.jasperreports.engine.JasperFillManager". Esta clase tiene un método estático, "fillReport", que nos permite llenar el reporte con datos obtenidos de distintas fuentes de datos (una de estas fuentes es la sentencia SQL que escribimos al generar el reporte con el wizard en iReports y la conexión que usaremos en un momento, veremos qué otras fuentes de datos existen y cómo usarlos en los siguientes posts). En este caso la fuente de datos es la conexión directa a la base de datos que creamos anteriormente (el objeto conexion): JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, conexion); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 37
  • 38. iReport – Creación de un informe  Pasamos "null" como segundo parámetro porque no estamos pasando ningún parámetro al reporte (esto también lo veremos después).  El objeto "JasperPrint" que obtenemos como resultado de la invocación del método "fillReport" es la representación de nuestro reporte (ahora con datos) que podemos mandar a imprimir, mostrar en pantalla (si estamos usando una aplicación swing o awt), o, como en este caso, guardarlo en un archivo.  Si están haciendo una aplicación swing y quieren mostrar este reporte directamente en un componente pueden pasar el objeto "JasperPrint" que acabamos de crear como parámetro a un nuevo objeto "net.sf.jasperreports.view.JasperViewer", el cual es un componente swing, y agregar este último a un panel. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 38
  • 39. iReport – Creación de un informe  Para guardar este reporte a un archivo debemos usar un "net.sf.jasperreports.engine.JRExporter". "net.sf.jasperreports.engine.JRExporter" es una interface, y las clases que la implementan nos permiten generar el reporte en distintos formatos de una forma sencilla. Veremos cómo generar los reportes en los siguientes formatos:  PDF  HTML  CSV  RTF  TXT  XLS  XML  XLSX  DOCX  PPTX Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 39
  • 40. iReport – Creación de un informe  Primero declaramos una referencia a un objeto de tipo "JRExporter" de la siguiente forma: JRExporter exporter =  Será esta referencia la que usaremos de ahora en adelante. Para que nuestro reporte sea guardado en formato PDF creamos un objeto de tipo "net.sf.jasperreports.engine.export.JRPdfExporter" y lo asignamos a nuestra referencia exporter: JRExporter exporter = new JRPdfExporter();  Ahora, las siguientes líneas son comunes no importando el formato en el que vaya a quedar nuestro reporte: exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE,new java.io.File("reportePDF.pdf")); exporter.exportReport(); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 40
  • 41. iReport – Creación de un informe  La primer línea asigna a nuestro objeto "exporter" el "jasperPrint" (el reporte con datos) que creamos anteriormente. La segunda línea le dice al "exporter" cuál será el nombre del archivo generado (en este caso "reportePDF.pdf"). Recuerden cambiar el nombre y la extensión del archivo cada vez que cambiemos de formato.  La última línea es la que realiza el proceso de exportación.  Si ahora ejecutamos nuestra aplicación veremos que en el directorio raíz del proyecto se ha creado un archivo llamado "reportePDF.pdf": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 41
  • 42. iReport – Creación de un informe  Ahora, para que nuestro reporte sea exportado a formato HTML cambiamos la línea: JRExporter exporter = new JRPdfExporter(); Por JRExporter exporter = new JRHtmlExporter(); • y el nombre del archivo de "reportePDF.pdf" a "reporteHTML.html". Al ejecutar nuevamente nuestra aplicación tendremos veremos que se genera el archivo "reporteHTML.html" en el directorio raíz de la aplicación: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 42
  • 43. iReport – Creación de un informe  Como pudimos ver, con un par de modificaciones pudimos hacer que nuestro reporte se generara en un formato completamente distinto. Con el resto de los formatos es igual de simple. Usamos las siguientes clases para generar los reportes en los siguientes formatos:  PDF: net.sf.jasperreports.engine.exportJRPdfExporter  HTML: net.sf.jasperreports.engine.exportJRHtmlExporter  CSV: net.sf.jasperreports.engine.exportJRCsvExporter  RTF: net.sf.jasperreports.engine.exportJRRtfExporter  XLS: net.sf.jasperreports.engine.exportJRXlsExporter  XML: net.sf.jasperreports.engine.exportJRXmlExporter  TXT: net.sf.jasperreports.engine.exportJRTextExporter  XLSX: net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter  DOCX: net.sf.jasperreports.engine.export.ooxml.JRDocxExporter  PPTX: net.sf.jasperreports.engine.export.ooxml.JRPptxExporter Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 43
  • 44. iReport – Creación de un informe  Para generar archivos .txt tendrán que agregar, además, estas dos líneas:  exporter.setParameter(JRTextExporterParameter.CHARACTER_WIDTH, 12);//text exporter  exporter.setParameter(JRTextExporterParameter.CHARACTER_HEIGHT, 12);//text exporter Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 44
  • 45. iReport – Creación de un informe PARTE 2: Uso de DataSources Personalizados Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 45
  • 46. iReport – Creación de un informe  Ahora veremos cómo generar nuestros reportes sin hacer uso de una conexión. Esto puede ser muy útil en los casos en los que ya tengamos los datos en memoria y no necesitemos realizar una conexión a la base de datos; o en el caso en que, por alguna razón ajena a nosotros, no podamos obtener la conexión.  Para poder hacer esto se nos proporciona una interface: "net.sf.jasperreports.engine.JRDataSource". Esta interface tiene solo dos métodos: getFieldValue(JRField jrField) next() Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 46
  • 47. iReport – Creación de un informe  Creamos un nuevo proyecto en NetBeans (menú "File -> New Project..."). En la ventana de nuevos proyectos seleccionamos la categoría "Java" y como tipo de proyecto seleccionamos "Java Application" y hacemos clic en el botón "Next". En la siguiente ventana introducimos el nombre de nuestro proyecto y dejamos seleccionada las opciones "Create Main Class" y "Set as Main Project".  Para que podamos pasar datos a nuestro reporte es necesario que utilicemos un datasource. En el ejemplo anterior veíamos que el datasource que usábamos era la base de datos y la conexión a la misma. En esta ocasión el datasource será una de nuestras clases. Esta clase deberá implementar la interface "JRDataSource" y contendrá la lógica para pasar los datos correspondientes a nuestro reporte.  Creamos una nueva clase haciendo clic derecho sobre el nodo "Source Packages" de la ventana "Projects", o sobre el paquete que ya tenemos creado, y en el menú contextual que se abre seleccionamos la opción "New -> Java Class...". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 47
  • 48. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 48
  • 49. iReport – Creación de un informe  En la ventana que se abre escribimos como en nombre de la nueva clase "Participante" y presionamos el botón "Finish". Con esto veremos en la ventana de nuestro editor la nueva clase "Participante".  Esta clase "Partcipante" representará los datos que se mostrarán en el reporte, tal como en el ejemplo anterior cada uno de los registros de la tabla "participantes" representaba una fila en el reporte final, cada objeto participante que creemos representará una fila en el nuevo reporte.  Agreguemos los siguientes atributos a nuestra clase: private int id; private String nombre; private String username; private String password; private String comentarios; Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 49
  • 50. iReport – Creación de un informe  Además agregamos sus getters y sus setters y dos constructores, uno sin argumentos y uno que reciba como argumentos todas las propiedades declaradas anteriormente. public class Participante { private int id; private String nombre; private String username; private String password; private String comentarios; public Participante() { } public Participante(int id, String nombre, String username, String password, String comentarios) { this.id = id; this.nombre = nombre; this.username = username; this.password = password; this.comentarios = comentarios; } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 50
  • 51. iReport – Creación de un informe public String getComentarios() { return comentarios; } public void setComentarios(String comentarios) { this.comentarios = comentarios; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNombre() { return nombre; } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 51
  • 52. iReport – Creación de un informe public void setNombre(String nombre) { this.nombre = nombre; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 52
  • 53. iReport – Creación de un informe • Ahora, antes de seguir con nuestro código Java, pasaremos a crear la plantilla de nuestro reporte con iReport, por lo que abrimos esta herramienta. • En esta ocasión no haremos uso de un wizard para crear el reporte, sino que lo haremos desde cero. • Para crear el nuevo reporte vamos el menú "File -> New...". En la ventana que se abre seleccionamos uno de los formatos "Blank" y presionamos el botón "Open this Template": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 53
  • 54. iReport – Creación de un informe • Después introducimos el nombre del reporte, yo lo llamaré "reporte2.jrxml", y la ubicación en la que se guardará. Recomiendo que en esta ocasión guardemos el reporte en el directorio raíz del proyecto de NetBeans que acabamos de crear. Hacemos clic en el botón "Next" y se nos mostrará un mensaje de felicitación por haber creado un nuevo reporte. Cuando presionen el botón "Finish" verán una hoja dividida en 7 u 8 diferentes porciones horizontales llamadas bandas. • Cuando generamos nuestro reporte final con datos, cada una de estas bandas se comporta de una forma distinta. Algunas aparecen solo al principio o al final del reporte, otras aparecen con cada nueva fila que se le agrega, otras solo al final de los datos, etc. • La plantilla de reportes está dividida en 10 bandas predefinidas. Una banda siempre tiene el mismo ancho que la página. Sin embargo el alto de algunas de las bandas puede variar durante la fase de llenado de datos, aún si establecimos un alto en el momento del diseño. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 54
  • 55. iReport – Creación de un informe • Las bandas existentes son:  Background  Title  Page Header  Column Header  Detail 1  Column Footer  Page Footer  Last Page Footer  Summary  No Data Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 55
  • 56. iReport – Creación de un informe  Lo primero que haremos es agregar texto a nuestro reporte. En iReport existen dos tipos de texto: texto estático y texto dinámico (también llamado expresiones). El texto estático es aquel que no cambia, mientras que las expresiones son como etiquetas que le indican a JasperReports que debe reemplazarlas por algún valor al momento de generar el reporte final.  Existen 3 tipos de expresiones:  Campos (fields) representados con "$F{nombre_campo}".  Variables representadas por "$V{nombre_variable}".  Parámetros representados por "$P{nombre_parámetro}". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 56
  • 57. iReport – Creación de un informe  Cada uno de estos tipos de expresiones tiene un uso particular:  Los campos ("$F{}") le dicen al reporte dónde colocará los valores obtenidos a través del datasource. Por ejemplo, nuestro objeto "Partcipante" tiene un atributo llamado "username". Usando una expresión de campo indicamos en cuál parte o sección del reporte debe aparecer el valor de ese atributo usando "$F{username}". Esto quedará más claro un poco más adelante.  Los parámetros ("$P{}") son valores que usualmente se pasan al reporte directamente desde el programa que crea el JasperPrint del reporte (en nuestra aplicación Java). Aunque también existen algunos parámetros internos que podemos leer pero no modificar. Para hacer uso de estos parámetros simplemente indicamos el nombre del parámetro en el lugar que queremos colocarlo. Pueden encontrar los nombres y significados de los parámetros internos en la documentación de JasperReports. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 57
  • 58. iReport – Creación de un informe  Las variables ("$V{}") son objetos usados para almacenar valores como los resultados de cálculos. Al igual que con los parámetros, JasperReports tiene algunas variables internas que podemos leer. Pueden encontrar los nombres y significados de las variables la documentación de JasperReports.  Cada uno de estos elementos tiene un nombre, un tipo (que debe corresponder con un tipo de objeto Java como String o Integer), y una descripción opcional. Además deben ser registrados para poder ser usados en tiempo de diseño y que puedan ser entendidos al momento de compilar el reporte, y por lo tanto para que nuestro reporte funcione correctamente en tiempo de ejecución. Esto lo veremos un poco más adelante.  Regresemos a donde nos quedamos. Queremos agregar un texto estático a nuestro reporte a modo de título. Para esto debemos agregar un elemento llamado "Static Text". Los elementos que podemos agregar a nuestros reportes están en una ventana llamada "Palette", que se encuentra en la parte derecha de iReport, bajo la categoría "Report Elements". Si no pueden ver la ventana "Palette" presionen las teclas "Ctrl + Shift + 8": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 58
  • 59. iReport – Creación de un informe  De esta ventana arrastramos el elemento "Static Text" a la banda "Title". "Title" es una banda que solo aparece en la parte superior de la primer página. Por lo que nos sirve para colocar el título del reporte y/o el nombre y logo de nuestra empresa.  Una vez que hayamos colocado el texto estático en la banda correspondiente y mientras aún esté seleccionado, modificamos sus propiedades usando la ventana de propiedades del elemento y la barra de formato de texto. También podemos abrir otra ventana que nos ayude a alinear y controlar el alto y el ancho de los elementos yendo al menú "Window -> Formatting Tools". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 59
  • 60. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 60
  • 61. iReport – Creación de un informe  Ahora agregamos los encabezados de las columnas en las que se mostrarán los datos que pasaremos al reporte. Agregamos estos nombres en la banda "Column Header", la cual se repetirá en cada página antes de mostrar los datos de las columnas.  Agregaremos las columnas "Nombre", "Usuario", "Contraseña", y "Comentarios". Por lo que nuevamente arrastramos un elemento "Static Text" para cada una de las columnas. También podemos ajustar el alto de esta banda para que se ajuste al de nuestro texto, ya sea moviéndola directamente en el diseñador, o desde la ventana de propiedades: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 61
  • 62. iReport – Creación de un informe  Nuestro reporte ya casi está terminado, ahora solo nos queda agregar los campos en los que se mostrarán los datos que pasaremos al reporte en un momento. Para que estos campos puedan ser reemplazados por el valor real es necesario que usemos las expresiones (texto dinámico) de las que hablé anteriormente. Para esto definiremos un "field" para cada uno de los campos que queramos mostrar (en este caso serán los mismos campos para los que definimos las cabeceras de las columnas).  Los fields deben definirse antes de poder ser usados. Esta definición incluye el nombre del field y su tipo. Los fields (así como el resto de las expresiones) se definen en la ventana "Report Inspector" a la izquierda del diseñador del reporte. Ahí existe un nodo llamado "Fields" que es donde se encuentran los fields que hemos definido y que por lo tanto podemos usar.  Hacemos clic derecho en el nodo "Fields" de la ventana "Report Inspector". Con esto se abre un menú contextual. Seleccionamos la opción "Add Field" (la única habilitada). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 62
  • 63. iReport – Creación de un informe  Con esto se agregará un field llamado "field1" que por default es de tipo "java.lang.String". Cambiamos el nombre de este campo por "nombre" usando la ventana de propiedades. Esto es importante porque donde pongamos este campo será en donde se muestre el valor del campo nombre de nuestros objetos Participantes. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 63
  • 64. iReport – Creación de un informe  Hacemos lo mismo para el resto de los campos ("username", "password", "comentarios", "id"). Hay que tener cuidado cuando agreguemos el field "id". Si recuerdan, en la definición de la clase "Participante" la propiedad "id" está definida como "int". Sin embargo, a JasperReports solo podemos pasarle objetos para ser usados como valores, por lo que será necesario cambiar el tipo de la clase ("Field Class en la ventana de propiedades) a "java.lang.Integer" (aunque en realidad no mostraremos el "id" en este ejemplo). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 64
  • 65. iReport – Creación de un informe  Ahora debemos indicar en qué parte de nuestro reporte queremos que se muestren los valores correspondientes a los atributos de los objetos "Participante" que le pasemos. Para eso simplemente arrastramos los fields correspondientes al lugar en el que queremos que se muestren (arrastramos el field "nombre" a donde queremos que se muestre el atributo "nombre", el campo "username" en donde queremos que se muestre el atributo "username", etc.) desde el "Report Inspector". Al arrastrar los fields, iReport agregará automáticamente un encabezado para este field, solo borren el encabezado agregado Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 65
  • 66. iReport – Creación de un informe  Estos fields los colocaremos en la banda "Detail 1" la cual se repite cada vez que recibe un nuevo objeto y coloca sus valores en la misma fila (quedará más claro cuando ejecutemos el ejemplo). Al final, el reporte debe quedar de la siguiente forma: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 66
  • 67. iReport – Creación de un informe  Por el momento esto es todo lo que necesitamos hacer en iReport para mostrar este reporte básico. Hacemos clic en el botón "Compile Report" para compilar el reporte y generar su archivo ".jasper" respectivo.  Podemos ver una vista previa del reporte haciendo clic en la pestaña "Preview". Asegúrense de seleccionar el "Empty datasource" antes de ver el preview, de lo contrario les aparecerá un error indicado que el documento no tiene páginas. Al final deben ver algo como esto: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 67
  • 68. iReport – Creación de un informe  Los "nulls" aparecen porque no se recuperó ningún valor que coincidiera con el nombre de ese field usando nuestro datasource (que en este caso está vacío, lo cual solucionaremos a continuación).  Regresamos al NetBeans y ahora crearemos una clase que implemente la interface "JRDataSource" de la que hablé antes. Esta clase será la que usaremos como datasource para nuestro reporte, y la que regresará los valores correspondientes a cada uno de los fields que creamos antes.  Primero agregamos a nuestro proyecto la libreria "JasperReports" que creamos en las primeras diapos de este ppt. En esta ocasión no necesitaremos agregar el jar con el Driver de la base de datos, ya que no usaremos ninguna.  Creamos una nueva clase llamada "ParticipantesDatasource" y hacemos que esta nueva clase implemente la interface "JRDataSource". Podemos hacer que NetBeans implemente de forma automática los métodos de esta interface (proporcionando una implementación vacía) presionando las teclas "Alt + Insert" y seleccionando la opción "Implement Method" en el menú contextual que se abre. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 68
  • 69. iReport – Creación de un informe  Con esto se abrirá una ventana llamada "Generate Implement Methods" en la cual seleccionamos la interface "JRDataSource" para que se seleccionen de forma automática todos sus métodos y hacemos clic en el botón "Generate". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 69
  • 70. iReport – Creación de un informe  Ahora agregaremos a nuestra clase un atributo de tipo "java.util.List" llamado "listaParticipantes" que mantendrá justamente eso: la lista de los participantes de los cuales mostraremos los datos en el reporte. Inicializamos esta lista a un objeto de tipo "java.util.ArrayList", de esta forma: private List<Participante> listaParticipantes = new ArrayList<Participante>(); • También agregamos un contador llamado "indiceParticipanteActual" de tipo "int", que usaremos enseguida, y lo inicializamos a "-1"; un poco más adelante explicaré por qué este valor: private int indiceParticipanteActual = -1; Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 70
  • 71. iReport – Creación de un informe  Ahora implementaremos el método getFieldValue. Este método recibe un argumento de tipo JRField. Este parámetro nos indicará por cuál de los "fields" nos está preguntando el reporte.  En la implementación de este método regresaremos los valores correspondientes a cada uno de los atributos de nuestros objetos "Participante" conforme se vayan pidiendo. Por lo que el método queda así: public Object getFieldValue(JRField jrField) throws JRException { Object valor = null; if("nombre".equals(jrField.getName())) { valor = listaParticipantes.get(indiceParticipanteActual).getNombre(); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 71
  • 72. iReport – Creación de un informe else if("username".equals(jrField.getName())) { valor = listaParticipantes.get(indiceParticipanteActual).getUsername(); } else if("password".equals(jrField.getName())) { valor = listaParticipantes.get(indiceParticipanteActual).getPassword(); } else if("comentarios".equals(jrField.getName())) { valor = listaParticipantes.get(indiceParticipanteActual).getComentarios(); } return valor; } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 72
  • 73. iReport – Creación de un informe  Donde básicamente ocurre lo que dije anteriormente: cada vez que el reporte pregunta por el valor de un atributo del objeto "Participante" actual (al que hace referencia el contador "indiceParticipanteActual") se regresa el valor correspondiente. Esta petición se hace en base al nombre del field que creamos desde iReport.  Ahora tal vez se estén preguntando ¿en qué momento se incrementa el contador?, o ¿cómo sabe JasperReport cuántos participantes existen? Pues bien, ambas cosas ocurren gracias a la implementación del método "next()". public boolean next() throws JRException { return ++indiceParticipanteActual < listaParticipantes.size(); } public void addParticipante(Participante participante) { this.listaParticipantes.add(participante); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 73
  • 74. iReport – Creación de un informe  JasperReport pregunta a este método para saber si existe otro "Participante" en la lista. Este método es el primero que se llama al generar el reporte. Por lo que el contador debe comenzar en "-1", así cuando este método se llama la primera vez el contador queda en "0", y cuando se invoca al método "getFieldValue" se regresa el objeto Participante del índice adecuado.  Esto es todo lo que necesitamos para que nuestro datasource funcione para generar reportes. Agregaré un método de utilidad a esta clase, llamado "addParticipante", que me permita agregar un nuevo participante a la lista (aunque si lo prefieren pueden agregar el setter de "listaParticipantes") Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 74
  • 75. iReport – Creación de un informe  Para finalizar agregaremos en nuestra clase "Main" un ciclo dentro del cual crearemos 10 objetos "Participante", los cuales iremos agregando uno a uno a un objeto de tipo "ParticipantesDatasource": ParticipantesDatasource datasource = new ParticipantesDatasource(); for (int i = 1; i <= 10; i++) { Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i); datasource.addParticipante(p); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 75
  • 76. iReport – Creación de un informe  El resto del código para generar el reporte es similar al de la primera parte de esta presentación , solo que en esta ocasión en lugar de pasar un objeto de tipo "Connection" al método "fillReport" del "JasperFillManager" pasamos nuestro objeto "ParticipantesDatasource" de esta forma: JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, datasource); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 76
  • 77. iReport – Creación de un informe  En el progarma principal tendremos el siguiente código public static void main(String[] args) throws Exception { ParticipantesDatasource datasource = new ParticipantesDatasource(); for (int i = 1; i <= 10; i++) { Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i); datasource.addParticipante(p); } File reporteFichero = new File("reporte2.jasper"); JasperReport reporte = (JasperReport) JRLoader.loadObject(reporteFichero); JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, datasource); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte2PDF.pdf")); exporter.exportReport(); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 77
  • 78. iReport – Creación de un informe  Al ejecutar este código debemos terminar con un archivo llamado "reporte2PDF.pdf" en el directorio raíz de nuestro proyecto y que tiene el siguiente contenido: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 78
  • 79. iReport – Creación de un informe  Podemos ver que los datos importantes (los datos de los "Participantes") aparecen en la banda "Details 1" (donde colocamos los fields) y que esta banda se repite por cada uno de los participantes de la lista.  Bien, con esto vemos que podemos crear nuestros propios datasources y pasar datos para generar reportes sin la necesidad de una conexión a base de datos. Es bastante sencillo, solamente debemos proporcionar una clase que implemente la interface "JRDataSource" y que regrese los valores correspondientes a los fields del reporte.  Aunque esto ya es bastante fácil y útil, existe una forma aún más simple para crear un datasource, sin la necesitad de implementar la interface "JRDataSource". Esto es gracias a un conjunto de clases que JasperReports ya nos proporciona y realizan básicamente la misma función que la clase "ParticipantesDatasource" que acabamos de crear. Estas clases son:  JRBeanCollectionDataSource  JRJpaDataSource  JRBeanArrayDataSource Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 79
  • 80. iReport – Creación de un informe  Las cuales ya implementan la interface "JRDataSource". Cada una funciona con distintos tipos de datos, pero en que nos interesa en este momento es "JRBeanCollectionDataSource" que puede convertir una "java.util.Collection" en un DataSource de forma automática. Modificaremos nuestro método "main" para hacer uso de esta clase.  Ahora, en vez de llenar nuestro "ParticipantesDatasource" en el ciclo simplemente llenaremos un "java.util.List": List listaPariticipantes = new ArrayList(); for (int i = 1; i <= 10; i++) { Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i); listaPariticipantes.add(p); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 80
  • 81. iReport – Creación de un informe  Y en lugar de pasar un objeto de tipo "Connection" al método "fillReport" del "JasperFillManager" pasamos un nuevo objeto "JRBeanCollectionDataSource" construido con la lista "listaPariticipantes": JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(listaPariticipantes)); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 81
  • 82. iReport – Creación de un informe  Al final nuestra clase "Main" queda así: public static void main(String[] args) throws Exception { List listaPariticipantes = new ArrayList(); for (int i = 1; i <= 10; i++) { Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i); listaPariticipantes.add(p); } JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte2.jasper"); JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(listaPariticipantes)); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte2PDF_2.pdf")); exporter.exportReport(); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 82
  • 83. iReport – Creación de un informe PARTE 3: Parámetros y Variables Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 83
  • 84. iReport – Creación de un informe  En la parte anterior vimos como hacer uso de los Fields para indicar la posición dentro de nuestro reporte en la que deben quedar los valores que obtenemos de nuestra aplicación Java.  Ahora hablaré de los otros dos tipos de expresiones que proporciona JasperReports: Parameters y Variables. Y la forma en la que podemos usarlos para hacer más dinámicos nuestros reportes.  Para ello seguiremos usando el ejemplo de la segunda parte. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 84
  • 85. iReport – Creación de un informe  Abrimos iReport y el reporte de la parte anterior ("reporte2.jrxml"). En este momento nuestro reporte debe verse como en la siguiente imagen: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 85
  • 86. iReport – Creación de un informe  En donde solo tenemos textos estáticos y "fields" para mostrar un reporte básico de los datos de ciertos participantes. Si lo recuerdan, la salida del reporte al generarlo desde nuestra aplicación Java, era la siguiente: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 86
  • 87. iReport – Creación de un informe  Ahora pasaremos a agregar "Parameters" a este reporte. Como dije en el tutorial anterior: los parámetros son valores que usualmente se pasan al reporte desde el programa que crea el "JasperPrint" del reporte (nuestra aplicación Java) haciendo uso de un "java.util.Map".  En este caso pasaremos dos parámetros: el título del reporte, y el nombre del autor del mismo.  Al igual que con los Fields, para poder hacer uso de un parámetro primero hay que declararlo en el "Report Inspector" (situado en el panel izquierdo del iReport), por lo que nos dirigimos a esta ventana y hacemos clic derecho sobre el nodo "Parameters". Al hacer esto se abrirá un menú contextual. Seleccionamos la opción "Add Parameter" (la única habilitada). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 87
  • 88. iReport – Creación de un informe • Con esto se agregará un nuevo parámetro llamado "parameter1" de tipo "java.lang.String". Cambiamos en nombre del parámetro en la ventana de propiedades a "titulo" (recuerden que este nombre es el que deberemos usar desde nuestra aplicación Java para establecer el valor del parámetro). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 88
  • 89. iReport – Creación de un informe  Agregamos otro parámetro llamado "autor" de la misma forma que agregamos el de "titulo".  Ahora eliminamos el elemento que teníamos como título del reporte (el que contiene el texto estático "Reporte de Participantes") y lo reemplazamos por el parámetro "titulo" arrastrándolo desde la ventana del "Report Inspector" a la banda "Title". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 89
  • 90. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 90
  • 91. iReport – Creación de un informe  Ajustamos este elemento para que tenga el mismo formato que el título que teníamos anteriormente.  Ahora agregamos el segundo parámetro ("autor") en la banda "Page Header", la cual se repite en la parte superior de cada una de las páginas (en la primer página aparece después del título), arrastrándolo a esta banda. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 91
  • 92. iReport – Creación de un informe  Si dejamos esta expresión tal y como está ("$P{autor}") solo se mostrará en nombre del autor en la parte superior de cada una de las páginas (por ejemplo si el autor del reporte es "Juan", solo veremos la palabra "Juan" en la parte superior de los reportes). Esto podría no ser claro para quienes revisen este reporte, por lo que queremos indicar de forma explícita que a lo que se refiere el valor de este parámetro es el nombre del autor. Para hacer esto nos dirigimos a la ventana de propiedades de este parámetro (para lo cual debemos tenerlo seleccionado) y buscamos la categoría "Text field properties". Ahí se encuentra una propiedad llamada "Text Field Expression" cuyo valor es "$P{autor}". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 92
  • 93. iReport – Creación de un informe  Lo que haremos es editar esta expresión para anteponer la palabra "Autor: ". Para hacer esto presionamos el botón "...", con lo que se abrirá una ventana que nos permitirá editar la expresión. En esta ventana modificamos la expresión "$P{autor}" para que quede "Autor: " + $P{autor}. Con esto lo que logramos es que a la cadena estática "Autor: " se le concatene el valor de la expresión dinámica "$P{autor}". Por lo que ahora el lo que aparecerá en la parte superior de cada página del reporte será la cadena "Autor: Juan". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 93
  • 94. iReport – Creación de un informe  Ahora presionamos el botón "Compile Report" para que se genere el reporte compilado "reporte2.jasper".  Veamos una vista previa del reporte, para esto hacemos clic en la pestaña "Preview". Nos pedirá los valores de los dos parámetros. Si colocamos para el parámetro "titulo" el valor "Reporte" y para el parámetro "autor" el valor "Alex" el preview que veremos será el siguiente: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 94
  • 95. iReport – Creación de un informe  Ahora veremos cómo pasarle estos valores desde nuestra aplicación Java, por lo que abrimos nuestro IDE de trabajo, NetBeans.  Ahí nos dirigimos a la clase "Main" que creamos la última vez y buscamos la línea en donde creamos nuestro objeto "JasperPrint": JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, null, new JRBeanCollectionDataSource(listaPariticipantes));  Y antes de esta línea crearemos un objeto "java.util.Map" que contendrá nuestros parámetros. Colocaremos el nombre de los parámetros (en este caso "autor" y "titulo") como llave y sus respectivos valores, "Juan" para el autor y "Reporte Participantes" para el título, como valores. Map<String, Object> parametros = new HashMap<String, Object>(); parametros.put("autor", "Juan"); parametros.put("titulo", "Reporte Participantes"); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 95
  • 96. iReport – Creación de un informe  Y pasamos este "Map" como el segundo parámetro del método "fillReport", al que hasta ahora le hemos pasado "null": JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, parametros, new JRBeanCollectionDataSource(listaPariticipantes)); Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 96
  • 97. iReport – Creación de un informe  El código de nuestro método "main" queda así: public static void main(String[] args) throws Exception { List<Participante> listaPariticipantes = new ArrayList<Participante>(); for (int i = 1; i <= 10; i++) { Participante p = new Participante(i, "Particpante " + i, "Usuario " + i, "Pass " + i, "Comentarios para " + i); listaPariticipantes.add(p); } JasperReport reporte = (JasperReport) JRLoader.loadObject("reporte2.jasper"); Map<String, Object> parametros = new HashMap<String, Object>(); parametros.put("autor", "Juan"); parametros.put("titulo", "Reporte Participantes"); JasperPrint jasperPrint = JasperFillManager.fillReport(reporte, parametros, new JRBeanCollectionDataSource(listaPariticipantes)); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE, new java.io.File("reporte3PDF.pdf")); exporter.exportReport(); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 97
  • 98. iReport – Creación de un informe  Si ejecutamos nuestro reporte obtendremos un archivo con el siguiente contenido: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 98
  • 99. iReport – Creación de un informe  Como podemos ver los parámetros "titulo" y "autor" han sido reemplazados por los valores "Reporte Participantes" y "Juan" respectivamente.  Gracias a los parámetros podemos pasar valores (como en este caso cadenas, pero podemos pasar prácticamente cualquier tipo de objeto) a nuestro reporte directamente desde nuestra aplicación Java.  Ahora veremos el último tipo de expresión que JasperReports nos proporciona, las Variables. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 99
  • 100. iReport – Creación de un informe  En este caso usaremos dos variables. La primera será una de las variables internas que ya proporciona JasperReports: PAGE_NUMBER, que nos dice el número de la página actual. En este caso como el reporte solo tendrá una página solo aparecerá el número 1, pero pueden extender el ejemplo para que se generen más páginas.  La segunda variable que usaremos será una variable creada por nosotros mismos y nos mostrará la suma de los puntos de los Participantes (en este momento los Participantes no tienen puntos, por lo que tendremos que agregarlos). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 100
  • 101. iReport – Creación de un informe  Lo primero que haremos es modificar la clase "Participante" agregando el atributo "puntos" de tipo "int" con sus correspondientes setters y getters: private int puntos; public int getPuntos() { return puntos; } public void setPuntos(int puntos) { this.puntos = puntos; } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 101
  • 102. iReport – Creación de un informe  y en nuestro método "main" agregamos, en el ciclo que crea los objetos "Participante", el siguiente código para establecer los puntos de cada uno de los Participantes: p.setPuntos(i);  Ahora regresamos a iReport y agregamos un nuevo Field en la ventana "Report Inspector" llamado "puntos" de tipo "java.lang.Integer". Este field será usado para mostrar los puntos que tiene cada uno de los Participantes. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 102
  • 103. iReport – Creación de un informe  Agregamos una columna, dentro de la banda "Details 1", para mostrar este field: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 103
  • 104. iReport – Creación de un informe  Si compilamos nuestro reporte y ejecutamos nuestra aplicación Java debemos ver un reporte con el siguiente contenido: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 104
  • 105. iReport – Creación de un informe  Ahora agregaremos la variable que realizará la suma de los puntos de todos los Participantes. Para esto agregamos una nueva variable en el nodo "Variables" de la ventana "Report Inspector" haciendo clic derecho sobre este nodo y seleccionando la opción "Add Variable" del menú contextual que se abre. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 105
  • 106. iReport – Creación de un informe  Modificamos sus propiedades en la ventana "Properties" cambiando su nombre a "sumaPuntos", su "Variable Class" a "java.lang.Integer", y "Calculation" a "Sum" (con esto indicamos que la variable mantendrá la suma de los valores que indicaremos más adelante, otras opciones incluyen un contador, el promedio, el valor más alto, etc.).  Ahora indicaremos la suma de cuáles valores son los que queremos que se almacene en este variable. Para eso hacemos clic en el botón "..." de la propiedad "Variable Expression", con lo que se abrirá una nueva ventana. Es esta nueva ventana indicaremos de dónde se tomarán los valores para la suma. Podemos usar una expresión tan compleja como necesitemos. Como en este caso solo queremos realizar la suma de los puntos escribimos “$F{puntos}". Y presionamos el botón "OK" para confirmar. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 106
  • 107. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 107
  • 108. iReport – Creación de un informe  Modificamos sus propiedades en la ventana "Properties" cambiando su nombre a "sumaPuntos", su "Variable Class" a "java.lang.Integer", y "Calculation" a "Sum" (con esto indicamos que la variable mantendrá la suma de los valores que indicaremos más adelante, otras opciones incluyen un contador, el promedio, el valor más alto, etc.).  Ahora indicaremos la suma de cuáles valores son los que queremos que se almacene en este variable. Para eso hacemos clic en el botón "..." de la propiedad "Variable Expression", con lo que se abrirá una nueva ventana. Es esta nueva ventana indicaremos de dónde se tomarán los valores para la suma. Podemos usar una expresión tan compleja como necesitemos. Como en este caso solo queremos realizar la suma de los puntos escribimos "F{puntos}". Y presionamos el botón "OK" para confirmar. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 108
  • 109. iReport – Creación de un informe  Ahora solo arrastramos nuestra variable "sumaPuntos" desde el "Report Inspector" hasta la banda "Summary". Esta banda se muestra cuando ya se han mostrado todos los datos de la banda "Details 1" y se muestra justo abajo de ella.  Agregaré un texto estático y una línea en esta banda solo para que se vea un poco mejor. Nuestro reporte hasta ahora debe verse así: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 109
  • 110. iReport – Creación de un informe  Ahora para terminar agregaremos la variable "PAGE_NUMBER" que nos dice el número de página actual en el reporte. Arrastramos esta variable desde el "Report Inspector" hasta la banda "Page Footer", la cual se muestra en la parte inferior de cada página.  Agregaré también un texto estático solo para indicar que el valor que estamos mostrando corresponde al número de página. Al final el reporte queda así: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 110
  • 111. iReport – Creación de un informe  Ahora guardamos y compilamos nuestro reporte y ejecutamos nuestra aplicación desde el NetBeans. El reporte generado debe verse así: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 111
  • 112. iReport – Creación de un informe PARTE 4: Gráficas en reportes Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 112
  • 113. iReport – Creación de un informe  Algunas veces es más fácil entender la información cuando se nos presenta en una imagen. En el caso de los datos, cuando estamos haciendo comparaciones, lo más fácil es visualizarlos en una gráfica de barras o en una gráfica de pie o pastel.  Para este ejemplo los datos que graficaremos son las ventas de consolas de última generación (Wii, XBox360, y PS3). Tomaremos estos datos de VG Chartz que, aunque no son cifras oficiales, mantiene sus datos actualizados. En el momento de escribir este tutorial las ventas van:  Wii: 41.6% para nosotros será 41%  XBox 360: 29.6% para nosotros será 30%  PS3: 28.8% para nosotros será 29% Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 113
  • 114. iReport – Creación de un informe  Bien, para comenzar crearemos un nuevo proyecto Java standalone en NetBeans (File -> New Project... -> Java -> Java Application), le asignamos un nombre (que en mi caso será ReporteGrafica) y presionamos el botón "Finish" para que el nuevo proyecto se genere y veamos en el editor nuestra clase Main.  Agregamos al nodo "Libraries" de nuestro proyecto la biblioteca "JasperReports" que creamos en la primer parte del tutorial y el jar "commons-logging- 1.1.1.jar",como lo hemos venido haciendo hasta ahora.  Adicionalmente debemos agregar dos jars más que nos permitirán generar las gráficas. Puesto que JasperReports hace uso de JFreeChart para generar las gráficas debemos agregar dos de sus jars: jfreechart.jar y jcommon.jar. Si bajaron JasperReports en el archivo .zip que contiene las bibliotecas de soporte entonces ya tienen estos jars (que se encuentran en el directorio lib del .zip anterior), solo deben agregarlos al nodo "Libraries" del proyecto. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 114
  • 115. iReport – Creación de un informe  Ahora necesitamos, como en los casos anteriores, una clase cuyas instancias mantendrán los datos que mostraremos en el reporte. En este caso, como estamos hablando de consolas, creo que lo más adecuado es que esta sea una clase "Jugador". Así que agreguemos esta clase a nuestro proyecto.  Esta clase tendrá tan solo tres atributos: un id , un nombre para distinguir al usuario, y el nombre de la consola que tiene (que es el dato que nos interesa para crear la gráfica). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 115
  • 116. iReport – Creación de un informe  El código de la clase Jugador queda de la siguiente forma: public class Jugador public int getId() { { private int id; return id; private String nombre; } private String consola; public void setId(int id) public Jugador(int id, String nombre, String consola) { { this.id = id; this.id = id; } this.nombre = nombre; this.consola = consola; public String getNombre() } { return nombre; public String getConsola() } { return consola; public void setNombre(String nombre) } { this.nombre = nombre; public void setConsola(String consola) } { } this.consola = consola; } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 116
  • 117. iReport – Creación de un informe  El código de la clase Main es el código estándar que hemos estado usando en esta serie de tutoriales de JasperReports, con excepción de la parte en la que se crean los Jugadores. En este caso usaremos tres ciclos, uno para cada consola. Por lo que esta parte del código queda más o menos así (listaJugadores es una lista de objetos Jugador): for (int i = 1; i <= 49; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii")); } for(int i = 50; i <= 79; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox")); } for(int i = 80; i <= 100; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3")); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 117
  • 118. iReport – Creación de un informe  Ahora abriremos el iReport y comenzaremos con el diseño de nuestro reporte.  Creamos un nuevo reporte vacío yendo al menú Archivo -> New... -> Empty Report. En la ventana que se abre colocamos el nombre de nuestro reporte (reporteGrafica.jrxml) y lo guardamos en el directorio raíz de nuestro proyecto de NetBeans: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 118
  • 119. iReport – Creación de un informe  Ahora abriremos el iReport y comenzaremos con el diseño de nuestro reporte.  Creamos un nuevo reporte vacío yendo al menú Archivo -> New... -> Empty Report. En la ventana que se abre colocamos el nombre de nuestro reporte (reporteGrafica.jrxml) y lo guardamos en el directorio raíz de nuestro proyecto de NetBeans: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 119
  • 120. iReport – Creación de un informe  Comencemos colocando un título y los encabezados de nuestras columnas de datos usando textos estáticos, así como los fields para los datos que obtendremos de cada uno de los objetos Jugador (id, nombre, y consola) de la misma forma que lo hicimos en este tutorial (no olviden guardar de forma constante sus avances para no perder su trabajo): Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 120
  • 121. iReport – Creación de un informe  Ahora vienen los pasos interesantes. Primero debemos crear un grupo. Un grupo nos permite tratar de forma especial un conjunto de datos que se encuentran asociados (es como un group by en SQL). Además, al crear un grupo se genera también una variable que mantiene el conteo de los elementos de cada grupo (como si hicieramos un count sobre los elementos de los grupos en SQL).  En este caso el grupo que nos interesa es el de las consolas.  Si estuvieramos usando consultas SQL obtener estos datos sería sencillo. Es más, si hubieramos creado nuestro reporte usando el "Report Wizard" podríamos haber creado el grupo que nos interesa desde ahí. Pero como estamos usando un DataSource propio, tenemos que agregar el grupo a mano. Afortunadamente es muy sencillo agregar grupos desde iReport. Lo único que debemos hacer es click derecho sobre el nodo "report name" (la raíz de los elementos del proyecto) en el panel "Report Inspector". Con esto se abrirá un menú contextual. De este seleccionamos el elemento "Add Report Group": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 121
  • 122. iReport – Creación de un informe  Al hacer esto se abrirá la ventana del "Group Wizard". En esta colocamos el nombre del grupo, en este caso será CONSOLAS, y en el campo "Group by the following report object:" seleccionamos el field "consola" que creamos anteriormente. Con esto conseguiremos que el nuevo grupo que se creará se haga con respecto al valor del atributo "consola" de nuestros objeto "Jugador". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 122
  • 123. iReport – Creación de un informe  Presionamos el botón "Siguiente >" y se nos mostrarán dos radio buttons preguntando si quieremos agregar la cabecera (header) y el pie de pagina (footer) del grupo. Nosotros deseleccionamos estas opciones (se encuentran seleccionadas por default) ya que no nos interesa agregar ninguno de estos elementos. Para terminar presionamos el botón "Finalizar" y ya tendremos agregado nuestro grupo.  No es muy obvio el que este grupo existe, de hecho los únicos indicadores que tenemos son que se han agregado en la zona de las bandas del "Report Inspector" dos nuevas bandas: "CONSOLAS Group Header" y "CONSOLAS Group Footer", además se ha agregado una variable llamada "CONSOLAS_COUNT", que es la variable que nos interesa y por la que hemos creado el grupo, que mantendrá el número de jugadores que tienen cada una de las consolas: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 123
  • 124. iReport – Creación de un informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 124
  • 125. iReport – Creación de un informe  Ahora agregaremos nuestra gráfica. Para eso arrastraremos desde la Paleta de elementos del reporte un "Chart" y lo colocamos en la banda "Summary" (ajusten el tamaño de la banda para que la gráfica se vea bien). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 125
  • 126. iReport – Confección de informe  Al arrastrar la gráfica se abrirá una nueva ventana preguntándonos qué tipo de gráfico queremos mostrar. En este caso seleccionaremos el gráfico de pie o de pastel (la primer o segunda opción):  Presionamos el botón "OK" y la gráfica se agregará a nuestro reporte, ajústenla para que abarque toda el área de la banda. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 126
  • 127. iReport – Confección de informe  Lo último que haremos es configurar la gráfica para que obtenga los datos de los campos y variables que nos interesa mostrar. Para esto, hacemos click derecho sobre la gráfica, con lo que se abrirá un menú contextual. En este menú seleccionamos la opción "Chart Data". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 127
  • 128. iReport – Confección de informe  Con lo que se abrirá una nueva ventana, y en esta ventana seleccionamos la pestaña "Details". En esta pestaña configuraremos tres valores:  Key expression  Value expression  Label expression  La "Key expression" dice cuál será la base que se usará para cada uno de las piezas de la gráfica. En nuestro caso queremos que cada trozo muestre las consolas. Por lo que colocamos como valor $F{consola}. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 128
  • 129. iReport – Confección de informe  La "Value expression" dice cuál será el tamaño de cada una de las piezas de la gráfica. Nosotros queremos que cada pieza sea equivalente al número de consolas que se han comprado. Por lo que colocamos como valor $V{CONSOLAS_COUNT}.  Label expression es la etiqueta que se mostrará para cada valor. Nosotros queremos mostrar el nombre de la consola junto con el número de unidades que se han vendido de cada una. Por lo que colocamos como valor $F{consola} + " - " + $V{CONSOLAS_COUNT}. Lo cual colocará como valor el nombre de la consola, concatenándole el signo " - " y concatenándole el número de consolas vendidas (el número de jugadores que han comprado cada una de las consolas). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 129
  • 130. iReport – Confección de informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 130
  • 131. iReport – Confección de informe  Presionamos el botón "Close" y hemos terminado con nuestro reporte. Cambiamos a la vista "Preview" para compilar el reporte. No se nos mostrará nada del reporte final. De hecho los regresará a la vista del "Designer" y mostrará una excepción en la ventana de salida indicando algo así: "Key is null in pie dataset". Esto es normal ya que la gráfica no puede generarse ya que no existen datos. Lo importante es que se haya generado el archivo "reporteGrafica.jasper". Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 131
  • 132. iReport – Confección de informe  Ahora ejecutamos nuestra aplicación, con lo que debe generarse nuestro reporte en PDF y debemos ver, al final del reporte, la siguiente gráfica: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 132
  • 133. iReport – Confección de informe  Finalmente este es el codigo de la clase Main (omitiendo los imports): public class Main JasperReport reporte = { (JasperReport)JRLoader.loadObject("reporteGrafica.jasper"); public static void main(String[] args) throws Exception JasperPrint jasperPrint = { JasperFillManager.fillReport(reporte, null, new List listaJugadores = new ArrayList(); JRBeanCollectionDataSource(listaJugadores)); for (int i = 1; i <= 49; i++) JRExporter exporter = new JRPdfExporter(); { listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii")); } exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); for(int i = 50; i <= 79; i++) { exporter.setParameter(JRExporterParameter.OUTPUT_FILE, listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox")); new File("reporte grafica.pdf")); } exporter.exportReport(); for(int i = 80; i <= 100; i++) } { listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3")); } } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 133
  • 134. iReport – Creación de un informe PARTE 5: Grupos y subgrupos Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 134
  • 135. iReport – Confección de informe  Ahora veremos cómo deben ser usados los grupos para, bueno, agrupar un conjunto de datos relacionados y mostrar estos grupos de forma clara en el reporte. Usaremos la misma idea del tutorial anterior, en la que se mostraron las ventas de las consolas de última generación (Wii, XBox 360, y PS3). Solo que en este caso mostraremos por cada consola el nombre de los jugadores que las han comprado, separados claramente de los que han comprado las otras consolas.  Para comenzar creamos un nuevo proyecto en NetBeans (File -> New Project... -> Java -> Java Application). Damos un nombre y una ubicación a nuestro proyecto y presionamos el botón "Finish" para que la clase Main aparezca en nuestro editor. Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 135
  • 136. iReport – Confección de informe  Recuerden agregar al nodo "Libraries" del panel "Projects" la biblioteca "JasperReports" que creamos en la primer parte del tutorial.  Usaremos la misma clase "Jugador" en en el tutorial anterior para mantener los datos que serán mostrados en el reporte.  El código que colocaremos en la clase Main es el mismo que en el tutorial anterior. Solo que en este caso en vez de tener 100 jugadores, modificaremos los ciclos for para tener solo 10. Por lo tanto quedan de la siguiente forma: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 136
  • 137. iReport – Confección de informe for (int i = 1; i <= 4; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "Wii")); } for(int i = 5; i <= 7; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "XBox")); } for(int i = 8; i <= 10; i++) { listaJugadores.add(new Jugador(i, "Jugador " + i , "PS3")); } Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 137
  • 138. iReport – Confección de informe  Ahora abrimos iReport y creamos un nuevo reporte vacio (Archivo -> New... -> Empty Report). En la ventana que se abre le damos un nombre al reporte (reporteGrupo.jrxml) y lo guardamos en el directorio raíz del proyecto de NetBeans. Presionamos el botón "Finalizar" para que aparezca la plantilla vacio de nuestro reporte.  Colocamos el título del reporte en la banda "Title" usando un texto estático. También agregamos los fields correspondientes para los datos de los objetos Jugador (id, nombre, y consola). En esta ocasión en la banda "Detail" solamente colocamos los fields id y nombre (ya que los grupos serán formados en base al field consola). Y no colocamos nada en la banda "Column Header": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 138
  • 139. iReport – Confección de informe Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 139
  • 140. iReport – Confección de informe  Ahora crearemos el grupo correspondiente a las consolas. Para esto hacemos click derecho en el nodo "report name" del panel "Report Inspector". Y en el menú contextual que aparece seleccionamos la opción "Add Report Group": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 140
  • 141. iReport – Confección de informe  Con esto se abrirá la ventana "New group wizard". En ella debemos introducir el nombre del grupo, que en este caso será "CONSOLAS" y el campo sobre el cual se crearán los grupos que, como habiamos dicho, será el campo "consola": Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 141
  • 142. iReport – Confección de informe  Presionamos el botón "Siguiente >". En la pantalla siguiente dejamos seleccionadas las dos opciones ("Add the group header" y "Add the group footer"). Presionamos en botón "Finalizar" con lo que veremos que en la plantilla de nuestro reporte han aparecido dos nuevas bandas, "CONSOLAS Group Header" y "CONSOLAS Group Footer", además de una nueva variable, CONSOLAS_COUNT: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 142
  • 143. iReport – Confección de informe  Agregaré un cuadro negro ("Rectangle" de la paleta de elementos del reporte) en la banda "CONSOLAS Group Header" para poder distinguirlo en el momento de generar el reporte final. Además arrastraré a esta banda el field $F{consola} que creamos anteriormente. Al arrastrar este field se nos preguntará qué es lo que queremos mostrar: el valor del campo ("The field value") o el resultado de una función de agregación ("The result of an aggregation fuction"). Como lo que queremos mostrar es el valor del campo dejamos seleccionada la primera opción (si queremos mostrar el número de los elementos del grupo podemos volver a arrastrar este field a la banda). Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 143
  • 144. iReport – Confección de informe  Si, al igual que yo, agregaron el cuadro negro en la banda, será neccesario que cambien el color de la letra del campo (Forecolor) a blanco para poder verlo.  El reporte final debe verse más o menos así: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 144
  • 145. iReport – Confección de informe  Ahora cambiamos a la pestaña "Preview" para que se compile nuestro reporte y genere, en el mismo directorio en el que colocamos nuestro archivo "reporteGrupo.jrxml", el archivo "reporteGrupo.jasper".  Ahora regresamos al NetBeans y ejecutamos nuestra aplicación. Esto generará un archivo PDF en el mismo directorio que los archivos .jrxml y .jasper. El contenido del reporte el siguiente: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 145
  • 146. iReport – Confección de informe  Como podemos ver, los tres grupos (uno por cada consola) se muestran de forma independiente uno de otro. Además en cada grupo se listan solo los jugadores que tienen la consola del grupo.  El código final de la clase Main es el siguiente: Jose Alberto Benítez Andrades– jose@indipro.es - @jabenitez88 146