Exibir relatorio do Ireport no navegador

Pessoal estou tentando mostrar um relatório do ireport em java web.
Estou utilizando um projeto que estava aki no guj.
Acontece que ele esta gerando um arquivo .jrprint e um aquivo pdf… e na hora de visualiza o relatório em formato PDF ele da o seguinte erro
net.sf.jasperreports.egine.JRException: Error loading object from file:C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.pdf

O que eu queria é que ele não gerasse nem um arquivo na minha pasta… gostaria que o arquivo pdf seja exibido no navegador para o usuário decidir se vai salvar, imprimir, etc.

Código a baixo.


import java.sql.*; 
import java.util.*;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;

public class GerarRelatorio {
	
	
	 
	/* Realiza conexão com o banco de dados, retornando o objeto Connection */
	 private static Connection getConnection( ) throws  
	ClassNotFoundException, SQLException 
	 { 
	   String driver = "org.postgresql.Driver"; 
	   String url = "jdbc:postgresql://localhost:5432/teste"; 
	   String user = "postgres"; 
	   String password = "postgres"; 
	    
	   Class.forName(driver); 
	   Connection con = DriverManager.getConnection( url, user, password ); 
	   return con; 
	 } 
	 /* Gera Relatorio e visualiza-o */
	 public void geraRelatorio( ) throws JRException, Exception 
	 { 
	   Connection con = getConnection( ); 
	   Statement stm = con.createStatement( ); 
	   String query = "SELECT * FROM funcionario WHERE (funcionario.id IN ( SELECT funcionario.id FROM funcionario WHERE nivel_id = 1 )) ORDER BY funcionario.nomecompleto ASC"; 
     		
     
     
     		
	   ResultSet rs =  stm.executeQuery( query ); 
	   /* implementação da interface JRDataSource para DataSource ResultSet */
	   JRResultSetDataSource jrRS = new JRResultSetDataSource( rs ); 
	   /* HashMap de parametros utilizados no relatório. Sempre instanciados */
	   Map parameters = new HashMap(); 
	   // parameters.put("COLUNA", valor);
	   
	  
	   
	   /* Preenche o relatório com os dados. Gera o arquivo FolhaCorretoresEAssistentes.jrprint */ 
	   JasperFillManager.fillReportToFile( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jasper", parameters, jrRS ); 
	    /* Exporta para o formato PDF */
	    JasperExportManager.exportReportToPdfFile( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jrprint" ); 
	   /* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem
	       a necessidade do .jrprint */
	   // JasperRunManager.runReportToPdfFile("BibliotecaPessoal.jasper", parameters, jrRS);
	   
	   /* Visualiza o relatório em formato PDF */ 
	   net.sf.jasperreports.view.JasperViewer.viewReport( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.pdf", false );  
	  
	 } 
	
}

Cara eu utilizo esta classe para gerar e abrir no browser.

[code]
import java.io.InputStream;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;

import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperRunManager;

public class ReportUtil {

private static String ERRO_MENSAGEM_REPORT = "Um erro ocorreu quando o relatório estava sendo executado.";

// executa o relatório através de um JRBeanCollectionDataSource
public static void executarRelatorio(String caminhoRelatorio,
		Map<String, Object> parametros) throws Exception {

	Connection conexao = ConnectionFactory.getConnection();

	FacesContext context = FacesContext.getCurrentInstance();
	HttpServletResponse response = (HttpServletResponse) context
	.getExternalContext().getResponse();

	// pega o caminho do arquivo .jasper da aplicação
	InputStream reportStream = context.getExternalContext()
	.getResourceAsStream(caminhoRelatorio);

	// envia a resposta com o MIME Type
	response.setContentType("application/pdf");

	ServletOutputStream servletOutputStream = response.getOutputStream();

	// envia parametros para o relatorio
	if (parametros == null) {
		parametros = new HashMap<String, Object>();
	}

	// envia para o navegador o PDF gerado
	JasperRunManager.runReportToPdfStream(reportStream,
			servletOutputStream, parametros, conexao);
	
	servletOutputStream.flush();
	servletOutputStream.close();

	context.responseComplete();
	conexao.close();
}

}[/code]

Valeu luan_gazin !!!
eu não to usando o método runReportToPdfStream ñ…
mais grassas a você eu me deparei com o método runReportToPdf que gera justamente uma variável byte!!!
depois só foi preciso criar um ServletOutputStream e enviar o arquivo para o navegador!!!
o código esta logo a baixo.

import java.sql.*; 
import java.util.*;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperRunManager;

public class GerarRelatorio {	
	 
	/* Realiza conexão com o banco de dados, retornando o objeto Connection */
	 private static Connection getConnection( ) throws  
	ClassNotFoundException, SQLException 
	 { 
	   String driver = "org.postgresql.Driver"; 
	   String url = "jdbc:postgresql://localhost:5432/teste"; 
	   String user = "postgres"; 
	   String password = "postgres"; 
	    
	   Class.forName(driver); 
	   Connection con = DriverManager.getConnection( url, user, password ); 
	   return con; 
	 } 
	 /* Gera Relatorio e visualiza-o */
	 public void geraRelatorio(HttpServletRequest req, HttpServletResponse resp) throws JRException, Exception 
	 { 
	   /* inicia a a conexao com o banco */
	   Connection con = getConnection( ); 
	   /* cria uma instância de Statement para a execução do SQL */
	   Statement stm = con.createStatement( ); 

	   String query = "SELECT * FROM funcionario WHERE (funcionario.id IN ( SELECT funcionario.id FROM funcionario WHERE nivel_id = 1 )) ORDER BY funcionario.nomecompleto ASC";
     
	   /* faz a consulta no banco */
	   ResultSet rs =  stm.executeQuery( query );
	   /* fecha a conexao */
	   con.close();
	   /* implementação da interface JRDataSource para DataSource ResultSet */
	   JRResultSetDataSource jrRS = new JRResultSetDataSource( rs ); 
	   /* HashMap de parametros utilizados no relatório. Sempre instanciados */
	   Map parameters = new HashMap(); 
	   // parameters.put("COLUNA", valor);
	   
	   
	   
	   /* Preenche o relatório com os dados. Gera o arquivo Funcionarios.jrprint */ 
	   //JasperFillManager.fillReportToFile( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jasper", parameters, jrRS ); 
	    /* Exporta o arquivo .jrprint para o formato PDF */
	   //JasperExportManager.exportReportToPdfFile( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jrprint" ); 
	   /* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem
	       a necessidade do .jrprint */
	   //JasperRunManager.runReportToPdfFile("C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jasper", parameters, jrRS);
	   
	   /* Cria um relatorio PDF em uma variavel byte*/
	   byte[] pdf = JasperRunManager.runReportToPdf("C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.jasper", parameters, jrRS);
	   
	   /*Retorna um fluxo para enviar dados ao navegador*/
	   ServletOutputStream out = resp.getOutputStream();
	   /*Informar ao navegador que o que vai ser enviado é um pdf*/
	   resp.setContentType("application/pdf");
	   /*Mostra o arquivo no navegador*/
	   out.write(pdf);
	   
	   /* Visualiza o relatório em formato PDF */ 
	   //net.sf.jasperreports.view.JasperViewer.viewReport( "C:/Users/Rick/workspace/teste/src/br/com/teste/relatorios/Funcionarios.pdf", false );  
	  
	   
	   
	 } 
	   
	   
	
}

o PDF vai ser criado na mesma pagina…
caso queira que ele abra em uma nova pagina digite

target="_blank" no form do html que chama o metodo GerarRelatorio

exemplo:

<form class="formulario" id="formulario" name="form1" method="post" action="funcionario.pdf" target="_blank">