package reportes; import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.*; import net.sf.jasperreports.view.save.JRPdfSaveContributor.*; import net.sf.jasperreports.view.JRViewer.*; import net.sf.jasperreports.view.save.JRMultipleSheetsXlsSaveContributor.*; /** * * @author Carlos Martinez */ public class IniciarReporte { Connection conn; public IniciarReporte(){ try { Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection(URL_MYSQL,USUARIO_MYSQL,CLAVE_MYSQL); } catch (SQLException ex) { Logger.getLogger(IniciarReporte.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(IniciarReporte.class.getName()).log(Level.SEVERE, null, ex); } } public void MiConsultaN(){ try{ String archivo = System.getProperty ("user.dir")+"\\src\\reportes\\MiReporte.jasper"; System.out.println("Cargando desde: " + archivo); if(archivo == null){ JOptionPane.showMessageDialog(null,"Error al generar reporte, verifique impresora\n", "Generar Reporte",JOptionPane.ERROR_MESSAGE); } JasperReport masterReport= null; try { masterReport= (JasperReport) JRLoader.loadObject(archivo); } catch (JRException e) { System.out.println("Error cargando el reporte maestro: " + e.getMessage()); JOptionPane.showMessageDialog(null,"Error al generar reporte, verifique impresora\n","Generar Reporte",JOptionPane.ERROR_MESSAGE); } JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,null,conn); JasperViewer jviewer= new JasperViewer(jasperPrint,false); jviewer.setTitle("Titulo de mi Reporte"); jviewer.setVisible(true); }catch (Exception j){ System.out.println("Mensaje de Error:"+j.getMessage()); } } }Y para llamarlo colocamos en cualquier evento lo siguiente:
IniciarReporte jasper = new IniciarReporte(); jasper.MiConsultaN();Lo mas importante a destacar es lo siguiente: "System.getProperty ("user.dir")+"\\src\\reportes\\MiReporte.jasper", esto es para indicarle al programa donde esta el archivo del reporte, una vez creado el programa y compilado, deberemos copiar dentro de la carpeta el paquete o archivos de reportes y cambiar la línea de código por la siguiente: "System.getProperty ("user.dir")+"\\carpeta\\MiReporte.jasper", con esto ya estamos listos para generar los reportes.
Recibe notificaciones por correo
26 Comentarios
Escribir ComentarioHola, en principio muy bueno el tutorial. Te quiero consultar sobre un problema que estoy teniendo: ya generé mi reporte lo tengo asignado y lo llamo, pero cuando lo quiero ver desde una terminal se me abre en el servidor y no en la terminal que estoy ejecuntando la aplicación por ende no lo puedo ver (el reporte se abre/muestra en el servidor y no en la terminal donde estoy ejecutando la aplicación). Sim e podrías dar una mano con esto te agradecería. Desde ya muchas gracias,
ResponderHector
Hola, con respecto a que lo ejecutas desde el servidor entonces estas utilizando un acceso directo o ASP, si utilizas un acceso directo entonces debes tener en el terminal las carpetas con los archivos del reporte o especificar su ruta desde una conexión en red, en esta línea de código es donde se hace:
ResponderSystem.getProperty ("user.dir")+"\\src\\reportes\\MiReporte.jasper";
Quiere decir que en la carpeta desde donde ejecuto el sistema (la ruta de la barra de direcciones) tengo otra que se llama "src", dentro otra con nombre "reportes" y dentro el archivo "MiReporte.jasper"...
Eso es lo primero que entendí, lo segundo que entiendo es que le das a generar reporte y se abre alla y no aquí, pero es extraño, como llamas al sistema??
Saludos
hola amigo adapte tu codio a un ejemplo que tengo, cuando le doy en generar reporte me sale k no tiene paginas, y el reporte en relidad si las tiene sabes pk me sale eso?
ResponderHAA SE ME PASABA DESPUES K ME MUESTRA K NO TIENE PAGINAS ME SALE ESTE ERROR
ResponderCargando desde: D:\Documents\TEC\6 Semestre\Desarrollo De Sistemas\Version 1.7\Biblioteca_Final\Biblioteca_ramiro\src\reportes\REPORTES.jasper
29/12/2010 04:52:18 PM net.sf.jasperreports.engine.query.JRJdbcQueryExecuter
ADVERTENCIA: The supplied java.sql.Connection object is null.
Hola Juan, disculpa la demora en responder pero me encontraba ausente, a lo mejor será alguna consulta SQL que estés realizando con X parámetro y no se ha definido, si puedes postear el código de la consulta sería bueno, saludos.
ResponderHola, tengo un problema.
ResponderPrimero, cree un reporte, le doy vista previa y todo sale perfecto. Luego le doy CompileReport y me genera el archivo .jasper, pero al momento de mostrar el Objeto JasperViewer me sale que el reporte no tiene paginas. El reporte es un reporte sencillo sin parametros, solo muestra los datos de una tabla.
try{
//direccion del archivo JASPER
URL in = this.getClass().getResource("report1.jasper");
reporte = (JasperReport) JRLoader.loadObject( in );
reporte_view= JasperFillManager.fillReport( reporte, null, con.getConnection() );
JasperViewer jviewer = new JasperViewer(reporte_view,false);
jviewer.setVisible(true);
//terminamos la conexion a la base de datos
// con.desconectar();
}catch (JRException E){
E.printStackTrace();
}
Hola... disculpa la demora, si es un reporte normal sin parámetros, con la sentencia SQL y los campos bien ordenados deberías poder verlo sin problemas, de cualquier forma postea el log del error para ver donde esta el problema... Saludos!!!
ResponderBuenas..
ResponderSe puede crear una instancia a un report creado en iReport (.jasper) desde una pagina en asp.net
Claro que se puede, recuerda que esto es una clase cualquiera a la que se llama mediante un método, incluso puedes hacerlo si quieres dinámico, de modo que el método de la impresión del reporte reciba un parámetro "String" el cual utilizaría para definir el nombre del reporte, así solo tendrías un único método
ResponderPara llamarlo sería algo así (en caso de envíarle el String):
String reporte = "MiReporte.jasper";
IniciarReporte jasper = new IniciarReporte();
jasper.MiConsultaN(reporte);
Cambiando la línea que define la ruta del archivo o reporte por algo como esto:
String archivo ="direccion/del/archivo/"+reporte;
Hola que tal, tengo un gran problema, tngo q llamar un reporte desde una jsp, desde una clase, que debería de cambiar de este código para que me fucione en la web. Gracias
Responder¿Como estas? Verás, si estas usando JSP lo que debes modificar no es mucho.... Fijat en este ejemplo sencillo
ResponderFile reportFile = new File(application.getRealPath("MI_REPORTE.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();
hola de nuevo, gracias por la ayuda, me costo un poco pero cabe resaltar que fue por no adjuntar todas las librerías necesarias de jasperreport, pero ya funciona, gracias por la ayuda!!
ResponderSos grande me sirvio mucho !!!
ResponderHola, yo solo tengo una duda, puedo invocar un reporte creado en ireport dentro de una aplicación creada en asp.net??????????''
ResponderAlguien me puede pasar las librerias necesarias para usar Ireport dentro de asp.net.
ResponderSe los agradeceria muchisimo.....
Hola, supongo eres el del comentario anterior, verás, esto no es un foro, es un blog... Ya dejaste una pregunta y pronto publicare como hacerlo, mientras puedes conseguir la info necesaria aquí: http://www.javaworld.com/community/node/1468.... Saludos!!
ResponderMuchisimas gracias..............
ResponderSaludos, he estado usando tu codigo y al parecer conecta pero me da un error yo estoy usando access como base de datos un jpanel de los que se desarrollan con drag and drop(soy un total novato) y llamo el metodo desde un boton, en el preview del ireport trabaja bien pero no me abre desde el boton. Te agradeceria cualquier ayuda.
ResponderEsto es parte del log
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
Saludos nuevamente ya resolvi era que me faltaban las librerias, es un gran blog me sirvio de mucha ayuda llevo mas de tres semanas buscando en la web. La direccion de las librerias que me faltaban es esta por si le hacen falta a alguien http://commons.apache.org/logging/download_logging.cgi
ResponderMe alegra que funcionara, disculpa la demora en responder pero no estuve el fin de semana disponible... Cualquier otra duda no dudes en dejar un comentario... Saludos!!!
ResponderUna Pregunta luego de compilado el programa, como debo de manejar el directorio para que el programa compilado encuentre el reporte.
ResponderEsta connectado a una base de datos en access le agradeceria si me puede ayudar con esto.
En la variable que contiene la ruta del reporte (archivo) puedes hacer lo siguiente... Crea una carpeta dentro de tu directorio principal del programa, sistema o proyecto y llamala "reportes", entonces haces algo como esto:
ResponderString slash = System.getProperty("file.separator"), directorio = System.getProperty ("user.dir");
String archivo = directorio+slash+"reportes"+slash+"Mi_Archivo.jasper";
Espero se entienda.... Saludos!!
Gracias. Me trabaja en netbeans pero fuera de netbeans no. Pero gracias por tu tiempo.
ResponderLo mas seguro es que no te funciona por esta línea:
ResponderString archivo = System.getProperty ("user.dir")+"\\src\\reportes\\MiReporte.jasper";
Debes cambiarla a la ruta de tu reporte, por ejemplo, si tienes los reportes dentro de la misma carpeta del proyecto entonces debes colocarlo así:
String archivo = System.getProperty("user.dir")+"\\MiReporte.jasper";
O creas dentro de tu proyecto una carpeta llamada "src", dentro de esta "reportes", y en ella colocas todos los reportes... Saludos!!
Hola te comento que quiero usar Reportes para una aplicacion que estoy haciendo es un reloj checador pero no tengo idea de como poder generar reportes desde la aplicacion ya corriendo suponiendo que quiero un reporte semanal de la fecha X a la Y que el usuario pueda poner la fecha que quiere que comprenda el reporte y este se mande a una consulta para que el reporte pueda ser hecho por medio de consultas SQl me podrias ayuda
ResponderPara hacer lo que quieres de forma rápida y sencilla necesitas lo siguiente:
Responder- Crea la aplicación en cuestión usando consultas SQL.
http://carlitoxenlaweb.blogspot.com/2011/09/consultas-sql-dinamicas-en-java.html
- Muestra los datos que quieres llevar a físico (papel) en una tabla
http://carlitoxenlaweb.blogspot.com/2008/12/mostrar-datos-de-mysql-en-tablas.html
- Pasa esa tabla en forma de arreglo o lista a tu clase de iReport, sin utilizar SQL, simplemente recorre el arreglo desde iReport
http://carlitoxenlaweb.blogspot.com/2010/09/reportes-en-java-parte-iv-parametros.html
Este último paso puedes cambiarlo por pasar la cadena SQL que ejecutas para mostrar la tabla y la ejecutas como SQL en el reporte
PD: si quieres mas info en el blog hay muchos ejemplos, sino comienza con el código y deja tus dudas de que no te sale bien... Saludos y suerte!!!!
Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión