Relatório com JasperReport

1 resposta
N

Boa tarde,

Estou com problemas em gerar um relatório usando JasperReport, apartir de uma classe é gerado um relatório em pdf em branco. A aplicação não acusa nenhum tipo de erro…mas o relatório aparece em branco.

Minha Classe

.

.

.

HttpSession sessao = request.getSession();

Conexao(sessao);
// Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
	String pathJasper = sessao.getServletContext().getRealPath(
			"WEB-INF/classes")
			+ "/";
	
	// A variavel path armazena o caminho real para o contexto
	// isso é util pois o seu web container pode estar instalado em lugares diferentes
	String path = sessao.getServletContext().getRealPath("/");
	
	
	// Parametros do relatorio
	Map parametros = new HashMap();
	// O único parametro que devemos passar é o PathRelQuestoes
	// é o caminho pro RelaQuestionarios.jasper (que foi subtituido pelo 
	// valor fixo “D:/iReport-1.1.0/RelaQuestionarios.jasper”)
	parametros.put("PathRelQuestoes", pathJasper + "RelaQuestionarios.jasper");
	
		try {
		// Aqui ele cria o relatório
		JasperPrint impressao = JasperFillManager.fillReport(pathJasper
				+ "RelaQuestionarios.jasper", parametros, con);

		// Grava o relatório em disco em pdf	
		JasperManager.printReportToPdfFile(impressao, path
				+ "/RelaQuestionarios.pdf");
					
		// Redireciona para o pdf gerado
		response.sendRedirect("RelaQuestionarios.pdf");

	} catch (Exception e) {
		//response.getWriter().println("Erro ao gerar o relatório: " + e);
	}
}

private void Conexao(HttpSession sessao)

{

try

{

ProxyBanco ins = ProxyBanco.getBanco();

ins.ConectaRel();

}
catch(ClassNotFoundException cnfe){
        sessao.setAttribute("conteudo",AppConfig.getConfig().getPaginaDeErro());
        sessao.setAttribute("msg", AppConfig.getConfig().getMsgErroBd());
    
    }
    catch(SQLException sqlex){
        logger.debug("não adicionou, problemas no sql!"+ sqlex);
        sessao.setAttribute("conteudo",AppConfig.getConfig().getPaginaDeErro());
        sessao.setAttribute("msg", AppConfig.getConfig().getMsgErroBd());
    }
}

}

O arquivo RelaQuestionarios.jasper está na pasta WEB-INF/classes

1 Resposta

J

Taí um servlet de exemplo:

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Connection conn = null;

try {
	// nome do relatorio
	String reportName = request.getParameter("reportName");		
	if (reportName == null || reportName.equals("")) {
		throw new Exception("Nome do relatório deve ser informado.");
	}

	// copia parametros da requisição
	Enumeration en = request.getParameterNames();
	Map parameters = new HashMap();
	
	while(en.hasMoreElements()){
		String key = (String) en.nextElement();
		parameters.put(key, request.getParameter(key)); 
	}
	parameters.put("REPORT_LOCALE", new Locale("pt", "br")); 		    	    
                // conexão do datasource
                conn = <sua conexão>

	// carrega relatório
	String reportPath = "/br/com/aplicacao/" + reportName + ".jasper";
	InputStream stream = ReportUtils.class.getResourceAsStream(reportPath);
	if (stream == null){
	  throw new Exception("Relatório não encontrado: " + reportPath);
	}
	JasperReport report = (JasperReport) JRLoader.loadObject(stream);
	JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, conn);
	ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();

	// exporta para pdf
	JasperExportManager.exportReportToPdfStream(jasperPrint, arrayOutputStream);            

	// define os cabecalhos do header            
	response.setHeader("Pragma","");
	response.setHeader("Cache-Control","");
	response.setHeader("Expires","");
	response.setContentType("application/pdf");
	response.setContentLength(arrayOutputStream.size());

	// escreve o relatorio no response
	OutputStream out = response.getOutputStream();		    
	arrayOutputStream.writeTo(out);
	out.flush();	
	out.close();
} 
catch (Exception e) {
	e.printStackTrace();	
	request.setAttribute("ERRO_REPORT", e.getMessage());
	this.getServletContext().getRequestDispatcher("/visualizacaoRelatorio.jsp").forward(request, response);		    	    	
} 
finally {    	        
	if (conn != null) {
		try {
			conn.close();
		} catch (SQLException e) {
		}
	}
}

Faça as suas adaptações e veja se funciona, blz?

Criado 8 de junho de 2006
Ultima resposta 8 de jun. de 2006
Respostas 1
Participantes 2