Informes en Java con iReports

7
460270

Introducción a iReport

 La
herramienta iReport es un constructor / diseñador de informes visual, poderoso,
intuitivo y fácil de usar para JasperReports
escrito en Java. Este instrumento permite que los usuarios corrijan visualmente
informes complejos con cartas, imágenes, subinformes, etc. iReport está
además integrado conJFreeChart, una de la biblioteca gráficas OpenSource más difundida
para Java. Los datos para imprimir pueden ser recuperados por varios caminos
incluso múltiples uniones JDBC, TableModels, JavaBeans, XML, etc.

Características
de iReport

La
lista siguiente describe algunas de las características importantes de iReport:

  • 100%
    escrito en JAVA y además OPENSOURCE y gratuito.

  • Maneja
    el 98% de las etiquetas de JasperReports

  • Permite
    diseñar con sus propias herramientas: rectángulos, líneas, elipses,
    campos de los textfields, cartas, subreports (subreportes).

  • Soporta
    internacionalización nativamente.

  • Browser
    de la estructura del documento.

  • Recopilador
    y exportador integrados .

  • Soporta
    JDBC.

  • Soporta
    JavaBeans como orígenes de datos (éstos deben implementar la interface
    JRDataSource).

  • Incluye
    Wizard’s (asistentes) para crear automáticamente informes .

  • Tiene
    asistentes para generar los subreportes

  • Tiene
    asistentes para las plantillas.

  • Facilidad
    de instalación.

Instalación de iReport

El iReport viene como un archivo
comprimido. Esto contiene los archivos de distribución principales (clases y
fuente), algunas plantillas para el ayudante (wizard), todos los .jar requeridos
adicionales. Esta herramienta trabaja de manera integrada con el jasperreport,
por lo tanto no se requiere una instalación adicional de jasper.

El archivo puede descargarse desde http://sourceforge.net/projects/ireport/

Prerrequisitos

Necesitará disponer de lo siguiente:

  • Apache
    Ant
  • IReport
  • Jassperreport-0.x.x
    (usar la versión que viene incluida con iReport)

 

Instalación
y configuración del ambiente de trabajo

 Instalación
de ANT

  • Descargar
    la versión apache-ant-1.6.2-bin.zip  o  superior.
  • Descomprimir 
    el archivo zip.
  • Crear
    un directorio con el nombre ANT_HOME o ANT. En el directorio raiz. C:\.
  • Copiar
    el contenido de Ant en la carpeta creada.
  • Configurar
    las variables de entorno:
  1. ANT_HOME
    = C:\ANT_HOME  o  ANT_HOME = C:\ANT

  2. JAVA_HOME
    = C:\ jdk1.5.0

  3. PATH
    = C:\ANT\bin

Instalación
de iReport.

·       
Descargar la version  iReport-0.3.2.zip o
superior.

·       
Descomprimir el archivo zip

·       
Crear un directorio con el nombre iReport en el
directorio raiz C:\.

·       
Copiar en contenido del iReport en la carpeta
creada.

·       
Copiar el archivo tools.jar  que se
encuentra en “C:\ jdk1.5.0\lib”del jdk al 
directorio “C:\iReport\lib

·       
Colocar  el Driver “classes12.jar
de oracle en el directorio “C:\iReport-0.2.2\lib”  (Aplica para cualquier driver JDBC que necesitemos)

·       
Configurar las variables de
entorno:

1.     
CLASSPATH: C:\iReport\lib\jasperreports-0.6.0.jar.

2.     
CLASSPATH:
C:\iReport\lib\itext-1.02b.jar (este archivo es para el uso de archivos pdf)

  • Finalmente
    deberá compilar los fuentes. Para esto ubíquese en C:\iReport y ejecute el
    comando ant

 

Levantando el iReport

Para levantar la
aplicación del iReport, debe dirigirse hasta el lugar donde descomprimió los
archivos, ahí ejecutar el comando iReport.bat como se muestra en
la siguiente figura:


 Otra
