Boa tarde caros amigos do GUJ, estou quase conseguindo retornar os relaatórios do JasperReports no browser, na verdade eles ja são retornados só o browser não os abre.
Por exemplo, em pdf, visualizei pelo firebug o conteúdo retornado:
%PDF-1.4
%âãÏÓ
3 0 obj
<</Filter/DCTDecode/Type/XObject/Length 9834/BitsPerComponent 8/Height 196/ColorSpace/DeviceRGB/Subtype/Image/Width 166>>stream
ÿØÿà�JFIF��H�H��ÿÛ�C� aaaa ÿÛ�C
ÿÀ��Ä�¦�ÿÄ���������������a ÿÄ�X�a
O mesmo acontece para os formatos doc e xls, só que os retornos são diferentes logicamente.
Sabem me dizer o que está faltando?
if ( acao.equals("1") ){
RequestDispatcher dispatcher =
request.getRequestDispatcher("/ReportRender");
// preenchemos o servlet que renderiza o formato a ser gerado pelo relatorio
String pathReport = sc.getRealPath("/Relatorios/"+nomeRelatorio);
request.setAttribute("pathJasperFile", pathReport);
request.setAttribute("paramMap", parametros);
request.setAttribute("con",con.getCon());
request.setAttribute("type",ConstantesCartao.TYPE_PDF);
request.setAttribute("nameReport", NameRep);
if (dispatcher != null) dispatcher.forward(request, response);
response.setContentType("application/pdf");
ReportRender
package objects.servlets;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.sql.Connection;
import java.util.HashMap;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import util.ConstantesCartao;
import util.ExportaRelatorio;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperRunManager;
public class ReportRender extends HttpServlet {
protected void doGet(HttpServletRequest request,HttpServletResponse
response) throws ServletException, IOException {
String caminho = (String) request.getAttribute("pathJasperFile");
String type = (String) request.getAttribute("type");
String [] strArray = caminho.split("cartaoRezende");
String caminhoRelativo = strArray[1];
String name = (String) request.getAttribute("nameReport");
ServletOutputStream servletOutputStream = response.getOutputStream();
ExportaRelatorio exporter = new ExportaRelatorio(name);
InputStream reportStream = getServletConfig().getServletContext()
.getResourceAsStream(caminhoRelativo);
HashMap parameterMap = (HashMap) request.getAttribute("paramMap");
Connection con = (Connection)request.getAttribute("con");
try{
if ( type.equals( ConstantesCartao.TYPE_PDF ) ){
JasperRunManager.runReportToPdfStream(reportStream,
servletOutputStream, parameterMap, con);
response.setContentType("application/pdf");
servletOutputStream.flush();
servletOutputStream.close();
} else if ( type.equals( ConstantesCartao.TYPE_XLS ) ) {
JasperPrint jp = JasperFillManager.fillReport(
caminho , parameterMap,
con);
exporter.geraXLS(jp,servletOutputStream);
response.setContentType("application/xls");
} else if ( type.equals( ConstantesCartao.TYPE_DOC ) ) {
JasperPrint jp = JasperFillManager.fillReport(
caminho , parameterMap,
con);
exporter.geraDOC(jp,servletOutputStream);
response.setContentType("application/doc");
}
}
catch (JRException e)
{
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
response.setContentType("text/plain");
response.getOutputStream().print(stringWriter.toString());
}
}
}