Descripción de ReportsManager


ReportsManager es una clase diseñada para la administración y generación de reportes Jasper a través de Java. 

Contiene un constructor que recibe tres parámetros:

- fileName : Corresponde al nombre del archivo .jasper a a partir del cual se     
                  generará el reporte.
- lista : Esta lista es enviada cuando se necesita generar un reporte a partir de     
           una colección de objetos y no a partir de una consulta.
- hashmap: Contiene los parámetros del reporte, como por ejemplo       
                  parámetros usados en la consulta, la ubicación de una imagen,    
                  etc.

En el cosntructor se valida si el parámetro lista es nulo, si es nulo se hace uso de la clase JasperFillManager y se especifica la conexión que será usada para realizar la consulta en BD a partir de la cual se generará el reporte, esta conexión la proporciona por ejemplo un DAO.
Si la lista no es nula significa que el reporte será generado a partir de un arreglo o colección de objetos, para ello se debe crear el dataSource mediante la clase JRBeanCollectionDataSource.

El otro punto a destacar es la operación crearObjetoExportar la cual recibe como parámetro el tipo de formato del reporte generado, se recuerdan que estos tipos de formato son HTML, PDF, RTF, ODS, XML, ODT, CVS, TEXT.

En ésta operación se puede configurar los parámetros del reporte, por ejemplo:

export.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);

Existe una operación sobrecargada llamada generarReporte que recibe los siguientes tipos de parámetros OutputStream out, Writer out, File out y retorna objetos del mismo tipo respectivamente.

La otra operación sobrecargada es getReport  y recibe los tipos de parámetros como ServletOutputStream out, PrintWriter out, File out y para todas los casos int tipo que el tipo de formato del reporte.
Las librerías de Jasper que deben ser configuradas o agregadas al proyecto son:

jasperreports-3.7.4.jar
jasperreports-applet-3.7.4.jar
jasperreports-fonts-3.7.4.jar
jasperreports-javaflow-3.7.4.jar

import java.io.File;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Writer;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import co.mc.lokalizo.exception.ReportsManagerException;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JExcelApiExporter;
import net.sf.jasperreports.engine.export.JRCsvExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterParameter;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
import net.sf.jasperreports.engine.export.JRTextExporter;
import net.sf.jasperreports.engine.export.JRXmlExporter;
import net.sf.jasperreports.engine.export.oasis.JROdtExporter;
import net.sf.jasperreports.view.JasperViewer;

/**
 * ReportsManager
 * Clase administradora de generacion de reportes jasper
 * @author Yair Carreno Lizarazo
 *
 * @param <T>
 */
public class ReportsManager<T> {

    private static Log log = LogFactory.getLog(ReportsManager.class);
        
    @SuppressWarnings({"rawtypes" })
    private Map hm = new HashMap();
    private JasperPrint print;
    private JRExporter exporter;
    private JRBeanCollectionDataSource dataSource;    
    
    @SuppressWarnings("rawtypes")
    public ReportsManager(String fileName, Collection<T> lista, Map hashmap, Connection conn) throws ReportsManagerException {
        
        if(hashmap != null){
            this.hm = hashmap;
        }
        try {            
            if (lista == null) {
                print = JasperFillManager.fillReport(fileName, hm, conn);
            } else {
                dataSource = new JRBeanCollectionDataSource(lista);
                print = JasperFillManager.fillReport(fileName, hm, dataSource);
            }
        } catch (JRException e) {
            log.error("JRException: " + e.getMessage());
            throw new ReportsManagerException("JRException: " + e.getMessage());
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    log.error("SQLException: " + e.getMessage());
                    throw new ReportsManagerException("SQLException: " + e.getMessage());
                }
            }
        }
    }

    /**
     * getReport
     * @param out del ServletOutputStream
     * @param tipo : Indica el formato o extension del reporte (i.e. .pdf, .excel, .html, .xml, .odt)
     * @return ServletOutputStream
     */
    public ServletOutputStream getReport(ServletOutputStream out, int tipo) {
        exporter = crearObjetoExportar(tipo);
        return (ServletOutputStream) generarReporte(out);
    }

    /**
     * getReport
     * @param out del tipo PrintWriter
     * @param tipo : Indica el formato o extension del reporte (i.e. .pdf, .excel, .html, .xml, .odt)
     * @return PrintWriter
     */
    public PrintWriter getReport(PrintWriter out,int tipo) {
        exporter = crearObjetoExportar(tipo);
        return (PrintWriter) generarReporte(out);
    }
    
    /**
     * getReport
     * @param out del tipo File
     * @param tipo : Indica el formato o extension del reporte (i.e. .pdf, .excel, .html, .xml, .odt)
     * @return File
     */
    public File getReport(File out,int tipo) {
        exporter = crearObjetoExportar(tipo);
        return (File) generarReporte(out);
    }

    /**
     * generarReporte
     * @param out
     * @return OutputStream
     */
    private OutputStream generarReporte(OutputStream out) {

        try {
            exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.exportReport();
        } catch (JRException e) {
            log.error("JRException: " + e.getMessage());
        } catch (Exception e) {
            log.error("Exception: " + e.getMessage());
        }
        return out;
    }

    /**
     * generarReporte
     * @param out
     * @return Writer
     */
    private Writer generarReporte(Writer out) {

        try {
            exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.exportReport();
        } catch (JRException e) {
            log.error("JRException: " + e.getMessage());
        }
        return out;
    }
    
    /**
     * generarReporte
     * @param out
     * @return File
     */
    private File generarReporte(File out) {

        try {
            exporter.setParameter(JRExporterParameter.OUTPUT_FILE, out);
            exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
            exporter.exportReport();
        } catch (JRException e) {
            log.error("JRException: " + e.getMessage());
        }
        return out;
    }
        
    /**
     * getViewerReport
     * Obtiene el visor de report propio del Jasper
     * @param print
     */
    @SuppressWarnings("deprecation")
    public void getViewerReport(JasperPrint print){
        JasperViewer jviewer = new JasperViewer(print, false);
        jviewer.show();
    }
    
    /**
     * crearObjetoExportar
     * Crea el objeto a exportar por el Jasper.
     * 1:PDF, 2:RTF, 3:EXCEL, 4:XML, 5:ODT, 6:CSV, 7:TEXT, default:HTML
     * @param tipo
     * @return JRExporter
     */
    private JRExporter crearObjetoExportar(int tipo) {

        JRExporter export = null;

        switch (tipo) {
        case 0:
            export = new JRHtmlExporter();
            export.setParameter(JRHtmlExporterParameter.IMAGES_URI,"image?image=");
            export.setParameter(JRHtmlExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.TRUE);
            export.setParameter(JRHtmlExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,Boolean.TRUE);
            break;
        case 1:
            export = new JRPdfExporter();
            break;
        case 2:
            export = new JRRtfExporter();
            break;
        case 3:
            export = new JExcelApiExporter();
            break;
        case 4:
            export = new JRXmlExporter();
            break;
        case 5:
            export = new JROdtExporter();
            break;
        case 6:
            export = new JRCsvExporter();
            break;
        case 7:
            export = new JRTextExporter();
            break;
        default:
            export = new JRHtmlExporter();
        }
        return export;
    }
}

Le será útil en cualquier proyecto que necesites administrar y generar reportes.
 
Previous
This is the oldest page
Thanks for your comment