forma de levantar la aplicación es a través de ANT, para ello se debe abrir
una ventana de cmd, ubicarse en la ruta donde se encuentra instalado el iReport,
ej : C:\iReport y colocar el comando ant iReport, como se muestra
en la siguiente figura:

 

 La interfaz
gráfica de iReport comienza a cargarse:

 

 


 Configurar las
opciones: Ir a Tools
à
Options

 

 


 Para
configurar el idioma: ir a Tools
à
Options

 

Luego
presionar “Apply”  y por último “Save”. Notaremos como el idioma
de la barra de herramientas ha cambiado en función de nuestra elección.

 

 Para
empezar con iReports:

 Seleccionar
“Project
à
New”

 

 Seleccionar
“File
à
New Document”


 

Aquí deberá
definir el nombre del reporte, tamaño de la pantalla, orientación, márgenes,
etc.

 La
apariencia del layout (plantilla) de la página del reporte es la siguiente:

 ˆ»/>

 

Donde:

 

  • title
    Aparece sólo al inicio del reporte. El título se escribe en está
    sección. Ejemplo: “Reporte de Desempeño de los empleados”

  • pageHeader
    Aparece en la parte superior de cada página. Puede contener información
    como la fecha y hora, nombre de la organización, etc.

  • columnHeader
    Sirve para listar los nombres de los campos que se van a presentar
    (desplegar). Por ejemplo: “Nombre del Empleado”, “Hora de Entrada”,
    “Hora de Salida”, “Horas trabajadas”, “Fecha”, etc. 
  • detail
    En esta sección se despliegan los valores correspondientes a las entradas
    de campos definidas en la sección anterior. Por ejemplo “Juan Perez”,
    “09:00”, “18:00”, “9”,”2005-04-27” 

  • columnFooter
    Puede presentar información sumarizada para cada uno de los campos. Por
    ejemplo “Total de Horas Trabajadas: 180”

·       
pageFooter
Aparece en la parte inferior de cada página. Este parte puede presentar, el
contador de páginas como “Página 1/7”

  • summary
    Esta sección se usa para proporcionar información
    sumarizada de los campos presentes en la sección “detail” por ejemplo
    para el caso de las horas trabajadas de cada empleado se puede definir un
    objeto gráfico tipo “pie” para tener una mejor comparación 
    y comprensión visual de los datos.

 

Los objetos de texto, imágenes, etc
pueden ser colocados en la plantilla del documento usando el método de
arrastrar y pegar.

 

Para insertar texto puro
usar: 



Para insertar campos (Fields)
usar:

 

Para insertar imágenes
usar: 



 

Cuando insertamos un objeto de texto lo
haremos arrastrando el elemento hasta el lugar del documento donde queramos
visualizarlo. Seguidamente se presionará clic derecho para editar las
propiedades del objeto y así poder definir los valores de fuente, bordes y el
contenido mismo del texto.

 





 

 

 A medida que
insertemos objetos de texto (estáticos y campos dinámicos), nuestro reporte
empezará a definir la apariencia visual que buscamos.


 Los documentos que se generan con
iReports + jasperreports tienen varios valores que son seteables o
configurables, estos son parámetros, campos (Fields) y variables:


a)Parámetros: son valores generales como el titulo del reporte /
subreporte, ubicación, autor, etc.

b)Campos (Fields):
son los campos tipo texto que llenaremos desde las consultas lanzadas a la
aplicación durante la ejecución del reporte.

c)
Variables:
una variable es un valor calculado como
una sumatoria.

 Para definir los parámetros se
tiene que pulsar el botón “Parameters” desde la barra de herramientas

 

 







 

 

 Los objetos de
tipo TextField, deben definir un campo field en su viñeta de propiedades y
deben usar el key “textField”. En general debe configurarse como se indica
en las siguientes pantallas.

 



 

 

 Una vez que
hemos terminado de diagramar nuestro reporte, debemos compilar y luego
ejecutarlo. La herramienta nos permite tener una vista previa en varios formatos
de la apariencia de nuestro documento.

 

 Una
vez compilado, se tiene que ejecutar el reporte. Para esto iremos a Build
à
Execute Report

 

 Observamos
que cuando no definimos un datasource los campos aparecen como null.

 Conexión
con la Base de Datos.

 Seleccionar DataSource–> Connection/DataSource–>New

 

  • Name: Escribir el nombre de la base
    de datos.
  • JDBC Driver: Seleccionar el Driver
    de la base de datos con la cual se realizará la conexión.
  • JDBC URL:
    escribir
    la dirección URL de donde se encuentra alojado el
    ambiente de trabajo de la base de datos.
  • Especificar  la cadena de
    conexión con la base de datos, colocar usuario y password.
  • Salvar la configuración de la
    conexión.

 

 Presionar
el botón Test, para verificar que la conexión este correcta, para la cual
deberá aparecer la siguiente ventana:

 

 Para seleccionar la conexión
configurada:  Ir al Menú y
seleccionar ” Build
à
Set Active Connection”. Aparecerá una pantalla como la que se muestra a
continuación:

 

Incluir clases en iReport

Pasos para incluir un clase java en el
iReport:

  • Agregamos
    nuestros campos de la Base de Datos:


 

  • Creamos la
    clase que vamos a utilizar:

  CalculosFecha.java

 import
java.sql.*;

import
java.util.*;

import
java.text.*;

import
net.sf.jasperreports.engine.*;

 

 public
class CalculosFecha extends JRDefaultScriptlet

{

           
public static String user = «xxxxxx»;

           
public static String pasw = «xxxx»;

           
public static String driver = «oracle.jdbc.driver.OracleDriver»;

           
public static String url = «xxxxxx»;

           
public static ResultSet rs = null;

           
public static Statement st = null;

           
public static Connection cn = null;

           
public static PreparedStatement pst = null;

           
public static int per=0;

  

/*

           
Datos del Reporte

*/

           
public
String hello() throws JRScriptletException

           
{

                       
return «Mi Primera clase»;

           
}

}

  • Le
    indicamos que vamos a usar una clase:

Uses
this Scriplet class..

Le colocamos el nombre de la clase:
CalculosFecha (en este caso)


 

  • Agregamos
    la descripción de la clase en el iReport:

 TextField Expresión:((CalculosFecha)$P{REPORT_SCRIPTLET}).hello()

 

  • Compilamos
    desde mi servidor web, porque si lo hago directamente del iReport me dara
    error. Entonces lo compilos desde el WEB-SERVER.

 
 

<!–/*

*********************************************************************

*         
Formulario: scriplet.jsp.                                                                                     
*

*         
Autor: Delia M Medina
C.                                                                                 
*

*         
Fecha de Creacion:
28-09-2004                                                                         
*

**********************************************************************

*         
Funcion:                                                                                                        
****

**********************************************************************

*/–>

<%@
page import=»net.sf.jasperreports.engine.*» %>

<%@
page import=»net.sf.jasperreports.engine.design.*» %>

<%@
page import=»net.sf.jasperreports.engine.data.*»%>

<%@
page import=»net.sf.jasperreports.engine.export.*»%>

<%@
page import=»net.sf.jasperreports.engine.util.*»%>

<%@
page import=»net.sf.jasperreports.view.*»%>

<%@
page import=»net.sf.jasperreports.view.save.*»%>

<%@
page import=»java.sql.*»%>

<%@
page import=»java.util.*» %>

<%@
page import=»java.io.*» %>

<html>

<head><title>Generando
Reporte Nomina……………</title>

<%

           
System.out.println(«Comienza el Reporte—————————-«);

 

 %>

 

<script
language=»JavaScript»>

function
regresar(){

           
history.back();

}

function error(){

           
alert(«Error encontrando procesando el periodo: » + periodo);

           
history.back();

}

</script>

<head>

<%

