Compilar reportes de iReport desde Java

   Hace algún tiempo explicaba como enlazar los reportes de ireport en java, pero lo hacia utilizando un archivo compilado que generaba el iReport cuya extensión es ".jasper", hasta ahora todo bien, el problema viene cuando modificamos nuestro reporte, puesto que debemos compilarlo y así tener una vez más el archivo jasper actualizado, llegando a ocupar en nuestra carpeta de reportes, no solo el "jrxml" que es el archivo xml del reporte, sino también los ".jasper".

   Esto tiende a ser un poco molesto ya que tendremos 2 archivos por cada reporte y la verdad no es nada cómodo el entrar a la carpeta de reportes cuando se tienen mas de 200. Entonces la solución es utilizar el xml del reporte directamente.

   No explicare mucho ya que todo esta explicado en las siguientes entradas:


   Entonces nuestro código sería el siguiente:
String archivo = "Mi_Reporte.jrxml";
JasperReport masterReport= JasperCompileManager.compileReport(archivo);
JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametros,conexionSQL);
JasperViewer jviewer= new JasperViewer(jasperPrint,false);

   Explicando cada cosa tenemos que:

   - archivo: variable de la ruta donde se ubica el archivo "jrxml".

   - masterReport: utilizamos el compilador interno para que el mismo método se encargue de compilar y generar la vista, en vez de cargar la hecha como lo hacíamos antes.

   - jasperPrint: con esto enviamos por pantalla el resultado de la compilación, utilizando el reporte maestro, los parámetros y los datos de la conexión con la base de datos SQL, en caso de no usar nada de eso simplemente colocamos null en cada opción (por decirlo así).

   - jViewer: mostramos finalmente el reporte en vez de imprimirlo directamente, esto ayuda al usuario en caso de querer guardarlo y no gastar papel (ayudemos al planeta de vez en cuando, vale!?).

   Entonces sabiendo todo esto, nuestra clase queda de la siguiente manera:
package reporte;

import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
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.view.JasperViewer;

public class IniciarReporte {

    public void Imprimir(){
        try{
            String archivo = "Mi_Reporte.jrxml";
            if(archivo == null){
                JOptionPane.showMessageDialog(null,"Error al cargar reporte",
                        "Generar Reporte",JOptionPane.ERROR_MESSAGE);
            } JasperReport masterReport= null;
            try {
                masterReport= JasperCompileManager.compileReport(archivo);
            } catch (JRException e) {
                JOptionPane.showMessageDialog(null,"Error al compilar reporte",
                        "Generar Reporte",JOptionPane.ERROR_MESSAGE);
            } Map parametros= new HashMap();
            parametros.put("parametro1", valorparametro1);
            JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametros,conexionSQL);
            JasperViewer jviewer= new JasperViewer(jasperPrint,false);
            jviewer.setVisible(true);
        }catch (Exception ex){
            JOptionPane.showMessageDialog(null,"Un mensaje de error que puedes personalizar si quieres",
                "Generar Reporte",JOptionPane.ERROR_MESSAGE);
        }
    }
}