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:
- ANT_HOME
= C:\ANT_HOME o ANT_HOME = C:\ANT - JAVA_HOME
= C:\ jdk1.5.0 - 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
|
Para insertar campos (Fields) |
Para insertar imágenes
|
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
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
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
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?
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
Al momento de compilar el reporte me genera un archivo con extension java no así un archivo con extensión jasper. ¿Cómo puedo cambiarlo?
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….
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.
Buenas tardes.
Yo tenia el mismo problema. En mi caso el reporte contenía una imagen y se resolvió eliminando el componente de la imagen.