try{

           
ResultSet rs = null;

           
Statement st = null;

           
String sql = null;

           
String driver = «oracle.jdbc.driver.OracleDriver»;

           
String connectString = «********»;

           
String user = «***************** «;

           
String password = «*********»;

           
Class.forName(driver);

           
Connection conn = DriverManager.getConnection(connectString, user, password);

           
/////////////////////////////////////////////

           
System.out.println(«********Compilamos pago_nomina.jrxml OK********»);

           
System.setProperty(

                       
«jasper.reports.compile.class.path»,

                       
application.getRealPath(«/WEB-INF/lib/jasperreports-0.6.0.jar») +

                       
System.getProperty(«path.separator») +

                       
application.getRealPath(«/WEB-INF/classes/»)

                       
);

           
System.out.println(«*****Cargamos el jasperreports-0.6.0.jar OK*********»);

           
System.setProperty(

                       
«jasper.reports.compile.temp»,

                       
application.getRealPath(«/reports/»)

                       
);

 

           
JasperCompileManager.compileReportToFile(application.getRealPath(«/reports/mipagina.jrxml»));

           

           
System.out.println(«******Fin de la Compilamos el
archivos***********»);

           
/////////////////////////////////////////////

 

           
File reportFile = new File(application.getRealPath(«/reports/mipagina.jasper»));

 

           
Map parameters = new HashMap();

                                                

           
byte[] bytes =

                       
JasperRunManager.runReportToPdf(

                                  
reportFile.getPath(),

                                  
parameters,

                                  
conn

                                  
);

           

           
response.setContentType(«application/pdf»);

           
response.setContentLength(bytes.length);

           
ServletOutputStream ouputStream = response.getOutputStream();

           
ouputStream.write(bytes, 0, bytes.length);

           
ouputStream.flush();

           
ouputStream.close();

           

           
System.out.println(«jasperPDF OK…………..»);

           
///////////////////////////////////////////////////////////////

           
System.out.println(«Fin del reporte pago_reporte_nomina………….»);

           

                                  
}catch (JRException e)

                                  
{System.out.println(«Error:» +e.getMessage());}

                                  
catch (Exception e)

                                  
{

                                  
e.printStackTrace();

                                  
System.out.println(«Error2:» +e.getMessage());

                                  
}         

%>

<body
>

</body>

</html>

 


 

Fuentes:

  • Documentación
    de iReports
  • Documento
    de Delia Medina, Manual de iReports

 

7 Comentarios

  1. Hola me parecio muy bueno este tutorial rapido…Les hago una pregunta creo que tal vez simple.Como deberia hacer para que un textField creciera dinamicamente.Por ejemplo en un reporte de factura el cual tiene una campo detalle. El problema que tengo es que cuando ese detalle excede el tamaño del textField no me muestra todo sino lo que entra digamos en el textField

  2. como hacer en un reporte se pueda mostrar todo lo de obseravciones ya que en ocaciones es mui necesario agregar mas informacion pero no semuestra del todo solo una parte

  3. Hola se que el iReport ha mejorado un monton pero sigo usando esa versión y jdk, mi consulta es en cuanto a la clase, si el reporte al convertirlo en Jasper, lo hará con la clase que le indicamos o la clase la tendremos también que subir a parte?

  4. hola me pareció muy interesante su tutorial …. ahora estoy haciendo lo mismo pero aumentando un subreporte la verdad no me sale estoy intentando pasando parámetros y poniendo una conexión como había revisado en otros tutoriales pero no puedo lograr el resultado que deseo quisiera saber si me pudiera ayudar en esa parte que salga el repote y el subreporte los dos convertidos a pdf…. si e pudiera ayudar espero su pronta respuesta

  5. Esta muy bueno tu post, el problemá que tengo es que el titulo solo aparece en la primera hoja y necesito que aparezca en todas las hojas del reporte….

  6. Hola buenas tardes, el tutorial es muy bueno. Mi pregunta es: Alguien sabe porque cuando ejecuto un archivo de la versión 4.7 en la versión 5.6 no puedo visualizar mi reporte. En la pestaña de «Pre-visualización» tengo que seleccionar la opción que dice «PDF Preview» para poderlo visualizar; porque en la opción de «Internal Preview» no me lo muestra y me muestra un error que dice: «Error mostrando pagina del reporte. Vea la consola por detalles.», pero en la iRport Console no me dice ningún error.
    Alguien podría ayudarme a resolver este problema, por favor.

Dejar respuesta

Please enter your comment!
Please enter your name here