Reportes en java con JasperReports e iReports

Este tutorial tiene la finalidad de facilitar la creación de un reporte en java  utilizando ireport y Jasperreport junto con Mysql
Subreportes y exportando a diferentes formatos
Tambien te puede interesar : Mi primer reporte en java con Eclipse e ireport Mysql
Lo primero que haremos es crear un proyecto en netbeans: Llamado capacitación


creando el proyecto



creando el proyecto

El siguiente paso es descargar la librería jasperreports de la pagina oficial:

http://jasperforge.org/projects/jasperreports


AGREGANDO LA LIBRERIA A NETBEANS

Creamos una nueva librería en Herramientas ->librerías

añadir libreria




Con el nombre jasperreport y agregamos tos los siguientes jars a la nueva libreria


Librerias reporte Java

Estas son las librerias necesarias :

barbecue-1.5-beta1.jar
barcode4j-2.0.jar
commons-beanutils-1.8.0.jar
commons-collections-2.1.1.jar
commons-digester-1.7.jar
commons-javaflow-20060411.jar
commons-logging-1.0.4.jar
groovy-all-1.7.5.jar
iText-2.1.7.jar
jasperreports-4.0.2.jar
jasperreports-applet-4.0.2.jar
jasperreports-fonts-4.0.2.jar
jasperreports-javaflow-4.0.2.jar
jcommon-1.0.15.jar
jdt-compiler-3.1.1.jar
jfreechart-1.0.12.jar
log4j-1.2.15.jar
mondrian-3.1.1.12687.jar
png-encoder-1.5.jar
poi-3.6.jar
rhino-1.7R1.jar
servlet.jar
xalan-2.7.1.jar

Ademas tambien debes descargar el driver JDBC de mysql-conector
Luego de este paso damos click izquierdo en el proyecto y le damos en propiedades y agregamos la librería que hemos creado



jasperreport


Le damos click en agregar librería y ya esta agregada nuestra biblioteca




CREANDO ENTIDAD DE PERSISTENCIA

Para crear la entidad de persistencia le damos click izquierdo al proyecto nuevo -> Persistence
->persistence Unit

Le damos en next y le ponemos un nombre yo le puse : capacitacionPU
Si no tienes creada la conecion la creas donde dice databases connection ,
Escojamos el jar este caso mysql y nos pedirá usuario password host y database.
Le damos en text connection para ver si todo esta bien le damos en finalizar y ya tenemos nuestra entidad de persistencia


conexion

entidad de persistencia



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;
}

    
}

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
datasource

Luego Clic en New Luego

Jdbc Connection
Le damos en Next y configuramos nuestra conexión

Configuración conexión Ireport

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
Elementos ireport




creacion del reporte





Consulta para el reporte


select * from empleado ;









Asi quedaría el reporte


vista del reporte

Probamos el reporte


vista del 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


Luego lo llamamos desde la clase capacitación

package capacitacion;

import java.io.File;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.JFileChooser;
import utilidades.Reportes;
import java.util.Calendar;
import javax.swing.JOptionPane;
import org.apache.log4j.BasicConfigurator;

public class Capacitacion implements Runnable{
     /*Declaramos una variables de tipo JFileChoser
     * para escoger la ruta donde guradaremos el archivo*/
 private static JFileChooser  guardar ;
 public Capacitacion(){
     /*Configuracion basica de los log*/
    BasicConfigurator.configure();
 }

    
    public static void main(String[] args)  {
            //Inicializamos el Objeto
            guardar= new JFileChooser();
            Calendar cal = Calendar.getInstance();
            /*Nombre que saldra por defecto del archivo*/
           guardar.setSelectedFile(new File("Reportes"+
                   cal.get(Calendar.YEAR)
                   +"-"+cal.get(Calendar.MONTH)
                   +"-"+cal.get(Calendar.DAY_OF_MONTH)));  
           
            int selecion=0;
            //Accion que ejecuta el Usuario
            selecion=guardar.showSaveDialog(null);
if(selecion==JFileChooser.APPROVE_OPTION){
            //Cuando selecciona aceptar
            Capacitacion capacitacion= new Capacitacion();
            // Ejecutamos el hilo para poder seguir utilizando la aplicación
            Thread hilo = new Thread(capacitacion);
            hilo.start();
             }else if(selecion==JFileChooser.CANCEL_OPTION){
             // Cuando cancela
             JOptionPane.showMessageDialog(null,"Operacion Cancelada.","Informacion",JOptionPane.INFORMATION_MESSAGE);
             }else if(selecion==JFileChooser.ERROR_OPTION){
             // Cuando ocurre un error
             JOptionPane.showMessageDialog(null,"Debe seleccionar un nombre de archivo valido.","Error",JOptionPane.ERROR_MESSAGE );
             }
    }
    @Override
    public void run() {

        start();


}
    public void start(){
     
            EntityManagerFactory emf= Persistence.createEntityManagerFactory("capacitacionPU");
            EntityManager em=emf.createEntityManager();
            em.getTransaction().begin();
            Connection con;
            Map mp= new HashMap<Object, Object>();
            con=em.unwrap(Connection.class);
            em.getTransaction().commit();
            Reportes reporte= new Reportes();
        try {
           
           /*Le pasamos la ruta donde quedara guardado nuestro reporte*/
            reporte.jasperReport(guardar.getSelectedFile().toString(),Capacitacion.class.getResourceAsStream("/reportes/AsistenciaCapacitaciones.jrxml"), mp, con);
        } catch (Exception ex) {
            Logger.getLogger(Capacitacion.class.getName()).log(Level.SEVERE, null, ex);
        }finally{
            try {
                con.close();
            } catch (SQLException ex) {
                Logger.getLogger(Capacitacion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
    }
}



























Query para la creacion de la base de datos




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
 INTO `dependencia` (`dep_id`, `dep_des`) VALUES (1, 'Sistemas');

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);


Mi primer Reporte en Ireport usando Java , Maven y NetBeans Generar PDF Versión WEB

Mi primer Reporte en Ireport usando Java , Maven y NetBeans Generar PDF Versión WEB Estructura del proyecto Listado de rutas de car...