Anda di halaman 1dari 17

Revista Eletrnica da Faculdade Metodista Granbery

http://re.granbery.edu.br - ISSN 1981 0377


Curso de Sistemas de Informao - N. 10, JAN/JUN 2011

ESTRATGIAS PARA O DESENVOLVIMENTO DE RELATRIOS UTILIZANDO O


JASPERREPORTS COM IREPORT

Elio Lovisi Filho1

RESUMO

Este artigo apresenta o desenvolvimento de um relatrio para um sistema, implementado em


Java, empregando-se duas diferentes estratgias. Apresentam-se aqui as tcnicas e as
ferramentas empregadas neste desenvolvimento, em especial o framework JasperReports e o
programa iReport, bem como os resultados obtidos durante a realizao do processo.
PALAVRAS-CHAVE: JASPERREPORTS, IREPORT, RELATRIOS, JAVA

ABSTRACT
This article presents the development of a report for a system, implemented in Java, using
two differents strategies. The techniques and the tools used in this development are presented
here, specially the JasperReports framework and the iReport program, as well as the results
gotten during his accomplishment.
KEY-WORDS: JASPERREPORTS, IREPORT, REPORTS, JAVA

1 - Mestre em Informtica pelo Instituto Tecnolgico de Aeronutica, Professor do curso de


Sistemas de Informao da Faculdade Metodista Granbery e do curso de Redes de
Computadores da Faculdade Estcio de S, e ainda, Analista de Sistemas da Prefeitura de
Juiz de Fora. Email: eliolovisi.professor@gmail.com
1. INTRODUO

No desenvolvimento de sistemas de informao uma das tarefas de mais comuns


a elaborao de relatrios. Esta forma de apresentao de dados muito relevante, sendo
bastante solicitada pelos usurios [Gonalves 2008].
Em geral, o desenvolvimento de relatrios envolve a definio do design e
mapeamento de dados para campos dentro de um layout. Para tanto, existem diversas
ferramentas para auxiliar neste processo.
Atualmente, diversas ferramentas open-source com o esse objetivo esto
disponveis, e to ou mais robustas que as comerciais, com a grande convenincia de serem
gratuitas. o caso de algumas ferramentas empregadas neste trabalho como o JasperReports
e o iReport [Shahi 2007] .
Neste artigo ser apresentado um tutorial do desenvolvimento de relatrios para
uma aplicao Java empregando essas ferramentas. Para permitir o melhor entendimento,
ser utilizado o software apresentado no artigo de Lovisi e Castro (2009).
As ferramentas empregadas no desenvolvimento deste tutorial foram:
a IDE NetBeans 6.9, disponvel em http://www.netbeans.org/;
o framework JasperReports verso 4.0, que pode ser obtido em
http://jasperforge.org/projects/jasperreports; e
o aplicativo iReport verso 4.0, que pode ser obtido em
http://www.jasperforge.org/projects/ireport .
Nos prximos itens ser apresentada uma viso geral do framework
JasperReports e do iReport. Aps isso, so mostradas duas formas distintas para a criao de
um relatrio em um aplicativo Java empregando essas ferramentas.

2. JASPERREPORTS

O JasperReports um framework open-source para gerao de relatrios


desenvolvido em Java, podendo ser empregado em aplicativos de diferentes plataformas,
como desktop e Web. [Gonalves 2008]
Esse framework apresenta vrios recursos para facilitar a organizao de dados e
formatao de contedo. Possibilita tambm a gerao de relatrios em diversos formatos,
como PDF, HTML, XLS, CSV e XML.

2
Segundo Shahi (2007), a gerao de relatrios neste framework envolve os
seguintes componentes e atividades:
A parte grfica (design) do relatrio definida em um arquivo especfico no
formato XML. Para tanto, existem tags XML que obedecem a uma rgida estrutura,
vocabulrio e restries declarados em um arquivo DTD (jasperreports.dtd). Usando XML, o
designer pode definir textos estticos, imagens, linhas, formas geomtricas, entre outros e
suas localizaes dentro do relatrio. Pode-se tambm definir os campos que sero
preenchidos dinamicamente a partir de dados de um aplicativo.
Aps isso, o arquivo XML compilado, gerando um arquivo .jasper. Isto
implica na compilao de todas as expresses Java definidas no arquivo XML, sendo ento
realizadas vrias verificaes estticas (em tempo de compilao).
Esse arquivo .jasper, utilizado por diferentes objetos JasperReports para
gerao de relatrio: JasperReport, JasperPrint e JasperViewer; e
Os dados necessrios para o relatrio podem ser obtidos de diferentes fontes,
como um SGBD ou um arquivo XML. Sendo assim, o framework suporta vrios tipos de
datasources (fonte de dados) por meio de uma interface especfica chamada JRDataSource.
A figura a seguir representa as atividades necessrias ao processo de gerao
de relatrios empregado o framework.

