package com.titanic.ventapasajes.util.reporte; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.*; import net.sf.jasperreports.engine.export.JRPdfExporter; import net.sf.jasperreports.engine.export.JRPdfExporterParameter; import org.hibernate.jdbc.Work; public class EjecutorReporte implements Work{ private JRDataSource dt; private String rutaReporte; private HttpServletResponse response; private Map<String, Object> parametros; private String nombreReporteGenerado; private boolean reporteGenerado; public EjecutorReporte(String rutaReporte, HttpServletResponse response, Map<String, Object> parametros, String nombreReporteGenerado, JRDataSource dt) { super(); this.rutaReporte = rutaReporte; this.response = response; this.parametros = parametros; this.nombreReporteGenerado = nombreReporteGenerado; this.parametros.put(JRParameter.REPORT_LOCALE, new Locale("es", "PE")); this.dt = dt; } public void execute(Connection connection) throws SQLException { try { InputStream relatorioStream = this.getClass().getResourceAsStream(this.rutaReporte); //JasperPrint print = JasperFillManager.fillReport(relatorioStream, this.parametros, connection); JasperPrint print = JasperFillManager.fillReport(relatorioStream, this.parametros, dt); this.reporteGenerado = print.getPages().size() > 0; if (this.reporteGenerado) { JRExporter exportador = new JRPdfExporter(); exportador.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream()); exportador.setParameter(JRExporterParameter.JASPER_PRINT, print); exportador.setParameter(JRPdfExporterParameter.PDF_JAVASCRIPT, "this.print({bUI: true, bSilent: false, bShrinkToFit: true});"); response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachment; filename=\"" + this.nombreReporteGenerado + "\""); exportador.exportReport(); } } catch (Exception e) { throw new SQLException("Error al generar el reporte " + this.rutaReporte, e); } } public boolean isReporteGenerado() { return reporteGenerado; } }