Programación en castellano
Inicio > Foros > Java y XML > Clase Ejemplo para hacer reportes con JFreeReport
-Foros de debate

Java y XML
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Clase Ejemplo para hacer reportes con JFreeReport
Enviado por Jobev Lee el día 10 de julio de 2005

Hola, jejeje, bueno he hecho mucho uso de los recursos de este foro pero creo que es hora de que colabore, quisiera saber si alguien me puede decir como puedo enviar un Tutorial que he hecho sobre este tema.??? Aunque eso es tema de otro costal...

Para los que no le entienden ni un C... al XML y a los que les gusta las cosas por codigo, esta es una clase que pueden usar para Generar Reportes en JFreeReport, usando puro hard core, pero lo bonito es que "Sale con formato...", pruebenlo y cualquier consulta... pos aqui estoy para servirlos...

package software_I.reportes;

/**
* Título: Proyecto2 de Software I
* Descripcion: Elaborar una aplicacion que maneje consultas QBE
* Copyright: Copyright (c) 2005
* Empresa: UAGRM
* @author Jesús Barbery Vargas
* @version 1.0
*/

/*
Librerias usadas para la generacion del reporte
*/
import java.util.Vector;
import java.util.Enumeration;
import java.util.Calendar;

import java.awt.Color;
import java.awt.geom.Point2D;
import java.awt.Dimension;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

import org.jfree.report.*;
import org.jfree.report.elementfactory.*;
import org.jfree.report.function.*;
import org.jfree.report.style.*;
import org.jfree.report.modules.gui.base.PreviewDialog;
import org.jfree.report.util.Log;
import org.jfree.ui.FloatDimension;

import java.sql.ResultSet;
import java.sql.SQLException;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

