Renderizar PDF + jasper + jsf

1 resposta
M
Olá pessoal, possuo o seguinte código:
FacesContext facesContext = FacesContext.getCurrentInstance();
			ServletContext servletContext = (ServletContext) facesContext
					.getExternalContext().getContext();
			String pathRel = servletContext
					.getRealPath("/relatorio/rota_parada.jasper");
			HttpServletResponse response = (HttpServletResponse) facesContext
					.getExternalContext().getResponse();

			if (rotaService == null) {
				log.error("RotaSE n�o foi instanciado.");
				return;
			}
			Map<String, Object> parameters = new HashMap<String, Object>();
			parameters.put("filtro", getFiltro());
			parameters.put("imagem", servletContext
					.getRealPath("/img/logogafor.gif"));
			parameters.put("powered", servletContext
					.getRealPath("/img/powered.gif"));

			JRDataSource coll = new JRResultSetDataSource(rotaService
					.getRotasRelatorioResult(rota, placaCarreta, produtoId,
							placaVeiculo, cidade, estado, motorista,
							dataInicial, dataFinal, cliente, statusID));

			errorMsgs.clear();

			if (parameters != null)
				parameters.put(JRParameter.REPORT_LOCALE, new Locale("pt"));
			
			JasperPrint jp = JasperFillManager.fillReport(pathRel, parameters,
					coll);
			
			byte[] relatorio = JasperExportManager.exportReportToPdf(jp);
			response.setContentType("application/pdf");
			response.getOutputStream().write(relatorio);

Porém ele não abre no browser e também não gera nenhum erro.
Alguém pode me ajudar? :cry:

1 Resposta

M

Da forma anterior não consegui resolver.
Então utilizei esse código:

public static void abrirRelatorio(byte[] bytes, String fileName) throws Exception {
		if (bytes == null)
			throw new Exception("Array de bytes nulo.");

		if (fileName == null)
			throw new Exception("Nome do arquivo é nulo.");

		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) facesContext
				.getExternalContext().getResponse();
		response.setHeader("Content-Disposition", "attachment; filename=\""
				+ fileName + "\";");
		response.setContentLength(bytes.length);
		ServletOutputStream ouputStream = response.getOutputStream();
		ouputStream.write(bytes, 0, bytes.length);
		facesContext.responseComplete();
	}

         public void gerarRelatorio() throws Exception {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		ServletContext servletContext = (ServletContext) facesContext
				.getExternalContext().getContext();
		String pathRel = servletContext
				.getRealPath("/relatorio/rota_parada.jasper");
		// parametros
		Map<String, Object> parameters = new HashMap<String, Object>();
		parameters.put("filtro", getFiltro());
		parameters.put("imagem", servletContext
				.getRealPath("/img/logogafor.gif"));
		parameters.put("powered", servletContext
				.getRealPath("/img/powered.gif"));

		// recebe por parametro uma lista da propia classe jah populada
		JRDataSource coll = new JRResultSetDataSource(rotaService
				.getRotasRelatorioResult(rota, placaCarreta, produtoId,
						placaVeiculo, cidade, estado, motorista, dataInicial,
						dataFinal, cliente, statusID));

		try {
			JasperPrint print = JasperFillManager.fillReport(pathRel,
					parameters, coll);
			byte[] bytes = JasperExportManager.exportReportToPdf(print);
			Util.abrirRelatorio(bytes, "ListaViagens.pdf");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Espero que possa ajudar alguém...
:)

Criado 18 de março de 2010
Ultima resposta 15 de abr. de 2010
Respostas 1
Participantes 1