Figura 1: Gerao de relatrios utilizando o framework JasperReport [JasperForge 2007].

3
3. IREPORT

A elaborao do formato (design) do relatrio empregando cdigo XML , em


geral, uma tarefa bastante trabalhosa. Para automatizar este processo existem diferentes
ferramentas como, por exemplo, o iReport [Toffoli 2008].
Esta ferramenta permite definir o design do relatrio dentro de um ambiente
grfico, permitindo a fcil utilizao dos recursos do framework JasperReports. A aplicao
do iReport permite desenvolver relatrios elaborados sem utilizar diretamente o cdigo XML,
o qual todo gerado automaticamente. O ambiente ainda oferece atalhos para tarefas de
compilao e visualizao do relatrio, facilitando assim a elaborao do relatrio.
A figura a seguir apresenta a tela principal da ferramenta. Neste trabalho ser
empregada a verso 4.0 da ferramenta.

Figura 2: Tela principal do iReport

4
Na parte esquerda da tela, apresentado o Report Inspector, no qual so exibidos
os componentes do relatrio, como as sees (bands), campos (fields), variveis (variables),
entre outros.
Na direta, exibida a paleta de componentes (Palette), a qual permite a incluso
dos mesmos ao relatrio apenas arrastando o componente desejado para o relatrio que est
sendo desenvolvido na parte central da tela.
Acima do relatrio exibida a barra de ferramentas, que permite a configurao
dos bsica de alguns componentes do relatrio, a compilao e a exibio de diferentes
formatos do mesmo (Design, XML e Preview).

4. PRIMEIRO EXEMPLO DE CRIAO DE RELATRIOS EMPREGANDO


IREPORT E JASPERREPORTS

Agora, ser apresentado um exemplo da aplicao das ferramentas apresentadas


anteriormente na gerao de um relatrio. Para tanto, ser acrescentado um relatrio a uma
aplicao desenvolvida anteriormente, a qual permite a manuteno de dados de
departamentos [Lovisi e Castro 2009]. Este relatrio apresenta os dados (id, nome, rea) os
dados de todos departamentos cadastrados no sistema.
Conforme citado anteriormente, o desenvolvimento de um relatrio envolve a
criao da sua interface no iReport, e a incluso de cdigo Java aplicao existente para
preencher e exibir o relatrio. Neste cdigo sero necessrios comandos do framework
JasperReports.
Essas atividades sero detalhadas nas prximas sees.

4.1. CRIAO DA CONEXO COM O BANCO DE DADOS

Na tela principal do iReport (neste exemplo ser utilizada a verso 4.0), deve-se
criar uma nova conexo selecionando a opo "Report Datasources", da barra de
ferramentas, conforme a prxima figura.

Figura 3: Opo Report DataSources

5
Ser exibida, ento, a tela a seguir que permite a criao a gerncia das conexes.
Nela, deve-se selecionar a opo "New".

Figura 4: Conexes com banco de dados

Na tela seguinte, deve-se selecionar "Database JDBC Conection", e aps isso,


"Next". Ser exibida ento uma tela similar a prxima figura.

Figura 5: Criao das Conexes JDBC

6
Deve-se informar o nome (Name) para a conexo, escolher o driver MySQL em
JDBC Driver e substituir "MYDATABASE" pelo nome do banco de dados, na opo JDBC
URL. Neste exemplo utilizou o nome "exemplohibernate" para a conexo.
Em username e password, informa-se o usurio e a senha do banco de dados.
Marcar tambm a opo "Save password".
Se quiser, pode-se verificar se a conexo est correta na opo "Test".
Finalmente, guarde os dados da conexo na opo "Save".

4.2. CRIAO DO DESIGN DO RELATRIO

Aps criada a conexo, deve-se desenvolver o layout do relatrio. Para isso, crie
um novo documento JasperReports usando o item de menu "File/New...". Ser apresentada
ento a seguinte tela.

Figura 6: Criao do Relatrio

Selecionar a opo "Blank A4", conforme a figura anterior, e aps isso, a opo
"Open this Template". Na tela seguinte, d o nome "rptDepartamentos" para o arquivo,