/**
* Clase utilizada para la generación de reportes en JFreeReport usando solo
* instrucciones API para crear el formato del Reporte a partir de una
* estructura QBE.
*/
public class Reporte {

private TableModel oData;
private JFreeReport oReporte;
private ResultSet oDatos;

public Reporte(ResultSet loDatos) {
oDatos = loDatos;
oReporte = new JFreeReport();
oReporte.setName("Reporte QBE Generado");
}

private void crearTabla()throws Exception
{
int liColCount = oDatos.getMetaData().getColumnCount();

//ARMAR LA TABLA
Vector lvColumNames = new Vector();
Vector lvDatos = new Vector();
Vector lvRow;
String lsValor, lsTipo;

for(int i = 0; i < liColCount; i++)
{
lsValor = oDatos.getMetaData().getColumnName(i+1);
lvColumNames.add(lsValor);
}

while(oDatos.next())
{
lvRow = new Vector();
for(int col = 0; col < liColCount; col++)
{
if (oDatos.getObject(col + 1) == null)
{
lvRow.add(null);
}else
{
lsTipo = oDatos.getMetaData().getColumnClassName(col + 1);
if (lsTipo.equals("java.lang.Long"))
{
lsValor = Long.toString(oDatos.getLong(col + 1));
}else if (lsTipo.equals("java.sql.Timestamp"))
{
lsValor = oDatos.getDate(col + 1).toString();
}else if (lsTipo.equals("java.lang.String"))
{
lsValor = oDatos.getString(col + 1).trim();
}else
{
lsValor = oDatos.getString(col + 1);
}

lvRow.add(lsValor);
}
}
lvDatos.add(lvRow);
}

oData = new DefaultTableModel(lvDatos, lvColumNames);
}

private void definirDatos()throws Exception
{
crearTabla();
oReporte.setData(oData);

/**Agrega campo Numero de Pagina**/
PageFunction loFunction = new PageFunction("num_Pag");
oReporte.addExpression(loFunction);
}


private PageHeader crearCabeceraPagina()
{
PageHeader loResult = new PageHeader();
loResult.getStyle().setStyleProperty(ElementStyleSheet.MINIMUMSIZE,
new FloatDimension(0, 18));

LabelElementFactory lblElemento = new LabelElementFactory();
lblElemento.setAbsolutePosition(new Point2D.Float(0, 0));
lblElemento.setFontName("Arial");
lblElemento.setFontSize(new Integer(10));
lblElemento.setBold(new Boolean(true));
lblElemento.setColor(Color.black);
lblElemento.setHorizontalAlignment(ElementAlignment.LEFT);
lblElemento.setMinimumSize(new FloatDimension(-100, -100));
lblElemento.setText("Gestion de Personal de la Empresa X");

loResult.addElement(lblElemento.createElement());


NumberFieldElementFactory fldPagina = new NumberFieldElementFactory();
fldPagina.setAbsolutePosition(new Point2D.Float(0, 0));
fldPagina.setMinimumSize(new Dimension(-100, -100));
fldPagina.setColor(Color.black);
fldPagina.setHorizontalAlignment(ElementAlignment.RIGHT);
fldPagina.setFormatString("Pag 0");
fldPagina.setFieldname("num_Pag");
fldPagina.setFontName("Arial");
fldPagina.setFontSize(new Integer(10));
fldPagina.setBold(new Boolean(true));

loResult.addElement(fldPagina.createElement());

loResult.addElement(StaticShapeElementFactory.createLineShapeElement
(null, Color.gray, new BasicStroke(1), new Line2D.Float(0, 11, 0, 11)));

return loResult;
}

private PageFooter crearPiePagina()
{
PageFooter loResult = new PageFooter();

loResult.getStyle().setStyleProperty(ElementStyleSheet.MINIMUMSIZE,
new FloatDimension(0, 18));

LabelElementFactory lblElemento = new LabelElementFactory();
lblElemento.setAbsolutePosition(new Point2D.Float(0, 2));
lblElemento.setFontName("Arial");
lblElemento.setFontSize(new Integer(10));
lblElemento.setBold(new Boolean(true));
lblElemento.setColor(Color.black);
lblElemento.setHorizontalAlignment(ElementAlignment.LEFT);
lblElemento.setMinimumSize(new FloatDimension(-100, -100));
lblElemento.setText("Reporte Generado por QBE");

loResult.addElement(lblElemento.createElement());

lblElemento.setHorizontalAlignment(ElementAlignment.RIGHT);
lblElemento.setText( "[" + Calendar.getInstance().getTime().toString() + "]");

loResult.addElement(lblElemento.createElement());

loResult.addElement(StaticShapeElementFactory.createLineShapeElement
(null, Color.gray, new BasicStroke(1), new Line2D.Float(0, 0, 0, 0)));

return loResult;
}

private ReportHeader crearCabeceraReporte()
{
ReportHeader loResult = new ReportHeader();

loResult.getStyle().setStyleProperty(ElementStyleSheet.MINIMUMSIZE,
new FloatDimension(0, 30));

LabelElementFactory lblElemento = new LabelElementFactory();
lblElemento.setAbsolutePosition(new Point2D.Float(0, 2));
lblElemento.setFontName("Impact");
lblElemento.setFontSize(new Integer(18));
lblElemento.setBold(new Boolean(true));
lblElemento.setUnderline(new Boolean(true));
lblElemento.setItalic(new Boolean(true));
lblElemento.setColor(Color.black);
lblElemento.setHorizontalAlignment(ElementAlignment.CENTER);
lblElemento.setVerticalAlignment(ElementAlignment.MIDDLE);
lblElemento.setMinimumSize(new FloatDimension(-100, 18));
lblElemento.setText("Resultado de la Consulta");

loResult.addElement(lblElemento.createElement());

return loResult;
}

private ReportFooter crearPieReporte()
{
ReportFooter loResult = new ReportFooter();

loResult.getStyle().setStyleProperty(ElementStyleSheet.MINIMUMSIZE,
new FloatDimension(0, 12));

LabelElementFactory lblElemento = new LabelElementFactory();
lblElemento.setAbsolutePosition(new Point2D.Float(0, 2));
lblElemento.setFontName("Times New Roman");
lblElemento.setFontSize(new Integer(12));
lblElemento.setBold(new Boolean(true));
lblElemento.setItalic(new Boolean(true));
lblElemento.setColor(Color.black);
lblElemento.setHorizontalAlignment(ElementAlignment.CENTER);
lblElemento.setMinimumSize(new FloatDimension(-100, 20));
lblElemento.setText("Fin de la Generación del Reporte");

loResult.addElement(lblElemento.createElement());

loResult.addElement(StaticShapeElementFactory.createLineShapeElement
(null, Color.black, new BasicStroke(0.1f),
new Line2D.Float(0, 0, 0, 0)));

return loResult;
}

private ItemBand crearDetalleReporte()
{
ItemBand loResult = new ItemBand();

TextFieldElementFactory fldDato = new TextFieldElementFactory();
LabelElementFactory lblDato = new LabelElementFactory();

//ARMANDO LA ETIQUETA
lblDato.setColor(Color.black);
lblDato.setFontSize(new Integer(10));
lblDato.setFontName("Courier");
lblDato.setBold(new Boolean(true));
lblDato.setMinimumSize(new FloatDimension(100, 11));
lblDato.setHorizontalAlignment(ElementAlignment.RIGHT);
lblDato.setVerticalAlignment(ElementAlignment.TOP);

//ARMANDO LOS DATOS
fldDato.setColor(Color.black);
fldDato.setFontSize(new Integer(10));
fldDato.setFontName("Courier");
fldDato.setMinimumSize(new FloatDimension(-100, 11));
fldDato.setHorizontalAlignment(ElementAlignment.LEFT);
fldDato.setVerticalAlignment(ElementAlignment.TOP);
fldDato.setNullString("-");

for (int liCol = 0; liCol < oDatos.getMetaData().getColumnCount(); liCol++)
{
//LLENANDO LA ETIQUETA
lblDato.setAbsolutePosition(new Point2D.Float(0, (liCol * 10) + 2));
lblDato.setText(oDatos.getMetaData().getColumnLabel(liCol + 1) + ":");

//LLENANDO LOS DATOS
fldDato.setAbsolutePosition(new Point2D.Float(145, (liCol * 10) + 2));
fldDato.setFieldname(oDatos.getMetaData().getColumnName(liCol + 1));

//AGREGANDO LOS COMPONENTES
loResult.addElement(lblDato.createElement());
loResult.addElement(fldDato.createElement());
}

return loResult;
}


public void mostrarVistaPreliminar()throws Exception
{
definirDatos();

oReporte.setPageHeader(crearCabeceraPagina());
oReporte.setPageFooter(crearPiePagina());

oReporte.setReportHeader(crearCabeceraReporte());
oReporte.setReportFooter(crearPieReporte());

oReporte.setItemBand(crearDetalleReporte());

PreviewDialog dialogo = new PreviewDialog(oReporte);

dialogo.setModal(true);
dialogo.pack();
dialogo.setSize(600, 500);
dialogo.show();
dialogo.requestFocus();
}

}

 
aclaracion...
Enviado por Jobev Lee el día 10 de julio de 2005

Ups... Hacer caso omiso al comentario que hace Referencia a QBE, son letritas que se me escaparon, de todas formas OJO.- es una clase para ser utilizada, asi que (No le busquen el MAIN), y genera el reporte a partir de un ResultSet....

Chau y espero que os sirva

 
Graicas
Enviado por nachoep el día 6 de noviembre de 2005

He usado tu clase y me genera los reportes genial, pero no logro entenderla bien. Podrías decirme u orientarme acerca de cómo cambiar el formato del reporte?, es decir, quiero el típico reporte en el que la primera fila sean los nombres de los atributos y a partir de ahí cada fila sea una tupla del resultSet. Gracias de antemano.

 
Re: Graicas
Enviado por Jobev Lee el día 29 de noviembre de 2005

Bueno, de que se puede.. se puede.. y no es problema, tendrias q' entenderle que se estan colocando los datos de manera vertica...

Si quieres que salga la cabecera, en el metodo que crea la cabecera del reporte, ahi define los titulos de las columnas...

Y simplemente tu distribucion hacelo de manera horizontal (OJO... que si miras cuando arma el detalle del reporte, se lo esta distribuyendo de manera vertical...:

//LLENANDO LOS DATOS
fldDato.setAbsolutePosition(new Point2D.Float(145, (liCol * 10) + 2));
fldDato.setFieldname(oDatos.getMetaData().getColumnName(liCol + 1));

..espero te sirva de ayuda y perdon por el atraso...

 



Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por ivi el día 4 de diciembre de 2007

Hola q tal? aqui con unas preguntas, la version de JfreeReport q baje no tiene todas las opciones que tiene la clase q publicaste aqui, quisiera saber si no me puedes enviar el link de donde la descargaste? o si puedes enviarme el .jar; gracias!

mi correo es: ivina16@gmail.com

 

Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por Ferran el día 16 de diciembre de 2005

Buenas,

Soy nuevo con esto del java y el jfree, y me ha surgillo un problemilla.

Añadí la clase con el código indicado, y obtuve el ResultSet tras conectar con mi base de datos.
Mi problema surge, en que no sé como pasarle este ResultSet al constructor desde mi JSP para poder ejecutar el programa. ¿Alguna idea?.

Mersi x adelantado.

 
Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por Jobev Lee el día 20 de diciembre de 2005

Bueno, pára empesar te adelanto, que no creo que funcione para una pagina jsp, ya que todas sus implementaciones son para trabajar sobre los controles AWT...

La verda, no creo que te sirva para lo que queres hacer, a menos que lo que podes hacer es hacer ejecutar una aplicacion java sobre el lado del cliente en el momento que se requiera el reporte, pero a eso, te recomendaria que elaboraras tus reportes sobre la misma pagina jsp.. usando HTML y javascript...

Vas a disculpar si no es de mucha ayuda lo que te doy...

Atte.

Jobev Lee

 
Re: Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por TIMON el día 23 de diciembre de 2005

ESTUVE PROBANDO LA CLASE Y AL MOMENTO DE COMPLILARLA SALE EL SIGUIENTE ERROR
C:\Documents and Settings\siscomputo\Mis documentos\GRAFICASJAVA\jfreereport\Reporte.java:28: cannot resolve symbol
symbol : class Log
location: package util
import org.jfree.report.util.Log;
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\JFreeReport.java:351: cannot resolve symbol
symbol : constructor HierarchicalConfiguration (org.jfree.util.Configuration)
location: class org.jfree.base.config.HierarchicalConfiguration
this.reportConfiguration = new HierarchicalConfiguration
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\modules\gui\base\NextPageAction.java:66: getKeyStroke(java.lang.String) in org.jfree.util.ResourceBundleSupport cannot be applied to (java.lang.String,int)
resources.getKeyStroke("action.forward.accelerator", 0));
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\modules\gui\base\PreviousPageAction.java:68: getKeyStroke(java.lang.String) in org.jfree.util.ResourceBundleSupport cannot be applied to (java.lang.String,int)
resources.getKeyStroke("action.back.accelerator", 0));
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\util\ReportConfiguration.java:65: cannot resolve symbol
symbol : constructor HierarchicalConfiguration (org.jfree.util.Configuration)
location: class org.jfree.base.config.HierarchicalConfiguration
super(globalConfig);
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\util\ReportConfiguration.java:77: setParentConfig(org.jfree.base.config.ModifiableConfiguration) in org.jfree.base.config.HierarchicalConfiguration cannot be applied to (org.jfree.util.Configuration)
setParentConfig(JFreeReportBoot.getInstance().getGlobalConfig());
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\JFreeReportBoot.java:234: cannot resolve symbol
symbol : method installDefaultLog ()
location: class org.jfree.base.log.DefaultLog
DefaultLog.installDefaultLog();
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\JFreeReportBoot.java:301: init() has protected access in org.jfree.util.Log
Log.getInstance().init();
^
C:\j2sdk1.4.1_01\lib\org\jfree\report\modules\gui\base\PreviewBaseModule.java:89: cannot resolve symbol
symbol : method getExtendedConfig ()
location: interface org.jfree.base.modules.SubSystem
if (subSystem.getExtendedConfig().getBoolProperty(SWING_TRANSLATE_KEY))

