Problemas com ireport

ae galera…

estou com um problema na hora de imprimir um pdf…
estoou utilizando o ireport…

ele n da erro…

o pdf ao invés de abrir com o acrobat…

ele imprime isso:

%PDF-1.4 %âãÏÓ 3 0 obj <>stream x�ÅYMsÓ0½ûWèWß�¹µ¥íÀ Ði;½0<¶IÝQÆIá÷2�8óa?[Q[Vã¦mú6yÒJÙÕ[IÆà}tv!

meu codigo é o seguinte

public void relatorioDeEstado(){
	
	ClienteDAO bd = new ClienteDAO();
	ArrayList<AuxHelp> lista= bd.taTudoDoido();
	String caminho = "/reports/relatorio.jrxml";
	try{
		JSFUtil.imprimirPDF(lista, caminho);
	}catch (Exception e) {
		e.printStackTrace();
	}
	
}

codigo JSFUtil.imprimirPDF(lista,caminho)


@SuppressWarnings("unchecked")
	public static void imprimirPDF(List lista,String caminho){
		FacesContext context = JSFUtil.getCurrentInstance();
	 	 HttpServletResponse response = (HttpServletResponse) Utility.getServletResponse();
	 	     Map parameters = new HashMap();
	 	     InputStream reportStream = JSFUtil.class.getResourceAsStream(
	 	    caminho);
	 	     JasperDesign jasperDesign = null;
	 	    try {
	 	     jasperDesign = JRXmlLoader.load(reportStream);
	 	    } catch (JRException e) {
	 	     System.out.println(e.getMessage());
	 	    }
	 	     JasperReport jasperReport = null;
	 	    try {
	 	     jasperReport = JasperCompileManager.compileReport(jasperDesign);
	 	    } catch (JRException e) {
	 	     System.out.println(e.getMessage());
	 	    }
	 	    JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(
	 	      lista);
	 	     JasperPrint jasperPrint = null;
	 	     byte[] arquivoPDF = null;
	 	    try {
	 	     jasperPrint = JasperFillManager.fillReport(jasperReport,
	 	       parameters, ds);
	 	    } catch (JRException e) {
	 	     System.out.println(e.getMessage());
	 	    }
	 	    // método para exportar o relatório para PDF
	 	    try {
	 	     arquivoPDF = JasperExportManager.exportReportToPdf(jasperPrint);
	 	    } catch (JRException e) {
	 	     e.getMessage();
	 	    }
	 	     response.setContentType("application/pdf");
	 	  response.setContentLength(arquivoPDF.length);
	 	  try {
			response.getOutputStream().write(arquivoPDF);
			  response.getOutputStream().flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

[quote=xexa]ae galera…

estou com um problema na hora de imprimir um pdf…
estoou utilizando o ireport…

ele n da erro…

o pdf ao invés de abrir com o acrobat…

ele imprime isso:

%PDF-1.4 %âãÏÓ 3 0 obj <>stream x�ÅYMsÓ0½ûWèWß�¹µ¥íÀ Ði;½0<¶IÝQÆIá÷2�8óa?[Q[Vã¦mú6yÒJÙÕ[IÆà}tv!

xexa, dá pra postar de novo ? Teve um problema de codificação justamente com a mensagem de erro.
Mas pelo pouco que sei acho que você não devia passar o caminho dessa forma:

 String caminho = "/reports/relatorio.jrxml";  

Porque seu “caminho” vai depender de onde seu Servidor de aplicação está. Busca por conseguindo o path da aplicação no Google.
Espero ter ajudado

Opa!
Eu uso esse código para fazer a impressão

public abstract class GeraRelatorio extends FacesAction {
	
	private String arquivoJasper;
	private Collection dados;
	private Map<String, Object> parametros;
	
	public GeraRelatorio(String arquivoJasper, Collection dados, Map<String, Object> parametros) {
		setArquivoJasper(arquivoJasper);
		setDados(dados);
		setParametros(parametros);
	}
	
	public String getArquivoJasper() {
		return arquivoJasper;
	}

	public void setArquivoJasper(String arquivoJasper) {
		this.arquivoJasper = arquivoJasper;
	}

	public Collection getDados() {
		return dados;
	}

	public void setDados(Collection dados) {
		this.dados = dados;
	}

	public Map<String, Object> getParametros() {
		return parametros;
	}

	public void setParametros(Map<String, Object> parametros) {
		this.parametros = parametros;
	}
	
	public InputStream getStreamArquivoJasper(String caminhoArquivo) {
		
		InputStream stream = null;
		
		try {
			File fp = new File(caminhoArquivo);
			stream = new FileInputStream(fp);
		} catch (FileNotFoundException e) {
			//TODO: Tratar exceção
			e.printStackTrace();
		} catch (IOException e) {
			//TODO: Tratar exceção
			e.printStackTrace();
		}
		
		return stream;
	}
	
	
	public abstract byte[] geraRelatorio();

}

e mais esse

public class GeraRelatorioPDF extends GeraRelatorio {
	
	public GeraRelatorioPDF(String arquivoJasper, Collection dados, Map<String, Object> parametros) {
		super(arquivoJasper, dados, parametros);		
	}

	@Override
	public byte[] geraRelatorio() {
		Collection vo = getDados(); 
		Map<String, Object> param = getParametros();
		String nomeArquivo = getArquivoJasper();
		
		try {		
			FacesContext context = FacesContext.getCurrentInstance();
			InputStream fis = context.getExternalContext().getResourceAsStream(nomeArquivo);
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(vo);
			HttpServletResponse response = getResponse();
			ServletOutputStream responseStream = response.getOutputStream();
			JasperRunManager.runReportToPdfStream(fis, responseStream, param, ds);
			
			String nomePagina = context.getViewRoot().getViewId();
			nomePagina = nomePagina.substring(nomePagina.lastIndexOf('/')+1, nomePagina.lastIndexOf('.'));
			response.setContentType("application/pdf; name=\"" + nomePagina + ".pdf\"");
			response.setHeader("Content-disposition", "inline; filename=\"" + nomePagina + ".pdf\"");
			
			responseStream.flush();
			responseStream.close();
			context.renderResponse();
			context.responseComplete();		
			
		} catch (IOException e) {
			new LogUtil().getLogger().error(e);
			addExceptionMessage(new PersistentException());
		} catch (JRException e) {
			new LogUtil().getLogger().error(e);
			addExceptionMessage(new PersistentException());
		}
		
		return null;
	}
}

Vê se ele é útil para você!

Abraço!

o método getResponse eu faço como

protected javax.servlet.http.HttpServletResponse getResponse() {
		return (javax.servlet.http.HttpServletResponse) getExternalContext()
				.getResponse();
	}

meu problema é…

com h:commandButton ele imprime o pdf…

com <rich:menuItem nada acontece…

[quote=xexa]meu problema é…

com h:commandButton ele imprime o pdf…

com <rich:menuItem nada acontece…[/quote]

Boa tarde,

Como ficou sua chamada dentro do *.jsf, para gerar o relatório? :?:

Ibimon Pereira Morais :slight_smile:
“Deus é Fiel!”