Problemas IReport

3 respostas
J

Galera,

estou tentando gerar um relatório no ireport, mas sempre que abro o pdf o mesmo esta em branco e nenhum erro é gerado. Alguém pode me ajudar???

Segue o código:

public void geraRelatorioPDF() throws JRException, IOException {

		final Map<String, Object> parametros = new HashMap<String, Object>();
		tarefaList = recuperaListaTarefasRelatorio();

		parametros.put("quantidadeDias", quantidadeDias);
		parametros.put("tecnico", tarefa.getUnidadeUsuarioInativacao());

		if (tipoVencimento.equals(ApplicationConstant.A_VENCER)) {
			parametros.put("tipoVencimento", "A Vencer");
		} else if (tipoVencimento.equals(ApplicationConstant.VENCIDAS)) {
			parametros.put("tipoVencimento", "Vencidas");
		}

		JasperReportUtil.gerarPDF(parametros, this.tarefaList, "RelatorioTarefaPorVencimento.jasper");
	}
public static void gerarPDF(Map parametros, Collection list, String nomeRelatorioJasper) throws JRException, IOException {
		final FacesContext context = FacesContext.getCurrentInstance();
		final HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
		final ServletOutputStream servletOutputStream = response.getOutputStream();

		final String arquivoRelatorio = ApplicationConstant.CAMINHO_ARQUIVO_RELATORIO.concat(nomeRelatorioJasper);
		final InputStream in1 = JasperReportUtil.class.getClassLoader().getResourceAsStream(arquivoRelatorio);

		JasperRunManager.runReportToPdfStream(in1, servletOutputStream, parametros, new JRBeanCollectionDataSource(list));

		final StringBuilder fileName = new StringBuilder();
		fileName.append("attachment;filename=\"");
		fileName.append(nomeRelatorioJasper.replaceAll(ApplicationConstant.JASPER_FILE_FORMAT, ""));
		fileName.append(ApplicationConstant.PDF_FILE_FORMAT);
		fileName.append("\"");

		response.setContentType(ApplicationConstant.CONTENT_TYPE_PDF);
		response.setHeader(ApplicationConstant.CONTENT_DISPOSITION, fileName.toString());
		response.setHeader(ApplicationConstant.CACHE_CONTROL, "no-cache");

		servletOutputStream.flush();
		servletOutputStream.close();

		context.responseComplete();
	}

3 Respostas

zanata

Olá @jerrymagal

Eu não analisei o código todo, por isso pode ser bobagem o que vou dizer. Apenas “bati o olho” e isso me chamou a atenção (linhas 21 e 22 da segunda listagem).

servletOutputStream.flush();  
        servletOutputStream.close();

Você está fechando o “output stream”, então não há resposta a ser enviada ao client, pois o “canal de comunicação” foi fechado.

Verifique se não é isso.

[]s

J

Consegui resolver. A lista que eu estava passando no DataSource estava vazia e como o relatório estava configurado para deixar tudo em branco caso não houvesse dados…

Mas vlw

T

jerrymagal:
Consegui resolver. A lista que eu estava passando no DataSource estava vazia e como o relatório estava configurado para deixar tudo em branco caso não houvesse dados…

Mas vlw

jerrymagal,

Vou ressuscitar seu tópico :slight_smile:
Por favor, pode me dizer como você configura o relatório para ser gerado mesmo quando o DataSource está vaio?

Grato,
Tássio Coelho

Criado 21 de novembro de 2011
Ultima resposta 12 de jan. de 2012
Respostas 3
Participantes 3