7
selecione a opo "Next" para que, finalmente, seja criado o arquivo. O programa ir criar o
arquivo rptDepartamentos. jrxml no diretrio que foi indicado.
Aps isso, apresentado ento um modelo de relatrio com diferentes bandas ou
sees (bands). Um relatrio JasperReport pode ser dividido nas seguintes sees:
[Gonalves 2008]
1. Title: nesta banda define-se o ttulo do relatrio;
2. Page Header: apresentada no comeo de cada pgina impressa;
3. Column Header: banda apresentada no comeo de cada coluna;
4. Detail 1: local de exibio dos dados de cada item de registro;
5. Column Footer: apresentada aps cada coluna;
6. Page Footer: rodap de cada pgina;
7. Last Page Footer: banda apresentada ao final da ltima pgina;
8. Summary: seo de sumrio, apresentada somente no trmino do relatrio; e
9. Backgound: permite a insero de marcas d'gua, por exemplo.
A prxima figura apresenta um modelo de relatrio criado pelo iReport. Observe
que o relatrio possui diferentes sees j definidas pela ferramenta. Se o usurio desejar,
pode remover alguma seo que no seja necessria, ou ainda alterar suas propriedades.

Figura 7: Sees do Relatrio

8
Na barra de ferramentas, selecionar a conexo que deseja-se utilizar, conforme
mostra a prxima figura. Neste tutorial empregou-se a conexo exemplohibernate, criada no
item anterior.

Figura 8: Escolha da Conexo

Para criar-se os campos, selecione a opo Report Query conforme a figura


abaixo.

Figura 9: Opo Report Query

Ser exibida, ento, uma tela que recupera automaticamente os atributos do banco
de dados, facilitando a criao dos campos do relatrio. Na parte superior da tela, digite uma
consulta SQL para recuperar todos os dados da tabela Departamento. Sero exibidos ento
todos os atributos da tabela, conforme a prxima figura. Selecione, ento a opo Ok.

Figura 10: Criao dos Campos

9
Observe que em Report Inspector, na parte esquerda da tela, so exibidos os
campos (Fields), as sees, os parmetros (Parameters), as variveis (Variables) do relatrio,
como pode ser observado na prxima figura.

Figura 11: Campos do relatrio

Arraste os campos para a seo Detail 1 do formulrio. Com isso, define-se quais
os campos sero dinmicamente exibidos no relatrio.
O iReport possui vrias facilidades para auxiliar na melhoria do visual do
relatrio. Para tanto, pode-se acrescentar diferentes componentes como textos, imagens e
linhas, alterar fontes, mudar alinhamento, remover sees, entre outros para aprimorar o
projeto do relatrio.
Para criar os textos estticos do relatrio utiliza-se o componente Static Text da
paleta (Palette). Na parte inferior direita do relatrio foi includa a numerao automtica das
pginas, utilizando o componente Page number da paleta.
O relatrio desenvolvido no exemplo possui somente as sees: Title, Column
Header, Detail 1 e Page Footer. As demais sees foram retiradas do relatrio para melhorar
a aparncia do mesmo.
A figura a seguir apresenta o layout desenvolvido para o relatrio.

10
Figura 12: Layout do relatrio

Finalmente, deve-se compilar o relatrio (extenso .jrxml) para gerar o arquivo


que ser utilizado no aplicativo, que possui a extenso ".jasper". Para tanto, seleciona-se a
opo Compile Report da barra de ferramentas.

Figura 13: Opo Compile Report

O programa ir gerar o arquivo rptDepartamentos.jasper no mesmo diretrio de


trabalho. Se quiser testar o relatrio, selecione a opo Preview.

5. ALTERAO DA APLICAO

Conforme citado, ser utilizada uma aplicao desenvolvida anteriormente para


exemplificar o desenvolvimento do relatrio. Esta aplicao permite a gerncia de
departamentos e foi desenvolvida aplicando-se o framework Hibernate para persistncia de
dados, alm do SGBD MySQL [Lovisi e Castro 2009].
Abra o projeto no NetBeans, verso 6.9 ou superior, e crie um novo pacote
(Package) chamado "Report" dentro de "Source Package".
Aps isso, inclua o framework JasperReports no seu projeto. Para tanto, selecione
a opo Tools/Library. A seguinte tela ser exibida.

11
Figura 14: Gerncia de bibliotecas no NetBeans

