Parte 1 – Parte 2 – Parte 3 – Parte 4 – Parte 5
Olá a todos. Quem acompanha o blog sabe que no último post – há duas semanas atrás – eu pedi que vocês sugerissem o tema para o próximo tutorial. Dentre os temas que eu listei, o de criação de relatórios em Java foi o que ganhou. Este tutorial, como o de Flex e Java, vai ser dividido em algumas partes. Eu poderia escrever em apenas um post tudo sobre o tema, mas preferi dividir o tutorial em várias partes pequenas – menores que os tutoriais sobre Flex – para não ficar muito cansativo.
Nesta primeira parte (provavelmente a maior de todas), iremos aprender sobre o framework para criação relatórios que iremos utilizar, o JasperReports, entendendo seu funcionamento, aprendendo a obter e instalar o iReport, que é o editor de relatórios e preparar nosso ambiente de desenvolvimento. Irei novamente utilizar o NetBeans como IDE de desenvolvimento, mas você que usa o Eclipse ou qualquer outra IDE Java não vai ter dificuldades para seguir o tutorial.
Na segunda parte, iremos criar uma base de dados de teste para popularmos nossos relatórios e vamos aprender como criar, compilar e utilizar os relatórios criados em aplicações desktop. Na terceira parte, iremos aprender a criar subrelatórios. Na quarta, iremos utilizar fontes de dados – data sources – diferentes, permitindo então que possamos listar dados nos relatórios que não vem somente de consultas SQL. Por fim, na quinta e última parte, iremos aprender como utilizar nossos relatórios em uma página Web. Após todas essas partes, vocês terão a bagagem necessária para caminharem sozinhos 😉
Então, vamos começar!
Existem atualmente na indústria diferentes frameworks e engines para criação e processamento de relatórios. Dentre as soluções pagas, talvez o Crystal Reports seja a mais conhecida. O Crystal Reports é uma solução robusta e que pode ser utilizada com diversas linguagens de programação. Outra solução paga que é muito utilizada por quem trabalha com Delphi é o Quick Reports. Em Java, existem atualmente duas soluções que são mais utilizadas. O JasperReports, que é o framework gratuito mais popular e que iremos utilizar nos nossos tutoriais e o BIRT (Business Intelligence and Reporting Tools) que também é gratuito e é mais utilizado por quem trabalha com o Eclipse.
Como iremos utilizar o JasperReports, vale a pena então entendermos um pouco do seu funcionamento. Quando trabalhamos com ele, nós criamos os arquivos de código fonte dos nossos relatórios utilizando XML, sendo que esse arquivo fonte – de extensão .jrxml – passa por um processo de compilação para gerar gerar arquivos .jasper, que por sua vez são interpretados pela engine do JasperReports. Nós não iremos escrever esses arquivos .jrxml na mão, pois iremos construir nossos relatórios utilizando um editor WYSIWYG (What You See Is What You Get), o iReport. Atualmente, o iReport pode ser obtido em duas versões. Uma delas é standalone (criada usando a NetBeans Platform), não precisando de nenhum outro programa para ser utilizada, enquanto a outra é um plugin para o NetBeans. Iremos utilizar a versão em plugin.
Bem, já falei demais. Chega de blablablá, vamos começar a por a mão na massa, afinal essa é a melhor forma de aprender :D. Primeiro vamos baixar o iReport. Acesse então o endereço http://jasperforge.org/projects/ireport e procure o link de download. Na versão atual do site, para fazer o download, basta clicar no botão “Download iReport Now“. Ao clicar no botão, serão apresentadas as versões disponíveis. Nós vamos escolher a última: Plugin for NetBeans IDE 3.x. A versão atual do iReport é a 3.7.5. Note que a versão do iReport sempre vai ser a mesma do JasperReports.
Quando terminar de baixar, descompacte o arquivo “iReport-3.7.5-plugin.zip” (a versão pode variar dependendo de quando você baixar o pacote). Serão extraídos 4 arquivos com a extensão .nbm (NetBeans Module). Esses arquivos são os pacotes dos plugins que serão instalados no NetBeans. Com o arquivo descompactado, abra então o seu NetBeans. Estou usando a útlima versão, 6.9.1. Com o NetBeans aberto, vá no menu Tools (Ferramentas) e escolha Plugins. Ao abrir o gerenciador de plugins, vá na aba Downloaded (Baixados?). É nessa aba que você instala os arquivos .nbm. Clique em Add Plugins (Adicionar Plugins). Veja a Figura abaixo:
Ao clicar no botão Add Plugins, um diálogo será aberto. Neste diálogo, procure então pelos arquivos .nbm que foram descompactados a partir do pacote que fizemos download. Assim que os encontrar, selecione todos e clique Open (Abrir). Veja a Figura abaixo.
Ao fazer isso, a janela do gerenciador de plugins será exibida novamente, só que agora com os quatro pacotes sendo exibidos. Deixe os quatro pacotes marcados e clique em Install (Instalar). Veja a Figura abaixo.
No primeiro passo do instalador, clique em Next (Próximo). Marque o checkbox para concordar com os termos da instalação e clique em Install. Aguarde o final da instalação. Quando a instalação terminar, provavelmente o NetBeans vai pedir para ser reiniciado. Reinicie a IDE. Quando o ambiente estiver aberto novamente, você vai perceber que na barra de ferramentas foi inserido um novo botão e um combobox. Ainda não iremos aprender para que eles servem, por enquanto entenda que eles fazem parte do plugin do iReport. Veja a Figura abaixo.
Com o iReport instalado, vamos agora preparar a estrutura de uma aplicação que iremos usar nas próximas partes do tutorial. Inicie a criação de um novo projeto no NetBeans escolhendo um projeto do tipo Java Application (Aplicação Java). Veja a Figura abaixo.
Clique em Next. Em seguida, dê o nome ao projeto, sugiro “TutorialRelatorios” (sem as aspas), escolha onde o projeto vai ser salvo e marque a opção Use Dedicated Folder for Storing Libraries (essa opção vai fazer com que todos os arquivos .jar utilizados fiquem contidos dentro do projeto, sob o diretório “lib”), configure as outras opções de acordo com a Figura abaixo e clique em Finish.
Ao clicar em Finish, o projeto vai ser criado. A partir de agora já poríamos começar a criar nossos relatórios no iReport, mas ainda faltam algumas configurações para que possamos fazer esses relatórios executarem dentro de uma aplicação. Para isso, ainda temos que adicionar o JasperReports no nosso projeto, bem como todas as suas dependências, além de termos também que organizar a estrutura do projeto para guardar nossos relatórios.
Primeiro vamos tratar dos .jars. Ao instalar os plugins do pacote do iReport, uma biblioteca padrão com os .jars é criada, mas ela vem com alguns erros, então vamos criar a nossa biblioteca para não termos dores de cabeça depois. Para isso, expanda o nó raiz do projeto e procure pelo nó Libraries (Bibliotecas). Clique com o botão direito e escolha Add Library (Adicionar Biblioteca). Veja a Figura abaixo.
Ao clicar em Add Library, o diálogo para a inserção de bibliotecas será exibido. Neste diálogo, clique no botão Create… (Criar). Veja a Figura abaixo.
Ao clicar em Create, será exibido um novo diálogo, onde o nome e o tipo da nova biblioteca devem ser definidos. Em Library Name (Nome da Biblioteca), configure como “JasperReports-3.7.5”, lembrando de mudar o número da versão caso esteja utilizando uma versão mais nova. Em Library Type (Tipo da Biblioteca), deixe como Class Libraries (Bibliotecas de Classe). Por fim, clique no botão OK. Veja a Figura abaixo.
Ao clicar em OK, será exibido o diálogo Customize Library (Personalizar Biblioteca?). É nele que indicaremos os .jars que fazem parte da nossa biblioteca. Quando instalamos o plugin do iReport no NetBeans é criada uma pasta chamada “ireport” dentro do diretório de instalação e é lá que estão os .jars que precisamos. Sabendo disso, clique então no botão Add JAR/Folder (Adicionar JAR/Diretório). Veja a Figura abaixo.
Com o diálogo aberto, procure pelo diretório onde a instalação do NetBeans foi feita. No meu caso, ele foi instalado em C:\Program Files (x86)\NetBeans 6.9.1\. Dentro deste diretório, procure pelo diretório chamado “ireport” e entre nele. O conteúdo do diretório é exibido na Figura abaixo, sendo que os diretórios que nos interessam são o diretório “libs” e o diretório “modules” destacados na Figura.
Primeiramente, acesse o diretório “libs”. Dentro dele, existe apenas um .jar (para a versão 3.7.5 do iReports). Selecione esse .jar (xalan.jar) e clique em Add JAR/Folder. Veja a Figura abaixo.
Ao clicar, o NetBeans vai perguntar se você deseja mesmo criar um diretório dentro do diretório “libs” (aquele que vai guardar nossas bibliotecas) com o nome de JasperReports-3.7.5 (o nome que demos para a biblioteca, lebram?). Responda Sim. Veja a Figura abaixo.
Ao aceitar a criação do novo diretório, a janela Customize Libraries voltará a aparecer, agora com o xalan.jar sendo mostrado na lista de .jars. Além da pasta “libs”, precisamos adicionar também os .jars que estão dentro da pasta “modules”. Então clique novamente no botão Add JAR/Folder da janela Customize Libraries e entre no diretório “modules”. Dentro dele existirão alguns .jars, mas não são eles que queremos. Note que além dos .jars, existe um diretório chamado “ext”. Entre nele. Neste diretório estão TODAS as dependências do JasperReports. Para facilitar as coisas, iremos selecionar TODOS os .jars. Em um projeto real, o mais sensato seria selecionar apenas os .jars que você tem certeza que vão ser utilizados. Entretanto, esta abordagem traz um problema. O Jasper utiliza nos bastidores muitos desses .jars, mesmo que a gente pense que não. Um exemplo é o spring.jar :(. E o pior! A cada versão, as dependências mudam (já tive vários problemas com isso). Minha recomendação é que você selecione TODOS os .jars, e depois, caso já utilize um deles (por exemplo o Hibernate) recomendo então que você atualize o .jar para a versão mais nova. Enfim, selecione TODOS e clique em Add JAR/Folder. Veja a Figura abaixo.
Ao fazer isso, novamente a janela Customize Library vai ser exibida, mostrando que todos os .jars foram inseridos. Clique em OK. Ao clicar, o diálogo Add Library será exibido novamente, mas agora com a nova biblioteca criada. Selecione-a (já vai estar selecionada por padrão) e clique em Add Library. Veja a Figura abaixo.
Fazendo isso, o diálogo será fechado e você vai perceber que todos os .jars aparecerão dentro do projeto. Veja a Figura abaixo.
Ok, já temos a biblioteca configurada com todos os .jars do JasperReports. Agora vamos criar um diretório no nosso projeto para conter as definições dos nossos relatórios (arquivos .jrxml). Para isso, clique com o botão direito no nó raiz do projeto e escolha Properties (Propriedades). Veja a Figura abaixo.
Ao clicar em Properties, a janela de propriedades do projeto será exibida. Nesta janela, selecione o primeiro nó à esquerda (Source – Fonte) e do lado direito, na tabela Source Package Folders, clique em Add Folder… (Adicionar Diretório). Veja a Figura abaixo.
Ao clicar em Add Folder, um diálogo será exibido. Neste diálogo, clique no botão localizado no canto superior direito. Veja a Figura abaixo.
Com isso, um novo diretório será criado. Dê o nome de “relatorios” (sem as aspas e sem acento agudo), selecione-o e clique em Open. Veja a Figura abaixo.
Ao clicar em Open, o novo diretório será inserido na tabela Source Package Folders. Na primeira coluna é apresentado o caminho do diretório, enquanto na segunda coluna é apresentado o label que vai identificar esse diretório dentro do projeto. Clique duas vezes na célula da segunda coluna que corresponde ao label do diretório criado e dê o nome de “Relatórios”. Cuidado! Ao terminar de editar o nome, tecle <ENTER>. Veja a Figura abaixo.
Ao fazer isso, o label será configurado (saindo da edição) e você agora deve clicar no botão OK das propriedades do projeto, aceitando assim as modificações que foram feitas. Veja a Figura abaixo.
Pronto, terminamos a configuração do projeto. Se tudo tiver dado certo, o novo diretório será exibido na estrutura do projeto, sendo que ele será identificado pelo label que foi configurado no passo anterior. Veja a Figura abaixo.
Com isso terminamos a primeira parte do tutorial. Aprendemos alguns conceitos sobre o JasperReports e como instalar o iReport. Aprendemos também a criar e a inserir uma nova biblioteca no projeto, sendo que essa biblioteca corresponde aos .jars necessários para nós utilizarmos o JasperReports no nosso programa (quando formos abrir o relatório a partir do programa). Além disso, aprendemos a criar um diretório dedicado aos nossos relatórios. Então é isso. Terminamos a primeira parte do tutorial. Com o cenário pronto, agora podemos começar a brincar com o iReport e criar nossos primeiros relatórios.
O projeto completo até o momento pode ser obtido neste link.
Fiquem ligados, a próxima parte vem ai 😉
Parabéns mais uma vez David, continue assim, pois serve de inspiração para ajudar-mos uns aos outros. Que Deus te abençoe a cada dia e te ilumine.
Você já é um dos meus favoritos.
Seu blog está muito legal, muito perfeito,didáctico
Melhor do que livros que se encontra por aí.
Sempre estarei acompanhando.
Bjs
Obrigado Andrea 😉
[]´s
Amigo Parabéns pelo tutorial, está me ajudando muito!
Fica com Deus.
Obrigado!
[]’s
Eu fiz tudo certinho, mas quando abro o jrxml o designer não abre e dá o seguinte erro:
– Error loading the report template:
null.
Oque poderia estar acontecendo ou ter feito errado?
Aproveito para parabenizar e agradecer pelo tutorial, pois o material sobre iReport está muito escasso, e o que tem é muito vago.
A propósito quando sai o tutorial 4 :D?
estou precisando aprender a gerar relatorio apartir de uma JTable.
Abraços
att.
Julio Cezar rutke
Oi Julio,
Nossa, que estranho. Nunca tinha visto esse erro. Pq vc não instala de novo o iReport? Talvez resolva.
Fico feliz que tenha gostado do turial. A idéia é essa mesma, ou seja, apresentar o básico que é difícil de achar na Web.
A parte 4 eu ia escrever amanhã, mas provavelmente não vai dar. Estou enrolado com um projeto, mas assim que tiver um tempinho livre eu escrevo.
As partes 4 e 5 são menores, então acho que dá p/ fazer as duas de uma vez só. Vamos ver hehe. Com a parte 4 vc vai colocar os dados da tabela em alguma coleção (um ArrayList por exemplo) e usá-la como Datasource.
Abraço!
Valeu David!
Vou tentar oque sugeriu, qualquer coisa volto a postar,
desde já agradeço a atenção
att.
Julio Cezar Rutke
Beleza Julio.
[]´s
Cara, Fechei desinstalei o iReport, todas as dependências, limpei o registro
Instalei novamente, comecei o projeto do zero e continua dando o mesmo erro.
você não tem idéia do que pode estar ocorrendo?
att
Julio Cezar Rutke
Vai o erro completo
———————————————————————
Error loading the report template
Message:
java.lang.reflect.InvocationTargetException
Level:
SEVERE
Stack Trace:
null
java.awt.EventQueue.invokeAndWait(EventQueue.java:998)
javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1320)
com.jaspersoft.ireport.designer.JrxmlVisualView.run(JrxmlVisualView.java:526)
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:602)
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1084)
net.sf.jasperreports.engine.design.JasperDesign.getEventSupport()Lnet/sf/jasperreports/engine/design/events/JRPropertyChangeSupport;
com.jaspersoft.ireport.designer.ReportObjectScene.setJasperDesign(ReportObjectScene.java:145)
com.jaspersoft.ireport.designer.ReportDesignerPanel.setJasperDesign(ReportDesignerPanel.java:154)
com.jaspersoft.ireport.designer.JrxmlVisualView$3.run(JrxmlVisualView.java:530)
java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:125)
java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Oi Julio,
Infelizmente não tenho idéia. Vc está usando qual versão do NetBeans? E a versão do iReport?
Se estiver usando algumas versão antiga, tente atualizar.
[]´s
NetBeans eu utilizo a versão 6.8, do iReport utilizo a versão 3.7.5.
att.
Julio Cezar Rutke
Julio, tente atualizar o NetBeans para ver se o problema resolve.
A versão 6.8 já tem quase 1 ano de “idade”. Pode ser algum problema relacionado à versão.
[]´s
Ok, Atualizarei amanhã de manhã,
depois posto os resultados!
agradeço a atenção
att.
Julio Cezar Rutke
Beleza Julio!
[]´s
Prezado David,
Primeiramente parabenizar sua iniciativa em posta esse passo a passo de como fazer relatório usando netbeans e iReport. Estou precisando de um exemplo Web, no meu projeto instalei o plugin iReport no netbeans e estou precisando de exemplo das classes pra gerar o relatório em uma página JSF. É possivel me ajudar?
Oi Roberto,
Muito obrigado 😉
Quanto à sua dúvida, na quinta parte do tutorial irei tratar sobre isso. Estou enrolado com um projeto que estou trabalhando, mas acho que essa semana eu consigo escrever a quarta e a quinta parte do tutorial.
[]´s
Fiz um relatório pelo iReport e chamei ele no Netbeans… funciona beleza, mas quando gero o .jar o jasperviewer não aparece, parece que não ta encontrando o .jrxml ou então ta faltando algo… oq pod ser?
Oi Cleber,
Por favor, siga os tutoriais.
Tenho certeza que suas dúvidas serão solucionadas.
[]´s
David, Fiz o relatorio pelo Ireport e netbeans e coloque na minha aplicação uma barra de menu relatorio então ao usuario clicar em relatorio de livros por exemplo quero que ele chame o relLivros.JASPER, e não estou conseguin fazer isso. Podes me ajudar?
Oi Leandro,
Basta vc adicionar um ActionListener no seu botão, e no implementação do método ActionPerformed vc usa o código que o relatório é executado. Você pode encapsular aquele código em um método para ser reutilizado.
[]´s
Davi boa tarde,
Cara incrivel estava procurando na net um tutorial para gerar relatorios semana passada, dai encontrei o seu incompleto mais sabado vi que vc atualizou o tutorial dai resolvi meu problema rsrs valeu!!!
Pode me tirar uma duvida??? fiz um relatorio que traz na mes e vendas no mes, dai crei uma variavel para armazenar o total de vendas, ai queria inclui outra coluna com a % de vendas mais quando chamo a variavel e coloco em Detail parece que ela ainda não tem o total de vendas ai não consigo fazer o calculo correto.
Oi Silvio,
Fiquei feliz de saber que o tutorial foi útil para você.
Como você configurou a sua variável?
[]´s
David, você está de parabéns!!!! Excelente tutorial, dentre todos sobre o tema de Relatórios, esse seu é, sem duvida, o mais completo, simples, e extremamente fácil de se compreender, bem detalhado, bem comentado. Enfim Excelente.
Sou aluno do Curso de Analise de Sistemas e Tecnologias da Informação FATEC, cursando Bacharelado e agradeço pelo tutorial, ajudando no desenvolvimento de algumas aplicações, principalmente pela falta de um relatório com um visual mais amigável e completo!
Parabéns mais uma vez…. Já adicionado nos favoritos e sempre de olho em novas atualizações!
Oi Leonardo,
Obrigado! Fico feliz que tenha gostado e que tenha sido útil!
Agradeço a inscrição no blog tbm 😉
[]´s
Davi na parte que você diz pra “adicionar Jars” na minha pasta do NetBeans não está incluído a pasta do IReport. Como faço agora??
Att,
Karien barbosa
Oi Karien,
Não entendi direito sua dúvida. Você quer saber sobre a inserção dos jars do JasperReports no seu projeto? Para poder fazer isso ou você tem que instalar o plugin do iReport no NetBeans ou pegar os .jar que vem na distribuição completa do JasperReports. Se optar pela primeira opção, que é a explicada no tutorial, após instalar o plugin, existirá um diretório chamado ireport dentro do diretório de instalação do NetBeans. Releia o tutorial, vc deve ter deixado passar algum detalhe.
[]’s
Davi, em primeiro lugar parabéns pelo tutorial. Muito bom mesmo cara.
Estou usando o banco de dados postgrees através de uma conexão JDBC, como ficaria a classe ConectionFactory? e a passagem de parametros para esse tipo de conexão.
Pergunto isso porque no seu tutorial vc utiliza o MySql.
Como faço para adptar esse código para uma conexão JDBC?
Oi Paulo,
Obrigado! A classe ConnectionFactory ficaria quase igual. No bloco estático, onde é carregado a classe do driver do MySQL, vc deve carregar a classe do driver do Postgres (não sei qual é pq nunca usei). No Dao genérico, vc precisa alterar o construtor para passar a URL de conexão correta para o Postgres. Novamente, não sei qual é a sintaxe dela. Essas informações você encontra no site de download do Driver JDBC do Postgres (http://jdbc.postgresql.org/) que, a propósito, precisa ser baixado e configurado no seu projeto.
[]’s
Parabéns pela sua explanação!
David estou implementando uma aplicação web no netbeans ( modelo mvc com JSF) e tenho como banco de dados o Postgres. A minha dúvida é a seguinte: Como faço conexão do postgres com o ireport para gerar relatório de dados provenientes deste banco?
Att,
Kátia
Oi Kátia,
Da mesma forma que foi feito com o MySQL. Vc precisa baixar o driver o Postgres. O processo é muito parecido com o que já foi feito.
[]’s
Excelente trabalho David.
Faço minhas as palavras da andrea.
Agradeço pela boa vontade de compartilhar seus conhecimentos. Imagino o trabalho que deve ter tido para fazer tudo tão bem explicado e com fotos.
Estava a uma semana “dando cabeçada” para fazer relatórios com o JasperReports e o iReport.
Encontrei seu site ontem e no mesmo dia consegui.
Não sei se já está dando aulas, mas com certeza já nasceu com o “dom” para lecionar.
Muito obrigado.
Oi William,
Muito obrigado! Fico feliz que tenha sido útil.
Atualmente sou professor do IFSP.
[]’s
Bom dia David,
Os erros no qual estavam acontecendo quando postei no GUJ esquece, pois tudo foi uma questão de configuração correta das bibliotecas no NetBeans. Então comecei do zero seguindo exatamente o seu tutorial passo a passo e está dando tudo certo. Ainda existem alguns erros mais nada comparado com que estava ocorrendo anteriormente. Muito obrigado, você tem ajudado muito as pessoas, que o Senhor posso olhar pelos seus caminhos hoje e sempre.
Muito obrigado,
Elcio
Legal Elcio!
Obrigado!
[]’s
Sem palavras para agradecer o seu tutorial, procurei de tudo pela internet mas tudo que eu encontrava eram coisas meio ‘soltas’, quando se sabe 50% do assunto ainda consegue destrinchar porém quem está aprendendo agora como eu se não fosse esse tutorial até agora não tinha saído do lugar, parabéns mais uma vez pela sua boa vontade em disseminar conhecimento.
att,
Thiago Emanuel
Cara, tenho que te homenagear! perdi dois dias só tentando resolver isso e vc me ajudou a descobrir que o erro estava no fato de que eu estava utilizando bibliotecas antigas. atualizei para versão atual e rodou legal!
Deus te abençoe!
Sandro
Muito embora seja uma postagem antiga, hj me ajudou muito….Vlw msm kra ! Parabéns !
Me ajudou muito. Obrigado!