Como gerar um relatório sem arquivo físico?

12 respostas
warley

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.

12 Respostas

Rafael_Steil

Sim. Eh soh manter o OutputStream em memoria.

Rafael

warley

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

Rafael_Steil

A documentacao diz isso facil facil:

http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperExportManager.html

Rafael

warley

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.

warley

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.
:frowning:

PUTZ…

warley

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");
		
	}
	
}
T

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);
   }



}
cv1

Tratamento de excecoes ruim, talvez? :wink:

T

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?

T

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!!!

Guilherme_Silveira

nao faz muito sentido…

T

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. :stuck_out_tongue:

Valeu demais a atenção!

[]´s

Criado 12 de maio de 2005
Ultima resposta 31 de mai. de 2005
Respostas 12
Participantes 5