Exportando relatório criado com Ireport em java + jsf

Olá a todos!

Bom este é um post destinado a quem já trabalha com Ireport, pois será somente exibido como exportar esses relatórios para pdf com java e jsf.

Posteriormente será criando post com um passo a passo de como se construir um relatório completo usando Ireport.

O código abaixo é usado para realizar a exportação:


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

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

	public void executeReport() {
		FacesContext facesContext = FacesContext.getCurrentInstance();

		HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();

		InputStream reportStream = facesContext.getExternalContext().getResourceAsStream("caminho_arquivo.jasper");

		response.setContentType("application/pdf");

		response.setHeader("Content-disposition", "inline;filename=relatorio.pdf");

		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();

			JRBeanCollectionDataSource datasource = new JRBeanCollectionDataSource(arrayList);

			JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, datasource);

			servletOutputStream.flush();
			servletOutputStream.close();
		} catch (JRException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally{
			facesContext.responseComplete();
		}
	}

É bom lembrar que na sua pagina.xhtml é preciso usar um link, pois se usado botões para chamar este método o resultado não será o esperado.

Abaixo segue um exemplo de como esse método deve ser chamado:


<h:commandLink id="exportReport" immediate="true" action="#{bean.executeReport()}" value="#{messages['report.export']}"/>

Espero que ajude.

Até mais…

Anúncios
Esta entrada foi postada em Java.

9 comentários em “Exportando relatório criado com Ireport em java + jsf

  1. Ilton Barbosa disse:

    Eu consegui fazer funcionar, só que abriu um arquivo PDF em branco, sem o layout que predefini. Pode me ajudar, por favor?

    • Bom dia.

      Voce tem dados na banda details, pois se não tiver vai aparecer uma pagina em branco mesmo, para isso não acontecer, voce precisa marcar uma opção “When no data”, show “all” nessa opção voce define oque vai aparecer quando tiver dados na banda details.

      Bom, acho que é isso que aconteceu com você.

      Caso não for isso, posta novamente aqui.

      Obrigado.

      Até mais.

  2. Ilton Barbosa disse:

    Opa, já resolvi. Bastou apenas passar um JREmptyDataSource()
    JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, new JREmptyDataSource());

  3. Oi, no link, tanto faz utilizar “action” ou “actionListener” ?

    • Depende do que você precisa, pois action e actionListner não são iguais.

      action: faz uma ação e pode te redirecionar para outra página.
      actionListener: somente faz a ação.

      Obrigado pela visita!

      Qualquer dúvida posta ai.

  4. Caso queira passar um parâmetro para o relatório como faço?

    • Bom dia!

      Nessa linha:
      JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameters, datasource);

      Tem uma variavel parameters que é um has onde voce pode colocar todos os parametros que deseja inserir no relatório, mas se voce esta dizendo de uma pagina para outra, basta colocar na url *?parameter=”value” por get ou post e inserir ele na varivel parameter.

      Não sei se é bem isso que voce precisa, mas qualquer coisa posta ai novamente.

      Obrigado,

      até mais.

      • gusbossini disse:

        Sim, é mais ou menos isso, por exemplo: eu queria escrever um nome de uma empresa pra gerar uma simples nota de entrega de um produto e abaixo do nome da empresa uma lista com os produtos entregues, não preciso de banco de dados nem nada, vou apenas imprimir a nota, então eu preciso passar 2 parâmetros, uma String e um ArrayList.
        Esqueci de mencionar, seu post está muito bom, me ajudou muito pois eu só conseguia fazer isso com JSP.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s