Home   Java   Chamar um relatório JasperReports através do Java

Chamar um relatório JasperReports através do Java

Chamar um relatório JasperReports através do Java


Olá amigos,

Neste artigo iremos aprender como fazer a chamada de um relatório criado em JasperReports através de um programa Java. Caso você não saiba criar relatórios leia este artigo .

Como criar relatórios com o JasperReports14

1. Criando o projeto


Crie um projeto web Web chamado JasperReportsWeb.

2. Conectando o projeto ao Relatório

Cria a classe chamada “GeraRelatorio” e adicione o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package br.com.feltex.jasperreportsweb;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
 
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.JasperRunManager;
 
public class GeraRelatorio {
 
	// Método para realizar a conexão com o banco de dados
	public Connection getConexao() throws SQLException, ClassNotFoundException {
		Class.forName("com.mysql.jdbc.Driver");
		Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost:3306/bdacademicnet", "root", "teco01");
		return conexao;
	}
 
	// Método para ser executado em JSE
	public static void main(String[] args) {
		System.out.println("Inicio");
		GeraRelatorio geraRelatorio = new GeraRelatorio();
		String path = "E:/Java/Eclipse/workspace02/JasperReportsWeb/WebContent/relatorios/";
		geraRelatorio.gerarPDF(path);
		System.out.println("Fim");
	}
 
	public byte[] gerarPDF(String diretorio) {
		byte[] retorno = null;
		String relatorio = diretorio + "RelAlunos.jrxml";
		String imagem = diretorio + "cherry.jpg";
		try {
			// Faz a compilação do relatório
			JasperReport jasperReport = JasperCompileManager.compileReport(relatorio);
 
			// Cria o mapa de parâmetros que será enviado ao relatório
			HashMap<String, Object> paramatros = new HashMap<String, Object>();
 
			// Faz o apontamento para a imagem que aparece no top do relatório
			paramatros.put("logo", imagem);
 
			// Preenche os dados do relatório
			JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, paramatros, getConexao());
 
			// Objeto para a ser retornado
			retorno = JasperRunManager.runReportToPdf(jasperReport, paramatros, getConexao());
 
			// Gera o arquivo PDF no caminho especificado
			JasperExportManager.exportReportToPdfFile(jasperPrint, "C:/temp/RelatorioAlunos.pdf");
 
		} catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}
}

3. Criação do Servlet

Aqui temos um servlet “RelatorioAlunoServlet” que é uma classe que trabalha com requisições e respostas HTTP em Java. Ao ser executado este servlet irá gerar o “RelatorioAluno.pdf” e abrir uma nova aba no Browser e dará a opção ao usuário de abrir ou salvar o relatório que foi gerado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package br.com.feltex.jasperreportsweb;
 
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@WebServlet("/RelatorioAlunoServlet")
public class RelatorioAlunoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,
			IOException {
		try {
 
			// Pega o caminho completo de onde a aplicação está rodando
			ServletContext servletContext = getServletContext();
			String diretorio = servletContext.getRealPath(File.separator) + "relatorios/";
 
			// Instaciar a classe que possui os métodos de geração de relatório
			GeraRelatorio geraRelatorio = new GeraRelatorio();
 
			// Chama o método que gera um array de bytes com o
			// conteúdo do arquivo PDF
			byte[] pdf = geraRelatorio.gerarPDF(diretorio);
 
			OutputStream outStream = response.getOutputStream();
			response.setHeader("Content-Disposition", "inline, filename=RelatorioAluno.pdf");
			response.setContentType("application/pdf");
			response.setContentLength(pdf.length);
			outStream.write(pdf, 0, pdf.length);
 
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

4. Página Principal

Por fim vamos fazer a página que chamará o Servlet responsável pela exportação do relatório em PDF.

1
2
3
4
5
6
7
8
9
10
11
<html>
<head>
<title>Seja bem vindo!</title>
</head>
<body>
	Geração de relatório:
	<br>
	<a href="RelatorioAlunoServlet" target="_blank">Clique aqui para
		gerar o relatório!</a>
</body>
</html>

Pronto. Agora você pode fazer a chamada do seu relatório.

Execute o seu projeto e clique no link:

5. Conclusão


Vimos que é possível realizar chamadas de uma relatório JasperReports em uma aplicação Java.
Caso você tenha uma aplicação JSE, as famosas aplicações desktop, você pode utilizar o método “main”
da classe GeraRelatorio. Isso gerará o arquivo PDF na destino “C:\temp”.


Então é isso amigos. Por hoje é só e vida que Segue!

Erros possíveis:

  • java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

  • Verifique se na pasta WEB-INF\lib da sua aplicação há o arquivo com o Driver do Banco de dados MySQL
    Um nome parecido com: “mysql-connector-java-5.1.9.jar”

  • “com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure”

  • Verifique a conexão com o Banco de Dados:
    1. No método getConexao da classe GeraRelatorio veja se todas as informações do seu banco de dados
    estão corretas. Verifique as variáveis: nomeBanco, usuario e senha.
    2. Se estiver tudo correta, veja se o seu banco de dados foi inicializado.

    Links relacionados


    Como criar relatórios com o JasperReports

    Site Oficial do JasperReports

    Não se esqueça de curtir este post nas rede sociais. Dê a sua contribuição social e ajude o autor:

    Deixe uma resposta

    Get Best Services from Our Business.