olá Pessoal,
Neste post vou mostrar como gerar um relatório usando Ireport de onde as informações vem do BD. Além disso usaremos o Hibernate para conexão. É bem comum uma aplicação o cliente querer algum tipo de relatório. Para gerar os relatorios vamos usar Ireport e o JasperReport. Fiz uma pesquisa rapida na internet e vi alguns posts eram limitados à criar relatórios sem banco de dados, alguns com banco de dados, porem confusos de entender eu sentir dificuldade de compreender,levando em conta que nunca tivesse visto o assunto. E no “mundo real”, se gera relatório de uma base de dados, que na maioria das vezes é um banco de dados. Bom eu tentarei ser pratico no post e a teorica abordada aqui será o suficiente para saber o que significa se deseja se aprofundar no assunto sugiro usar o velho Google e participar das comunidades ou comprar um livro.
Outro ponto é que neste post será um Java Project normal, em outro post veremos como fazer isso em JEE em um projeto JSF.
Lets go..
Iniciando
Vou levar em conta, que você já tem um BD e uma tabela de onde deseja extrair a informação. Essa é a minha:
Requisitos:
Você precisa fazer o download do Ireport. A versão mais recente é 3.7.6 neste momento que escrevo o post.
Configuração
copiar os .jars que estã na pasta ext do Ireport para o projeto Java . Se for JEE, adicionar na pasta lib. Não esquecer do .jar para o banco de dados caso os dados relatório venha de um banco de dados, que é o mais real e comum.
-
commons-beanutils
-
commons-collections
-
commons-digester
-
commons-logging
-
groovy-all
-
iText
-
poi
-
jasperreports
Veja o que é Ireport & JasperReport (de forma simples e direta):
Ireport = é uma especie de IDE para criação do layout do seu relatório, ou seja, que cara vai ter e o que vai ter no seu relatório. E é aqui que fazemos a conexão com o banco de dados e consequentemente as tabelas e onde informamos quais colunas de uma tabela vai aparecer no relatório. Ele gera um arquivo .jrxml que será lido por JasperReport.
JasperReport = É uma API que permite nossa classe Java estabelecer uma “conversa” com o nosso layout-relatório. Isso vem a ser util para que sua aplicação Java, gere relatórios em um único ambiente. O usuário não percebe que foi gerado por algo “fora” Java(isso para aqueles que sabem o que é Java).
Na pratica como acontece:
– o desenvolvedor vai lá e cria o layout do relatório com base no proposito deste e põe logomarca da empresa e os dados que devem aparecer. Não precisa ser um webdesigner para desenhar o layout. E é no Ireport que falamos de onde vem a info se será de um BD ou não.
-No JasperReport apenas setamos onde está o layout .jrxml do Ireport e em seguida informamos e é aqui que informamos para qual tipo vamos exportar o relatório: PDF,XML, HTML, TEXT. Podemos dizer que será gerado um arquivo em um local especifico ou se for um JEE, que vai ser carregado pelo Browser.
Note: os nomes das variaveis da classe devem estar iguais aos nomes dos campos (fields) no layout do relatório.
Mão na massa
Vamos colocar mão na massa por partes:
Parte 1: ir para o Ireport (não vou enumerar porque vai ficar zuado a formatação)
vamos primeiro criar um arquivo no Ireport e seguir as instruções do assistente que é bem simples:
Na parte de banco de dados basta informar os de conexão do banco.
Feito isso temos o o relatório na tela e podemos edita-lo. Observe que já foi montando com os dados do banco de dados, ou seja, com os nomes da coluna e nos devidos locais, isso acontece no Ireport mais recente, as vezes antigas não faziam isso.
Parte 2: No Eclipse
Agora no Eclipse precisamos criar um projeto. Este será um Java Project.
Passos:
-Crie o Bean (os nomes entre o bean e os fields no layout devem ser os mesmos)
-Crie conexão com banco de dados (usamos o Hibernate)
-Crie um método List na classe DAO usando HQL com a query que deseja;
-importar para o projeto do eclipse o arquivo jrxml
-crie a classe main com exportando o relatório
Abaixo veja a estrutura do meu projeto
note: é recomendavel colocar o .jrxml em um package para terceiro não ter acesso, mas coloquei fora só para mostrar que é possível rodar fora sem problemas algum.
A classe Bean
- @Entity
- @Table(name=“tusuario”)
- public class Usuario {
- @Column
- private String nome;
- @Column
- private String email;
- @Id
- private int id;
- //gets/sets omitidos
Gerando o relatório
Essa é a classe principal que de fato faz gerar o relatório em PDF, pegando o layout definido no Ireport o JasperReport faz a conversão, veja:
- public class GerarRelatorio {
- public static void main(String[] args) throws JRException,SQLException {
- System.out.println(“Gerando relatório…”);
- UsuarioDAO usuarioDAO = new UsuarioDAO();
- List listaUs = usuarioDAO.listaTodos();
- JasperReport pathjrxml = JasperCompileManager.compileReport(“relatorio/reportex.jrxml”);
- JasperPrint printReport = JasperFillManager.fillReport(pathjrxml, null, new JRBeanCollectionDataSource(listaUs));
- JasperExportManager.exportReportToPdfFile(printReport, “relatorio/reportex.pdf”);
- System.out.println(“Relatorio gerado”);
- }
Entendendo o código acima
Minha classe UsuarioDAO: ela retorna todos os usuarios atraves de uma query HQL.
- public List listaTodos(){
- Query query = getSession().createQuery(“from Usuario”);
- List listaUs = query.list();
- return listaUs;
- }
Note: Informando o JRXML: Link interessante
Na classe relatório precisamos informar onde está o arquivo jrxml(nao esqueca de criar o folder)
- JasperReport report = JasperCompileManager.compileReport(“relatorio/reportcamilo.jrxml”);
Dica:
Se o jrxml estiver no mesmo package que a classe que gera o relatório o código acima é valido do contrario, deve ser conforme abaixo:
- “../relatorio/reportblog.jrxml”
Passando o DATA SOURCE
O data source nada mais eh que uma lista com os dados que serao inseridos no relatorio.
- JasperPrint print = JasperFillManager.fillReport(report, null,new JRBeanCollectionDataSource(listaUS));
obs. No primeiro argumento temos o caminho do layout do relatorio gerado pelo ireport, parametro pode ser null e criamos um data source com o conteudo da lista que tem o resultado HQL
- class dao
- public List listaUsuario(){
- Query query = getSession().createQuery(“from Tusuario”);
- List lista = query.list();
- return lista;
em outra classe ….
TUsuarioDAO tusuariodao = new TUsuarioDAO();
List listaUS = tusuariodao.listaUsuario();
em outra classe …
- TUsuarioDAO tusuariodao = new TUsuarioDAO();
- List listaUS = tusuariodao.listaUsuario();
Exportando para um Formato
Para exportar temos metodos para cada formato de exportacao
- JasperExportManager.exportReportToPdfFile(print,“relatorio/RelatorioUser.pdf”);
obs. No primeiro argumento temos a variavel que tem o relatorio preenchido e o caminho que deve ser exportado .So rodar a classe main, agora.
Download do Projeto
Vou ficando por aqui espero que tenham gostado do post.
See you next post. 🙂