Archive

Archive for March 9th, 2009

Comenzando con JasperReports (de David R. Heffelfinger) - Traducción

March 9th, 2009

Nota preliminar: Este articulo es la traducción de un buen articulo que encontré para comenzar con JasperReports.

El articulo original se encuentra en Getting Started With JasperReports

Comenzando con JasperReport (de: David R. Heffelfinger)

Recientemente estuve buscando herramientas de reporting para un proyecto en la que pronto trabajare. Una de las herramientas que estaba viendo fue JasperReports. JasperReports es librería open source (LGPL) muy popular para realizar reportes escrito en java. Infortunadamente no esta muy bien documentado y yo tuve un tiempo muy difícil en hacer un simple reporte. Después de alguna investigación, finalmente fui capaz de generar un simple reporte, este articulo resume que se necesita hacer para comenzar con JasperReports. Vean Recursos para mas información en como encontrar información adicional y documentación acerca de JasperReports.

Comenzando

Los reportes de JasperReports son definidos en archivos xml, los cuales por convención tienen la extensión jrxml. Un típico archivo jrxml contiene los siguientes elementos:

<jasperReport>- El elemento raíz.

<title>- Su contenido se imprime una sola vez al comienzo del reporte.

<pageHeader>- Su contenido se imprime al comienzo de cada pagina en el reporte.

<detail>- contiene el cuerpo del reporte.

<pageFooter>- su contenido se imprime al pie de cada pagina en el reporte.

<band>- define una sección de reporte, todos los elementos de arriba contienen un elemento band como su único elemento hijo.

Todos los elementos son opcionales, excepto por el elemento raiz jasperReport, Aqui esta un ejemplo de un archivo jrxml.

<?xml version="1.0"?>
<!DOCTYPE jasperReport
  PUBLIC "-//JasperReports//DTD Report Design//EN"
  "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
 
<jasperReport name="Simple_Report">
 <detail>
    <band height="20">
      <staticText>
        <reportElement x="180" y="0" width="200" height="20"/>
        <text><![CDATA[Hello World!]]></text>
      </staticText>
    </band>
  </detail>
</jasperReport>

Para este ejemplo simple, yo omití los elementos opcionales <title>, <pageHeader> y <pageFooter>. El elemento <staticText>, no sorprendentemente, muestra texto estático en el reporte, como se puede ver, este contiene un simple elemento <text> definiendo el texto que sera desplegado.

El archivo jrxml necesita ser “compilado” a un formato binario especifico de JasperReports, esto puede ser conseguido llamando al método compileReport() de la clase net.sf.jasperreports.engine.JasperCompileManager. Hay muchas versiones sobrecargadas de este método, en nuestro ejemplo, nosotros usaremos el que toma un simple parámetro String, consulte la documentacion para mas detalles de otras versiones del metodo.

public class JasperReportsIntro
{
  public static void main(String[] args)
  {
    JasperReport jasperReport;
    JasperPrint jasperPrint;
    try
    {
      jasperReport = JasperCompileManager.compileReport(
          "reports/jasperreports_demo.jrxml");
      jasperPrint = JasperFillManager.fillReport(
          jasperReport, new HashMap(), new JREmptyDataSource());
      JasperExportManager.exportReportToPdfFile(
          jasperPrint, "reports/simple_report.pdf");
    }
    catch (JRException e)
    {
      e.printStackTrace();
    }
  }
}

Un archivo jrxml necesita ser compilado solo una vez, pero para este ejemplo este es compilado cada vez que la aplicación es ejecutada. Antes de que un reporte sea generado, este necesita ser “llenado” con información, esto es conseguido callando al método fillReport() de la clase net.sf.jasperreports.engine.JasperFillManager, aquí vamos a usar uno que recibe tres parámetros, una instancia de net.sf.jasperreports.engine.JasperReport, una java.util.HashMap conteniendo cualquier parámetro pasado al reporte, y una instancia de una clase que implementa la interface net.sf.jasperreports.engine.JRDataSource. La linea que consigue nuestro ejemplo de arriba es

jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap(), new JREmptyDataSource());

Ya que nuestro simple reporte no toma parametros, le pasamos un HashMap vacio como segundo parametro, y una instancia de net.sf.jasperreports.engine.JREmptyDataSource como tercer parametro.

JREmptyDataSource es una clase muy conveniente incluida en JasperReports, este es básicamente un DataSource sin información.

Finalmente, en nuestro ejemplo, nosotros exportamos el reporte a un archivo PDF, de esta manera este puede ser leido por Adobe Acrobat, XPF, Evince, o cualquier otro lector de PDF, la linea que realiza este ejemplo es

JasperExportManager.exportReportToPdfFile(jasperPrint, “reports/simple_report.pdf”);

Los parámetros se explican por si mismos.

Conclusión

JasperReports una maquina de reportes open source muy popular, esta guía provee suficiente información para comenzar con JasperReports. Para información adicional por favor vean mi libro JasperReports For Java Developers.

Recursos

Displaying JasperReports PDF Reports on the Browser
Creating Database Reports With JasperReports
JasperReports’ Web Site
JasperReports For Java Developers - un Libro de JasperReports escrito por el autor de este articulo - David R. Heffelfinger

Renan Huanca JasperReports