Generacion de Reporte (JasperReport-0.6.7) Hola a todos en el foro.
Anteriormente habia generado reportes desde jsp con jasperreport. Compila bien (el jrxml) desde el servlet y se ejecuta el pdf, pero no me muestra nada, se muetra el pdf en blanco. Y desde el iReport se muestra el reporte correctamente. Los jar que utilizo para crear el reporte desde iReport son los mismos, excepto *commons-digester.jar y *commons-collections.jar.
Ahora tengo iReport0.5.0 y los jar;
jasperreport-0.6.7.jar,
commons-beanutils.jar,
*commons-digester-1.7.jar,
*commons-collections-3.1.jar,
itext-1.02b.jar
y otros como poi..,xerces.. en WEB-INF\lib
Yo uso Tomcat-5.5.7, j2se 5
El codigo del servlet es el siguiente:
package com.ivss.sappie.ctrl.reportes;
import java.io.File;
import java.io.IOException;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JRException;
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.JasperRunManager;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRPdfExporterPa rameter;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.export.JRHtmlExporterP arameter;
import net.sf.jasperreports.engine.data.JRXmlDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.ivss.lib.sql.ConectarDB;
/**
* @ version 1.0
* @ author José Pacheco
*/
public class ReportServlet extends HttpServlet implements Servlet{
private static final Log log = LogFactory.getLog(ReportServlet.class);
public final static String fileName = "ReporteRechazado";
/**
* @see Inicializa el servlet
*/
public void init() throws ServletException {
super.init();
ServletContext context = getServletContext();
//Setea la ruta de las classes para compilar
System.setProperty(
"jasper.reports.compile.class.path",
context.getRealPath("/WEB-INF/lib/jasperreports-0.6.7.jar")
+ System.getProperty("path.separator")
+ context.getRealPath("/WEB-INF/classes/"));
//Especifica la carpeta donde esta el reporte compilado
System.setProperty(
"jasper.reports.compile.temp",
context.getRealPath("/reportes/xml/"));
log.info("Inicializando ReportServlet");
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
log.info("Inicia Generacion de Reporte");
Connection conn = null;
Map parameters = new HashMap();
ConectarDB connection = new ConectarDB("recursos/sappie");
try {
//Obtiene la conexion a la base de datos
conn = connection.getConnection();
String reportType = "PDF"; //request.getParameter("reportType");
ServletContext context = getServletContext();
JasperReport jasperReport = getCompiledReport();
parameters.put("id_ciudadano","1555555");
if(reportType.indexOf("HTML") >= 0){
//Crea el Objeto JasperPrint usando fillReport()
JasperPrint jasperPrint =
JasperFillManager.fillReport(jasperReport, parameters, conn);
//Llama al metodo para generar el reporte PDF
generateHtmlOutput(jasperPrint, request, response);
}else{
//Llama al metodo para generar el reporte PDF
generatePDFOutput(response, parameters, jasperReport,conn);
}
}catch(Exception e){
e.printStackTrace(System.err);
request.setAttribute("exception", e);
getServletContext().getRequestDispatcher(
"/comunes/exceptionSAPPIE.jsp").forward(
request,
response);
}finally{
if(conn != null)
try{
conn.close();
}catch(SQLException e){
e.printStackTrace(System.err);
}
if(connection.con != null)
try{
connection.closeConnection();
}catch(Exception e){
e.printStackTrace(System.err);
}
}
}
private void generateHtmlOutput(
JasperPrint jasperPrint,
HttpServletRequest request,
HttpServletResponse response) throws IOException, JRException {
Map imagesMap = new HashMap();
request.getSession().setAttribute("IMAGES_MAP", imagesMap);
JRHtmlExporter exporter = new JRHtmlExporter();
exporter.setParameter(JRExporterParameter.JASPER_P RINT, jasperPrint);
exporter.setParameter(
JRExporterParameter.OUTPUT_WRITER,
response.getWriter());
exporter.setParameter(JRHtmlExporterParameter.IMAG ES_MAP, imagesMap);
exporter.setParameter(
JRHtmlExporterParameter.IMAGES_URI,
"image?image=");
exporter.exportReport();
}
private void generatePDFOutput(
HttpServletResponse response,
Map parameters,
JasperReport jasperReport,Connection conn) throws JRException,SQLException,IOException {
byte[] bytes = null;
bytes =
JasperRunManager.runReportToPdf(
jasperReport,
parameters,
conn);
log.info("Size del byte [ " + bytes.length + " ] --> Significa la cantidad de byte del reporte");
response.setContentType("application/pdf");
response.setHeader("Content-Disposition","inline; filename=ReporteRechazado.pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length); //ouputStream.write(bytes);
ouputStream.flush();
ouputStream.close();
log.info("Reporte Generado");
}
private JasperReport getCompiledReport()
throws JRException{
File reportFile = new File(getServletContext().getRealPath("/reportes/xml/" + fileName + ".jasper"));
log.info("Archivo " + reportFile.toString() + " Seteado en Objeto File");
//Si el archivo compilado no es encontrado, entonces
//se compila la plantilla XML
if (!reportFile.exists()) {
JasperCompileManager.compileReportToFile(
getServletContext().getRealPath(
"/reportes/xml/" + fileName + ".jrxml"));
}
JasperReport jasperReport =
(JasperReport) JRLoader.loadObject(reportFile.getPath());
log.info("Archivo Compilado");
return jasperReport;
}
}
gracias a quien pueda ayudarme |