ESTUVE TRATANDO DE HUBICAR EN LA CARPETA LAS LIBERRIAS FALTANTES PERO NO SE ENCUENTRAN SI SABE DONDE LA PUEDO DESCARGAR LE AGRADECERIA O QUE DEBO HACER EN ESE CASO

 
Re: Re: Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por ivi el día 4 de diciembre de 2007

Una pregunta, encontraste las librerias q debias descargar e importar para q funcionara la clase?

 

Re: Re: Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por mquijada el día 25 de enero de 2006

disculpa pudiste resolver el problema con el
import org.jfree.report.util.Log; ?


 




Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por Maite el día 22 de enero de 2006

Estoy desesperada buscando alguna librería que exporte mis archivos .rtf a .pdf manteniendo el formato. ¿JFreeReport no permite esa trasnsformacion? Por lo que he visto solo permite cargar datos de tablas. Si es posible, ruego que me digais como. Y si sabeis de alguna libreria que lo permite también!! He probado con muchas y ya no se que hacer... Gracias

 
Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por Jobev Lee el día 24 de enero de 2006

Bueno, necesitas librerias??? para que???
lo que hace el JFreeReport es generar un PDF a partir de un conjunto de datos que se llenana en una tabla... Ahora ¿que es lo que requeris hacer y como es la cosa.. no te entiendo...

 
Re: Re: Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por munozo el día 30 de junio de 2006

Yo tambien tengo el mismo problema, necesito transformar el rtf a pdf. ¿Porque? pues bien en mi aplicación el usuario generar una plantilla en formato rtf, que salvo en la BBDD. Posteriormente tengo que recuperar esa plantilla y generar una remesa de documentos rtf. Pues bien estoy interesado en porder generar pdf a partir del rtf.
Muchas garcias

 



Re: Clase Ejemplo para hacer reportes con JFreeReport
Enviado por zamby el día 26 de mayo de 2006

Cuando creo...

PreviewDialog dialog=new PreviewDialog(oReporte);

Justo en esta linea me salta la excepcion no se porque razon falla y ademas tengo el problema de que en el constructor de PreviewDialog pasas el oReporte y este engloba muchisimas tareas en toda la clase...AYUDA!!!POR FAVOR!

 


Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados