Chamar um relatório JasperReports através do Java


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/feltexco/public_html/felix/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

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 um comentário