Tambien te Puede interesar: Reportes en java con JasperReports e iReports - Netbeans
Empezaremos abriendo nuestro editor eclipse JUNO que fue el que utilice para crear este pequeño ejemplo, Primiero nos vamos a File --> Java Project
En Project Name Le ponemos el nombre a nuestro proyecto en mi caso le puse reportesEclipse le damos en finish y listo.
Despues de hacer este paso debemos descargar la ultima version del programa Ireport y las librerias jasperreport.
Descargar:
Ireport Designer
JasperReports Library
Luego de descargados nos vamos a Ireport y empezamos a diseñar nuestro nuestro reporte
CREACION DEL REPORTE
Abrimos irreport y lo primero que haremos es crear un Datasource pero como lo creamos pues fácil
aquí una imagen ilustrativa le damos clic
Luego Clic en New Luego
Le damos en Next y configuramos nuestra conexión
Cuando hagamos esto le damos en test para probar que todo ha salido Bien luego en Save.
creamos un nuevo reporte AsistenciaCapacitaciones dentro de un nuevo paquete llamado reportes
Consulta para el reporte
select * from empleado ;
Asi quedaría el reporte
Probamos el reporte
Este es el codigo fuente del archivo jrxml
<?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <queryString> <![CDATA[select * from empleado]]> </queryString> <field name="emp_id" class="java.lang.Integer"/> <field name="emp_nom" class="java.lang.String"/> <field name="emp_ape" class="java.lang.String"/> <field name="emp_car" class="java.lang.String"/> <field name="emp_dep_id" class="java.lang.Integer"/> <background> <band splitType="Stretch"/> </background> <title> <band height="79" splitType="Stretch"> <staticText> <reportElement x="0" y="25" width="555" height="29"/> <textElement textAlignment="Center"> <font fontName="Arial" size="18"/> </textElement> <text><![CDATA[Empleados de la capacitacion]]></text> </staticText> </band> </title> <pageHeader> <band splitType="Stretch"/> </pageHeader> <columnHeader> <band height="40" splitType="Stretch"> <staticText> <reportElement x="0" y="0" width="100" height="20"/> <textElement/> <text><![CDATA[emp_id]]></text> </staticText> <staticText> <reportElement x="128" y="0" width="100" height="20"/> <textElement/> <text><![CDATA[emp_nom]]></text> </staticText> <staticText> <reportElement x="265" y="1" width="100" height="20"/> <textElement/> <text><![CDATA[emp_car]]></text> </staticText> </band> </columnHeader> <detail> <band height="33" splitType="Stretch"> <textField> <reportElement x="0" y="0" width="100" height="20"/> <textElement/> <textFieldExpression class="java.lang.Integer"><![CDATA[$F{emp_id}]]></textFieldExpression> </textField> <textField> <reportElement x="128" y="0" width="100" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{emp_nom}]]></textFieldExpression> </textField> <textField> <reportElement x="265" y="0" width="100" height="20"/> <textElement/> <textFieldExpression class="java.lang.String"><![CDATA[$F{emp_car}]]></textFieldExpression> </textField> </band> </detail> <columnFooter> <band splitType="Stretch"/> </columnFooter> <pageFooter> <band splitType="Stretch"/> </pageFooter> <summary> <band splitType="Stretch"/> </summary> </jasperReport>
El reporte lo vamos a guardar en un paquete llamado reportes
Cuando ya terminemos nuestro diseño en ireport Nos vamos a eclipse Clic izquierdo en el Proyecto
Properties->Java Build Path-> Add External Jars y empezamos agregar los . jar necesarios para la creación del reporte desde java.
Los jar necesarios son:
barbecue.jar
barcode4j.jar
commons-beanutils.jar
commons-collections.jar
commons-digester.jar
commons-javaflow.jar
commons-logging.jar
groovy-all.jar
iText.jar
jasperreports.jar
jasperreports-applet.jar
jasperreports-fonts.jar
jasperreports-javaflow.jar
jcommon.jar
jdt-compiler.jar
jfreechart.jar
log4j.jar
mondrian.jar
png-encoder.jar
poi.jar
rhino.jar
servlet.jar
xalan.jar
Ademas también debes descargar el driver JDBC de mysql-conector
Luego creamos un paquete llamado utilidades y dentro de le una clase llamada Reportes:
La cual contiene los siguientes métodos:
package utilidades; //import com.lowagie.text.pdf.PdfWriter; import java.io.FileNotFoundException; import java.io.InputStream; import java.io.Serializable; import java.sql.Connection; import java.util.Locale; import java.util.Map; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRPdfExporterParameter; import net.sf.jasperreports.engine.export.JRXlsAbstractExporterParameter; import net.sf.jasperreports.engine.export.JRXlsExporter; import net.sf.jasperreports.engine.export.JRXlsExporterParameter; import net.sf.jasperreports.engine.util.JRSaver; import net.sf.jasperreports.view.JasperViewer; public class Reportes implements Serializable{ private JasperReport reporte; private JasperPrint print; //exportar reporte a axcel public void reporteExcelImpresion(InputStream rutaJrxml,String rutaArchivoXLS,Map<String, Object> parametros,Connection conexion) throws JRException, FileNotFoundException{ this.reporte=JasperCompileManager.compileReport(rutaJrxml); //luego ponemos los parametros que necesitamos: print = JasperFillManager.fillReport(this.reporte, parametros, conexion); JRXlsExporter exportador = new JRXlsExporter(); exportador.setParameter(JRExporterParameter.JASPER_PRINT,print); exportador.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,rutaArchivoXLS); exportador.setParameter(JRExporterParameter.IGNORE_PAGE_MARGINS,true); exportador.setParameter(JRXlsAbstractExporterParameter.IS_WHITE_PAGE_BACKGROUND, false); exportador.setParameter(JRXlsAbstractExporterParameter.IS_IGNORE_CELL_BORDER,false); exportador.setParameter(JRXlsAbstractExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_COLUMNS,true); exportador.setParameter(JRXlsExporterParameter.IS_DETECT_CELL_TYPE ,true); exportador.setParameter(JRXlsExporterParameter.IS_FONT_SIZE_FIX_ENABLED,true); exportador.exportReport(); } //metodo para generar el reporte en pdf si que se puedan copiar las imagenes ni el texto public boolean jasperReport(String ruta, InputStream dataSourceName, Map<String, Object> params,Connection conn) throws ClassNotFoundException, JRException { this.reporte=JasperCompileManager.compileReport(dataSourceName); this.print = JasperFillManager.fillReport(this.reporte, params, conn); if(this.print.getPages().isEmpty()){ return false; } //int permisos =PdfWriter.ALLOW_PRINTING; //Esta clase es la encargada de exportar el archivo a pdf final JRExporter jtrtf= new JRPdfExporter(); jtrtf.setParameter(JRPdfExporterParameter.IS_ENCRYPTED, Boolean.TRUE); jtrtf.setParameter(JRPdfExporterParameter.IS_128_BIT_KEY, Boolean.TRUE); //jtrtf.setParameter(JRPdfExporterParameter.PERMISSIONS, permisos); jtrtf.setParameter(JRExporterParameter.JASPER_PRINT, this.print); //Gurdamos una copia en el computador Ejemplo c:/reportes.jrprint JRSaver.saveObject(this.print,ruta+".jrprint"); //Gurdamos una copia en el computador Ejemplo c:/reportes.pdf jtrtf.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, ruta+".pdf"); //este metodo exporta a los diferentes formatos en este caso pdf jtrtf.exportReport(); //Metodo que se encarga de mostrar el reporte en la pantalla JasperViewer.viewReport(this.print,false,Locale.getDefault()); return true; } }
Esta es la clase encargada de realizar la conexión
package utilidades; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; /** * * @author jesus cabarcas */ /*Creamos la clase */ public class Conexion { private Connection conexion; // Abstrae una conexion a la base de datos private String usuario = "root"; // usuario con permisos para conectarse a Base de datos private String password = "123456"; // contraseña del usuario que se puede conectar a la base de datos private String driver = "com.mysql.jdbc.Driver"; // Clase del Driver de jConnector private String beseDatos="jdbc:mysql://localhost:3306/capacitaciones";//cadena de coneccion private static Conexion instancia; /** Crea a new instancia de Conexion */ public static Conexion getInstancia (){ if(Conexion.instancia==null){ Conexion.instancia=new Conexion(); } return instancia; } /** Metodo que se encarga de conectar a la base de datos*/ public void conectar()throws Exception { //si la conecion es null nos conectamos if(this.getConexion()!=null){ return; } else if(this.getConexion() == null){ try { Class.forName(this.getDriver()) ; // obtine una istancia de la clase Diver // establece la conexion con el Diver jconector y este a su vez con la base de datos this.setConexion(DriverManager.getConnection(this.getBeseDatos(), this.getUsuario(), this.getPassword())); } catch (SQLException ex) { throw new Exception("ERROR AL CONECTARCE CON LA BASE DE DATOS"); } catch (ClassNotFoundException ex) { throw new Exception("Clase no encontrada"); } } } /** desconecta de la base de datos */ public void desconectar()throws Exception{ if(this.getConexion()==null) this.setConexion(null); } public Conexion() { } /*Metodos getter y setter*/ public Connection getConexion() { return conexion; } public void setConexion(Connection conexion) { this.conexion = conexion; } public String getUsuario() { return usuario; } public void setUsuario(String usuario) { this.usuario = usuario; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } public String getBeseDatos() { return beseDatos; } public void setBeseDatos(String beseDatos) { this.beseDatos = beseDatos; } }
Este es el método principal donde se generara el reporte
package capacitacion; import java.sql.SQLException; import java.util.HashMap; import utilidades.Conexion; import utilidades.Reportes;import org.apache.log4j.BasicConfigurator;public class Capacitacion { public static void main(String[] args) throws SQLException { BasicConfigurator.configure();
// Creamos un objeto de la clase conexion Reportes reporte= new Reportes(); try { // llamamos al metodo get conection que nos devuelve un Objeto connection HashMap<String, Object> mp= new HashMap<String, Object>(); // Lo exporta a pdf y lo muestra en la pantalla Conexion.getInstancia().conectar(); reporte.jasperReport("D:/reportes.pdf", Capacitacion.class.getResourceAsStream("/reportes/AsistenciaCapacitaciones.jrxml") , mp, Conexion.getInstancia().getConexion()); Conexion.getInstancia().desconectar(); // Lamamos el metodo para conectarnos a la base de datos Conexion.getInstancia().conectar(); // Llamamos el metodo que exporta a excel y lo guar en el pc en mi caso en E reporte.reporteExcelImpresion( Capacitacion.class.getResourceAsStream("/reportes/AsistenciaCapacitaciones.jrxml") ,"D:/reportes.xls" ,mp, Conexion.getInstancia().getConexion()); // Soltamos la conexion Conexion.getInstancia().desconectar(); } catch (Exception ex) { System.out.print(ex.toString()); }finally{ try { Conexion.getInstancia().desconectar(); } catch (Exception e) { System.out.print(e.toString()); } } } }
CREATE SCHEMA IF NOT EXISTS `capacitaciones` DEFAULT CHARACTER SET latin1 ; USE `capacitaciones` ; -- ----------------------------------------------------- -- Table `capacitaciones`.`asistencia` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`asistencia` ( `asi_id` INT(11) NOT NULL AUTO_INCREMENT , `asi_cap_id` INT(11) NOT NULL , `asi_emp_id` INT(11) NOT NULL , PRIMARY KEY (`asi_id`) , INDEX `cap_id` (`asi_cap_id` ASC) , INDEX `emp_id` (`asi_emp_id` ASC) ) ENGINE = InnoDB AUTO_INCREMENT = 4 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `capacitaciones`.`entidad` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`entidad` ( `ent_id` INT(11) NOT NULL AUTO_INCREMENT , `ent_des` VARCHAR(130) NOT NULL , `ent_tip` INT(11) NULL DEFAULT NULL , PRIMARY KEY (`ent_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 2 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `capacitaciones`.`estado` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`estado` ( `est_id` INT(11) NOT NULL AUTO_INCREMENT , `est_des` VARCHAR(45) NULL DEFAULT NULL , PRIMARY KEY (`est_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 2 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `capacitaciones`.`capacitacion` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`capacitacion` ( `cap_id` INT(11) NOT NULL AUTO_INCREMENT , `cap_tem` VARCHAR(255) NULL DEFAULT NULL , `cap_fecIni` DATETIME NOT NULL , `cap_fecFin` DATETIME NOT NULL , `cap_obs` VARCHAR(255) NULL DEFAULT NULL , `cap_fecReg` DATETIME NOT NULL , `cap_dir` VARCHAR(255) NULL DEFAULT NULL , `cap_est_id` INT(11) NOT NULL , `cap_ent_id` INT(11) NOT NULL , PRIMARY KEY (`cap_id`) , INDEX `cap_ent_id` (`cap_ent_id` ASC) , INDEX `cap_est_id` (`cap_est_id` ASC) , CONSTRAINT `cap_ent_id` FOREIGN KEY (`cap_ent_id` ) REFERENCES `capacitaciones`.`entidad` (`ent_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `cap_est_id` FOREIGN KEY (`cap_est_id` ) REFERENCES `capacitaciones`.`estado` (`est_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB AUTO_INCREMENT = 6 DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `capacitaciones`.`dependencia` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`dependencia` ( `dep_id` INT(11) NOT NULL AUTO_INCREMENT , `dep_des` VARCHAR(255) NOT NULL , PRIMARY KEY (`dep_id`) ) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1; -- ----------------------------------------------------- -- Table `capacitaciones`.`empleado` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `capacitaciones`.`empleado` ( `emp_id` INT(11) NOT NULL , `emp_nom` VARCHAR(60) NOT NULL , `emp_ape` VARCHAR(60) NOT NULL , `emp_car` VARCHAR(120) NOT NULL , `emp_dep_id` INT(11) NOT NULL , PRIMARY KEY (`emp_id`) , INDEX `dep_id` (`emp_dep_id` ASC) , CONSTRAINT `dep_id` FOREIGN KEY (`emp_dep_id` ) REFERENCES `capacitaciones`.`dependencia` (`dep_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB DEFAULT CHARACTER SET = latin1;
Luego insertamos estos dos empleados para ver el resultado
INSERT
INSERT INTO `empleado` (`emp_id`, `emp_nom`, `emp_ape`, `emp_car`, `emp_dep_id`) VALUES (73222566, 'juan pablo', 'morales', 'Jefe de sistemas', 1), (75532012, 'carlo', 'Martinez', 'Auxiliar de Sistemas', 1);
11 comentarios:
log4j:WARN No appenders could be found for logger
(org.activemq.transport.tcp.TcpTransportChannel).
log4j:WARN Please initialize the log4j system properly.
Como Elimino o soluciono esta falla
hola muy buenas.
tienes que importar la siguiente librería
import org.apache.log4j.BasicConfigurator;
Luego en el metodo por defecto de la clase lo inicializas
Ejemplo:
public class Prueba{
public Prueba(){
BasicConfigurator.configure();
}
}
Hola, quisiera saber si has logrado crear reportes usando datasources customizados en codigo sin conexiones a bd(reporte hola mundo), otra cosa solo importas las librerias o configuras a eclipse con otros plugin extras? Muchas gracias, saludos
Solamente importo las librerías, y con respecto a los datasources customizados no los he probado porque donde trabajo nunca no los han pedido pero son fáciles de implementar.
en tu ejemplo donde lo aplico.
hola muy buenas ya realice el cambio en la clase capacitación.
Es allí donde puedes aplicar el cambio
Buenas Noches
Hola
profesor me puedes colaborar con el código fuente en eclipse gracias por tu colaboración
0 [main] DEBUG net.sf.jasperreports.engine.xml.JRXmlDigesterFactory - Using SAX parser factory class net.sf.jasperreports.engine.xml.JRReportSaxParserFactory
464 [main] DEBUG net.sf.jasperreports.extensions.DefaultExtensionsRegistry - Loading JasperReports extension properties resource jar:file:/D:/code/reportes/Herramientas%20y%20Jar%20para%20Reportes/jasperreports-4.7.1.jar!/jasperreports_extension.properties
489 [main] DEBUG net.sf.jasperreports.extensions.DefaultExtensionsRegistry - Instantiating registry of type net.sf.jasperreports.governors.GovernorExtensionsRegistryFactory for property net.sf.jasperreports.extension.registry.factory.governor
son bastantes las fallas
como hago para inserta en el paquete de reporte el asistentecapacitacion en eclipse
Hola buenas te dejo los fuentes lo demás es importar las librerías de jasperreport.
Fuentes Reporte
Gracias Profe por tu colaboracion
Buenas tardes me sale este error
package net.sf.jasperreports.engine does not exist
[javac] import net.sf.jasperreports.engine.JRException;
Qué puedo hacer? Gracias por la respuesta
Hola andres veo que estan compilando desde consola lo que debes hacer es lo siguiente
esto es en Windows entras a cmd
<---------------------------------------------->
set classpath=%classpath%;D:\librerias\barbecue-1.5-beta1.jar;D:\librerias\barcode4j-2.0.jar;D:\librerias\bouncycastle.jar;D:\librerias\commons-beanutils-1.8.0.jar;D:\librerias\commons-collections-2.1.1.jar;D:\librerias\commons-digester-1.7.jar;D:\librerias\commons-javaflow-20060411.jar;D:\librerias\commons-logging-1.0.4.jar;D:\librerias\groovy-all-1.7.5.jar;D:\librerias\iText-2.1.7.jar;D:\librerias\jasperreports-4.0.2.jar;D:\librerias\jasperreports-applet-4.0.2.jar;D:\librerias\jasperreports-fonts-4.0.2.jar;D:\librerias\jasperreports-javaflow-4.0.2.jar;D:\librerias\jcommon-1.0.15.jar;D:\librerias\jdt-compiler-3.1.1.jar;D:\librerias\jfreechart-1.0.12.jar;D:\librerias\log4j-1.2.15.jar;D:\librerias\mondrian-3.1.1.12687.jar;D:\librerias\png-encoder-1.5.jar;D:\librerias\poi-3.6.jar;D:\librerias\rhino-1.7R1.jar;D:\librerias\servlet.jar;D:\librerias\substance.jar;D:\librerias\xalan-2.7.1.jar;
<--------------------------------------------------------------------------------------------------------->
Nota: Debes colocar los jar que vas a utilizar con el classpath en mi caso yo utilice D:librerias
Después es solo compilar le digo que compile todos los .java y los guarde en D:reporte_p
C:\Users\Usuario\workspace\reportesEclipse\src>javac capacitacion\*.java utilidades\*.java -d D:\reporte_p
Publicar un comentario