Boa tarde pessoal…
Eu fiz um relatório usando o JasperReport mas sempre está sendo criado um arquivo físico, no meu caso um PDF.
Eu gostaria de saber se existe alguma forma de gerar o relatório sem criar este arquivo físico.
Muito obrigado.
Boa tarde pessoal…
Eu fiz um relatório usando o JasperReport mas sempre está sendo criado um arquivo físico, no meu caso um PDF.
Eu gostaria de saber se existe alguma forma de gerar o relatório sem criar este arquivo físico.
Muito obrigado.
Sim. Eh soh manter o OutputStream em memoria.
Rafael
Existe algum método do JasperReport que me retorne um OutputStream do relatório???
E como eu defino tipo do relatório como pdf??
Obrigado
A documentacao diz isso facil facil:
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperExportManager.html
Rafael
Desculpe-me pela insistências mas eu estou com problema da seguinte forma.
No jsp eu envio um objeto Jasper e faço o seguinte código:
<%
ServletOutputStream stream = response.getOutputStream();
JasperPrint report = (JasperPrint)request.getAttribute("relatorio");
JasperExportManager.exportReportToPdfStream(report, stream);
%>
Na tela aparece um monte de codificação maluca
Cono se o contentType não estive assim contentType="application/pdf" mas eu faço isto no iníco da págia antes de tentar abrir o PDF.
<%@ page language="java" contentType="application/pdf" %>
Alguêm poderia me ajudar, por favor?
Obrigado.
O pior que as vezes mostra na tela aquela telinha de download e quando eu clico em abrir aparece uma mensagem falando que o arquivo não foi encontrado.

PUTZ…
Finalmente eu consegui resolver o problema!!! :lol:
A solução tá aí pra quem tiver dificuldades:
ublic class ServletRelatorio001 extends HttpServlet{
private static String NOME_XML = "relatorio001.jrxml";
private static String NOME_JASPER = "relatorio001.jasper";
private static String NOME_PDF = "relatorio001.pdf";
private static String CAMINHO_ARQUIVO = "C:/unidade D/utilitarios/desenvolvimento/java/IReport/";
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setHeader("Content-disposition","attachment;filename=relatorio001.pdf");
response.setContentType("application/pdf");
ServletOutputStream out = response.getOutputStream();
Informativo informativo = new Informativo();
informativo.setCodigo("1");
informativo.setData("01/01/2004");
informativo.setDescricao("teste");
informativo.setTitulo("Titulo");
ArrayList list = new ArrayList();
list.add(informativo);
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
// HashMap de parametros utilizados no relatorio
Map parametros = new HashMap();
JasperPrint reportToPrint;
try {
/*
reportToPrint = JasperFillManager.fillReport(CAMINHO_ARQUIVO + NOME_JASPER, parametros, ds);
JasperExportManager.exportReportToPdfFile(reportToPrint, CAMINHO_ARQUIVO + NOME_PDF);
OutputStream saida = new FileOutputStream(CAMINHO_ARQUIVO + NOME_XML) ;
JasperExportManager.exportReportToPdfStream(reportToPrint, saida);
*/
byte[] bytes = JasperRunManager.runReportToPdf(CAMINHO_ARQUIVO + NOME_JASPER, parametros, ds);
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (JRException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out.print("foi");
}
}
Olá.
Eu fiz um código parecido com o que vc colocou, mas a minha pagina vem em branco. O que pode ser???
Segue o trecho do codigo:
import java.sql.*;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.*;
import com.lowagie.text.Image;
import java.net.URL;
import java.io.InputStream;
public class ServletDeclaracao extends HttpServlet{
public void doGet(HttpServletRequest p_request, HttpServletResponse p_response)
throws IOException
{
p_response.setContentType("application/pdf");
try
{
Hashtable matriz = (Hashtable) sessao.getAttribute("ht");
JREmptyDataSource RS = new JREmptyDataSource();
InputStream jp = getServletContext().getResourceAsStream("/Declaracao.jasper");
JasperReport relatorio = (JasperReport) JRLoader.loadObject(jp);
JasperPrint impressao = new JasperPrint();
impressao = JasperFillManager.fillReport(relatorio,matriz,RS);
byte[] buffer = JasperExportManager.exportReportToPdf(impressao);
ServletOutputStream outputStream = p_response.getOutputStream();
outputStream.write(buffer, 0, buffer.length);
outputStream.flush();
outputStream.close();
}
catch (JRException e2) {System.out.println("Jasper Reports Exception: "); e2.printStackTrace();}
catch (Exception e) {System.out.println("Exception Normal: " ); e.printStackTrace();}
return;
}
public void doPost(HttpServletRequest p_request, HttpServletResponse p_response) throws IOException
{
doGet(p_request,p_response);
}
}
Tratamento de excecoes ruim, talvez? 
Olá,
Estou me baseando em alguns codigos que eu vi em alguns foruns. Mas mesmo assim, nao eh pego nenhuma exceção…pelo menos nao umas das esperadas(por mim)…
O que pode ser?
Oi amigo.
Desculpe a falha, mas eu esqueci de colocar…
No inicio do metodo doGet do meu servlet eu tinha as seguintes linhas:
p_response.setHeader("Cache-Control", "no-cache. must-revalidate");
p_response.setHeader("Pragma", "no-cache");
p_response.setHeader("Expires", "Mon.21 March 2005 12:00:00 GMT");
p_response.setHeader("Last-Modified ", ""+System.currentTimeMillis());
Acho que por isso que nao gerava nada. Quando eu comentei as mesmas, o relatorio apareceu.
Valeu!!!
nao faz muito sentido…
Aaaaaaaaahh…Eu sou novato neste tipo de aplicação. Se isso faz sentido, ou nao, isso eu nao sei. Soh sei que depois que eu comentei aquelas linhas o relatorio apareceu. 
Valeu demais a atenção!
[]´s