Colocar arquivo para download

3 respostas
B

Galera, tudo bom!?
To precisando de uma ajudinha com uma função do meu projeto web e quem sabe alguém não pode ajudar =D!

Acabei de terminar a parte de gerar relatórios do meu projeto que funciona no seguinte esquema: A partir de dados do BD e utilizando iReport/ Jasper Reports é exibido na tela um relatorio (em formato HTML mesmo) contudo durante o processo também é gerado um arquivo temporário em pdf.

O que eu preciso agora é um jeito de disponibilizar o download desse arquivo em PDF (desse relatório) para o usuário. Assim, na tela onde é exibido o relatório também teria um botão salvar para que o usuário fizesse o download do arquivo prontinho.

Não faço idéia de como fazer isso e apesar de ja estar pesquisando ainda não encontrei nada a respeito. Lembrando que o arquivo (temporário) pdf ja está criado, só preciso de um jeito de disponibilizar um jeito para que o usuário possa salvá-lo em seu computador.

Qualquer adica será muito bem vinda!
Agradeço desde já

3 Respostas

A

cara,

segue um metodo que faz o que vc quer

public static void imprimir(List<Relatorio> lista, String reportUrl, Map<String, Object> parametros){
		FacesContext facesContext = FacesContext.getCurrentInstance();
		
		HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();
		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
		OutputStream os = null;
		
		try {
			String reportUrlReal = request.getSession().getServletContext().getRealPath("relatorio" + File.separator + reportUrl);
			
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(lista);
			JasperPrint jasperPrint = JasperFillManager.fillReport(reportUrlReal, parametros, ds);
			byte[] pdf = JasperExportManager.exportReportToPdf(jasperPrint);
			
			os = response.getOutputStream();
			response.setContentType("application/pdf");
			response.setContentLength(pdf.length);
			response.setHeader("Content-disposition","attachment; filename=\""+ reportUrl.substring(0, reportUrl.length() - 7)+ ".pdf\"");
			os.write(pdf);
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			try {
				if(os != null){
					os.flush();
					os.close();
				}
				facesContext.responseComplete();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

t+

B

Allison, vlw pela dica…

não entendi direito oq ue vc fez mas vou tentar entender melhor aqui.

A

esse codigo gera o pdf em array de bytes e disponibiliza o pdf gerado para download.
Nesse codigo eu utilizei JSF, para pegar o request e response.

espero ter te ajudado.

t+

Criado 19 de setembro de 2011
Ultima resposta 19 de set. de 2011
Respostas 3
Participantes 2