Crie uma nova biblioteca, acessando a opo new Library da tela anterior.
Atribua para ela o nome Jasper e adicione os arquivos necessrios. Alm da biblioteca do
JasperReports (jasperreports-3.7.0.jar) so necessrias tambm outras bibliotecas:
Commons BeanUtils Component (verso 1.7 ou posterior);
Commons Collections Component ( verso 2.1 ou posterior);
Commons Javaflow (verso Sandbox );
Commons Logging Component ( verso 1.0 ou posterior);
Commons Digester Component ( verso 1.7 ou posterior);
Groovy ( verso 1.5.5 ou posterior); e
iText ( verso 1.3.1 ou posterior). [JasperForge 2007]
De acordo com a funcionalidade necessria, podero ser requeridas ainda outras
bibliotecas. Aps isso, adicione a biblioteca criada ao projeto.
Agora, dentro do pacote Report, crie uma classe para preencher os dados e exibir
o relatrio, chamada GerarRelatorioDepartamentos, com um construtor pblico e inclua nela
o seguinte mtodo.

12
1. public void gerar( ) throws ClassNotFoundException, SQLException{
2. Map parameters = new HashMap();
3. InputStream reportStream = this.getClass().getResourceAsStream
("\\rptDepartamentos.jasper");
4. try {
5. Class.forName("com.mysql.jdbc.Driver");
6. Connection conn =
DriverManager.getConnection("jdbc:mysql://localhost:3306/exemplohibernate
", "root", "root");
7.
8. JasperReport jrpt = (JasperReport)
JRLoader.loadObject(reportStream);
9. JasperPrint jasperPrint = JasperFillManager.fillReport(jrpt, parameters,
conn);
10. JasperViewer.viewReport(jasperPrint, false);
11. } catch (JRException e) {
12. e.printStackTrace();
13. }
14. }

No cdigo acima, podemos observar que na linha 3, informado o arquivo .jasper


do relatrio, o qual dever estar no mesmo pacote. Na linha 8, criado um relatrio
utilizando esse arquivo. Na linha seguinte, os dados so inseridos e na linha 10, o relatrio
exibido.
Na tela principal da aplicao, inclua uma nova opo (boto ou item do menu) e
no evento mouseClicked inclua o cdigo abaixo.
1. private void jBtnRelatorioMouseClicked(java.awt.event.MouseEvent evt) {
2. GerarRelatorioDepartamentos gerarRelatorioTodosClientes = new
GerarRelatorioDepartamentos();
3. try {
4. gerarRelatorioTodosClientes.gerar();
5. } catch (Exception ex) {
6. ex.printStackTrace();
7. }
8. }
Finalmente, copie o arquivo compilado do relatrio (rptDepartamentos. jasper)
para o pacote Report e execute a aplicao. O sistema dever, ento, exibir uma tela similar a
mostrada na prxima figura.
Observe que o sistema permite, alm de imprimir o relatrio, exportar o mesmo
em diferentes formatos, como pdf ou xls.

13
Figura 15: Exibio do relatrio no JasperViewer

6. UTILIZANDO UM DATA SOURCE DA PRPRIA APLICAO

Observe que no exemplo desenvolvido at ento os dados dos departamentos so


recuperados a partir de uma consulta do prprio relatrio. Pode-se desenvolver uma soluo
na qual os dados dos objetos sejam recuperados a partir de mtodos existem na prpria
aplicao.
Para tanto necessrio desenvolver uma nova fonte de dados (Data Source),
criando-se, no pacote Report, a classe DepartamentoDataSource. Esta classe deve
implementar a interface JRDataSource (implements JRDataSource). O NetBeans ir sugerir
que sejam implementados todos os mtodos abstratos, criando automaticamente os mtodos a
seguir.

14
1. public boolean next() throws JRException {
2. throw new UnsupportedOperationException("Not supported yet.");
3. }
4.
5. public Object getFieldValue(JRField jrf) throws JRException {
6. throw new UnsupportedOperationException("Not supported yet.");
7. }

Aps isso, crie atributos e altere o construtor da classe conforme apresentado


abaixo.
1. private Object valorAtual;
2. private Iterator todosDepartamentos;
3. private boolean irParaProximoDepartamento = true;
4.
5. public DepartamentoDataSource(List lista) {
6. super();
7. this.todosDepartamentos = lista.iterator();
8. }

Ainda na classe DepartamentoDataSource, altere o cdigo dos mtodos next() e


getFieldValue conforme mostrado abaixo.
1. public boolean next() throws JRException {
2. valorAtual = todosDepartamentos.hasNext() ? (Departamento)
todosDepartamentos.next() : null;
3. irParaProximoDepartamento = (valorAtual != null);
4. return irParaProximoDepartamento;
5. }
6.
7. public Object getFieldValue(JRField jrf) throws JRException {
8. Object valor = null;
9. Departamento departamento = (Departamento) valorAtual;
10.
11. if ("id".equals(jrf.getName())) {
12. valor = departamento.getId();
13. }
14. if ("nome".equals(jrf.getName())) {
15. valor = departamento.getNome();
16. }
17.
18. if ("area".equals(jrf.getName())) {
19. valor = departamento.getArea();
20. }
21. return valor;
22. }
Na segunda linha, o valor corrente do registro que est sendo processado
atribudo ao atributo valorAtual. Este objeto utilizado no mtodo seguinte para obter o valor
dos campos a partir do nome que foi atrivudo a cada um deles no iReport.
15
Retorne para a classe GerarRelatorioDepartamentos, e inclua o mtodo abaixo.
1. public void gerar(ArrayList<Departamento> todosDepartamentos){
2. Map parameters = new HashMap();
3.
4. InputStream reportStream =
this.getClass().getResourceAsStream("\\rptDepartamentos.jasper");
5. try {
6. JasperReport jrpt = (JasperReport) JRLoader.loadObject(reportStream);
7. DepartamentoDataSource clienteContratoDataSource = new
DepartamentoDataSource (todosDepartamentos);
8. JasperPrint jasperPrint = JasperFillManager.fillReport(jrpt, parameters,
clienteContratoDataSource);
9. JasperViewer.viewReport(jasperPrint, false);
10. } catch (JRException e) {
11. e.printStackTrace();
12. }
13. }

Na linha 7 do cdigo acima criado um objeto da classe


DepartamentoDataSource. Este objeto utilizado na linha 8 para informar os dados do
relatrio que exibido pelo comando seguinte.
Finalmente, na tela principal da aplicao, altere o cdigo da opo criada para
impresso conforme o cdigo abaixo.
1. private void jBtnRelatorioMouseClicked(java.awt.event.MouseEvent evt)
{
2. GerarRelatorioDepartamentos gerarRelatorioTodosClientes = new
GerarRelatorioDepartamentos();
3. try {
4. gerarRelatorioTodosClientes.gerar((ArrayList<Departamento>) new
CtrManterDepartamento().carregarDepartamentos());
5. } catch (Exception ex) {
6. ex.printStackTrace();
7. }
8. }

7. CONSIDERAES FINAIS

Neste artigo apresentou-se o desenvolvimento de um exemplo de relatrio para


um sistema implementado na linguagem de programao Java. Para tanto, empregou-se a
ferramenta iReport e o framework JasperReports.

16
A utilizao da ferramenta iReport apresentou bons resultados, agilizando o
desenvolvimento do projeto do relatrio. Alm disso, o emprego do framework simplificou os
processos de gerao e exibio do relatrio.
A segunda forma utilizada para gerao do relatrio, empregando-se um data
source, foi considerada mais adequada, pois utiliza a conexo do prprio sistema com o
banco de dados, facilitando a manuteno do software.
Prope-se a aplicao, em trabalhos futuros, das ferramentas apresentadas para o
desenvolvimento de aplicaes de outras plataformas, em especial, para softwares Web.

8. REFERNCIAS BIBLIOGRFICAS

GONALVES Edson. Dominando Relatrios JasperReports com iReport. Primeira


edio. So Paulo: Cincia Moderna, 2008. 368 p.

LOVISI FILHO, Elio; CASTRO, Gustavo Mendes. Tutorial sobre a Construo de


Aplicaes empregando Java, Hibernate e MySql. Revista Eletrnica da Faculdade
Metodista Granbery - N. 6, JAN/JUN 2009. Disponvel em: < http://re.granbery.edu.br>
Acesso em: 21 jan. 2011.

JASPERFORGE. JasperReports: Tutorial. 2007. Disponvel em:


<http://jasperforge.org/projects/jasperreports>.Acesso em: 25 jan. 2011.

SHAHI, Kumar Abhishek JasperReports by Example. 2007. Disponvel em:


<http://groups.google.com/group/abhi_and_friends/web/jasperbyexample>.Acesso em: 12
fev. 2011.

TOFFOLI, Giulio. Report Getting Started. 2008. Disponvel em:


<http://jasperforge.org/projects/ireport> .Acesso em: 01 fev. 2011.

TOFFOLI, Giulio. iReport Designing a report. 2010. Disponvel em:


<http://jasperforge.org/projects/ireport> .Acesso em: 04 fev. 2011.

17