TI - APOSTILA - Geração de Relatório com JasperReports e iReport

download TI - APOSTILA - Geração de Relatório com JasperReports e iReport

of 12

Transcript of TI - APOSTILA - Geração de Relatório com JasperReports e iReport

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    1/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Gerao de Relatrio com JasperReports e iReport

    Carlos Feliz Paixo

    Este documento descreve a instalao, configurao e utilizao de duas ferramentas open-source para agerao de relatrios em Java:JasperReports eiReport. realizado um exemplo de gerao de relatrio

    no formato PDF, utilizando uma base de dados em Firebird, demonstrando assim o poder dessasferramentas.

    Introduo

    Dentre as tarefas de um sistema, a mais comum a gerao de relatrio. Presente na maioria dossistemas, mas muitas vezes no suficientemente reconhecida, esta tarefa constitui um importantemdulo do sistema.

    Basicamente, o processo de gerao de relatrio resume-se na definio do design e mapeamento dedados para campos dentro de um layout definido. Nesse contexto, surgiram ferramentas comerciais comintuito de auxiliar neste processo. No passado, essa rea foi completamente dominada por produtoscomerciais, como o Crystal Reports, que com o passar do tempo tornaram-se cada vez mais robustos no

    que diz respeito a novas funcionalidades, como o suporte a diferentes tipos de fontes de dados. Porm, oque se v hoje o surgimento de ferramentas open-source com o mesmo objetivo, e to ou maisrobustas que as comerciais, com a grande convenincia de serem gratuitas. o caso das ferramentasfoco deste documento: JasperReports e iReport..

    Links:

    JasperReports: http://jasperreports.sourceforge.netiReport: http://ireport.sourceforge.net

    JasperReports

    JasperReports um poderoso framework open-source para gerao de relatrios. Escrito em Java, essabiblioteca apresenta grande habilidade na organizao e apresentao de contedo, permitindo a gerao

    dinmica de relatrios em diversos formatos, como PDF, HTML, XLS, CSV e XML, podendo ainda serutilizada em qualquer aplicao Java, incluindo aplicaes desktop, Web e distribudas.

    Funcionamento

    Antes de iniciar a utilizar a biblioteca JasperReports, necessrio a compreenso de seufuncionamento (Veja a fig. 1).

    O design do relatrio, incluindo a localizao dos campos a serem preenchidos e seus respectivosnomes, para futuro mapeamento, so definidos em um arquivo XML atravs de tags XML que obedecema uma estrutura, vocabulrio e restries declarados em um arquivo DTD (jasperreports.dtd). UsandoXML, o designer pode definir textos estticos, imagens, linhas, formas geomtricas, como retngulos eelipses, e suas localizaes dentro do relatrio. Pode-se, ainda, e principalmente, definir os campos quesero preenchidos dinamicamente a partir de uma base de dados. O arquivo XML precisa ser compilado,gerando um arquivo . jasper , isto , contendo a verso compilada do cdigo XML. Isto implica nacompilao de todas as expresses Java definidas no arquivo XML, sendo realizadas vrias verificaesem tempo de compilao.

    Diferentes objetos JasperReports so usados para representar as etapas do processo de gerao derelatrio:

    JasperDesign: Representa a definio do relatrio. A partir do template XML criado umJasperDesign.

    JasperReport: Representa o JasperDesign compilado. O processo de compilao verifica o design dorelatrio e compila o design em um objeto JasperReport.

    JasperPrint: Representa o relatrio gerado. criado um JasperPrint a partir de um JasperReport,contendo o relatrio preenchido.

    Dados

    Para produzir um relatrio precisamos fornecer dados ao Jasper. Estes dados podem ser recuperadosde diferentes lugares, como de uma base de dados em um SGBD ou em um arquivo XML. Pararecuperarmos informaes de um banco de dados relacional, precisamos realizar uma consulta (que r y )

    Grupo de Usurios Java http://www.guj.com.br Pgina 1

    http://jasperreports.sourceforge.net/http://ireport.sourceforge.net/http://ireport.sourceforge.net/http://jasperreports.sourceforge.net/
  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    2/12

    Grupo de Usurios Javahttp://www.guj.com.br

    em linguagem SQL. Essa query pode ser inserida ao cdigo XML ou ser realizada por uma classe Java,gerando um objeto ResulSet, que ser passado s classes do Jasper para o preenchimento do relatrio.

    O JasperReports suporta vrios tipos de da tasou rces (fonte de dados) atravs de uma interfaceespecfica chamada JRDataSource . H uma implementao padro desta interface para objetosResultSet, chamada JRResultSetDataSource , ou seja, possvel realizar consultas, gerando objetosResultSet e passando ao JasperReports para o preenchimento do relatrio. Quando a fonte de dados

    um ResultSet, este objeto deve conter todas as colunas a serem mapeadas para seus camposcorrespondentes no relatrio.

    A figura 1 ilustra o funcionamento do JasperReports:

    Fig. 1: Etapas para a gerao de relatrio com JasperReports.

    No linguajar Jasper", um datasource somado a um arquivo .jasper gera um "print", que pode ser"exportado" para os formatos PDF, HTML, XML, CVS ou XLS.

    Campos, Parmetros, Variveis e Expresses

    Campos (Fields) so reas especficas que recebero diretamente os dados das respectivas colunasreferenciadas. O relatrio deve conter um campo com o mesmo nome da coluna a qual faz referncia. Porexemplo, para os dados da coluna Nome do tipo VARCHAR, da tabela Cliente, serem mapeados para orelatrio, um campo Nome deve ser definido no arquivo XML da seguinte forma:

    Parmetros so dados passados para a operao de preenchimento, que no podem ser encontradosnormalmente na fonte de dados. So declarados, por exemplo, da seguinte forma:

    E passados via cdigo Java, atravs da classe HashMap:

    Map parametros = new HashMap( );

    parametros.put( Cliente, Carlos Paixo );

    Outra importante utilizao de parmetros na query do relatrio. Por exemplo:Select * FROM CLIENTE WHERE CLIENTE=$P{Cliente}

    O relatrio ser gerado apenas para o cliente passado por parmetro.

    Variveis so utilizadas para simplificar o projeto do relatrio. Atravs de uma varivel podemosdefinir somente uma vez uma expresso , que seja usada freqentemente durante o design do relatrio,chamando-a quando precisarmos daquela funcionalidade. Elas podem referenciar tipos internos declculos, como contagem (count), soma (sum), mdia (average), menor (lowest), maior (highest), etc.Por exemplo, o clculo do valor total da compra:

    ${ValorProduto}

    Em uma expresso, uma varivel pode referenciar outras variveis do relatrio, mas somente seaquelas variveis foram definidas previamente no projeto do relatrio. Assim, a ordem em que asvariveis so declaradas no relatrio importante.

    Grupo de Usurios Java http://www.guj.com.br Pgina 2

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    3/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Para as variveis que executam o clculo ns podemos especificar o nvel em que devem serreinicializadas. O nvel Report (de relatrio) significa que a varivel ser inicializada somente uma vez,no comeo do relatrio, e que executa o clculo especificado at que o fim do relatrio seja alcanado.Mas ns podemos escolher executar o clculo em nvel de pgina, coluna ou de grupo. O exemploabaixo demonstra o mesmo clculo anterior em nvel de pgina. Nossa varivel ser inicializada com zerono comeo de cada nova pgina:

    ${ValorProduto}

    new Double( 0 )

    Existem tambm variveis internas da ferramenta, com nomes auto-explicativos, prontas para o usonas expresses: PAGE_NUMBER, COLUMN_NUMBER, REPORT_COUNT, PAGE_COUNT, COLUMN_COUNT,GroupName_COUNT.

    Expresses (Expressions) so utilizadas para especificar o contedo de campos de texto, narealizao de clculos freqentes, por exemplo. Todas elas so expresses Java que podem conter emsua sintaxe: campos, parmetros e variveisde relatrio. Por exemplo:

    Sr.(a) + $F{Cliente} + " realizou um total de compras no valor de "

    + $V{ValorTotalCompraSum} + " no dia "

    + (new SimpleDateFormat("dd/MM/yyyy")).format($F{DataCompra}) + "."

    LayoutPara a melhor organizao e definio do design do relatrio, o JasperReports divide o layout em reas

    pr-definidas, chamadas sees. Ao projetar um relatrio ns necessitamos definir a posio docontedo dentro de uma seo, levando em considerao o que ela representa na estrutura visual de umrelatrio. A seguir esto as sees em que baseado o layout de relatrio: title, pageHeader,

    columnHeader, groupHeader, detail, groupFooter, columnFoter, pageFooter, summary .

    Mais detalhes

    Enquanto escrevia, o JasperReports encontrava-se em sua verso 0.5.x, na qualse baseia este documento. Maiores informaes em:http://jasperreports.sourceforge.net.

    iReport

    Criar o design do relatrio diretamente em XML pode ser uma tarefa custosa. Necessitava-se, ento,de uma ferramenta que automatizasse esse processo. O iReport veio preencher essa lacuna, permitindodefinir o design do relatrio dentro de um ambiente grfico, contento todos os recursos que a bibliotecaJasper oferece. possvel definir relatrios com designs modernos e complexos sem se quer escreveruma linha de cdigo XML, que todo gerado automaticamente. O ambiente ainda oferece atalhos paratarefas de compilao e visualizao do relatrio, permitindo a realizao de testes, acelerando assim oprocesso de design.

    importante salientar que existem outras ferramentas com o mesmo objetivo que o iReport, mas queno so suficientemente maduras, no que diz respeito a facilidade de uso, e principalmente, no suporteas tags XML do JasperReports.

    Mais detalhes

    Abaixo esto outras alternativas para o design grfico do relatrio:- JasperDesign (http://sourceforge.net/projects/jasperdesign)- JasperEdit (http://sourceforge.net/projects/jasperedit)- OpenReports (http://sourceforge.net/projects/oreports)

    - JasperJEdit (http://www.sourceillustrated.com/jasperjedit)- JasperPal (http://sourceforge.net/projects/jasperpal)

    Grupo de Usurios Java http://www.guj.com.br Pgina 3

    http://jasperreports.sourceforge.net/http://sourceforge.net/projects/jasperdesignhttp://sourceforge.net/projects/jasperedithttp://sourceforge.net/projects/oreportshttp://www.sourceillustrated.com/jasperjedithttp://sourceforge.net/projects/jasperpalhttp://sourceforge.net/projects/jasperpalhttp://www.sourceillustrated.com/jasperjedithttp://sourceforge.net/projects/oreportshttp://sourceforge.net/projects/jasperedithttp://sourceforge.net/projects/jasperdesignhttp://jasperreports.sourceforge.net/
  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    4/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Fonte de Dados

    O iReport d suporte a conexes JDBC, ODBC, e 4 tipos de datasources:

    1 Empty data source (JREmptyDatasource): um especial datasource usado para preencherrelatrios que no possuem registros ou dados recuperados. Este datasource usado quando pressionado o boto run:

    2 XML DataSource: um datasource capaz de empacotar um arquivo XML e normalizar seu contedo.As nicas informaes necessrias para criar este tipo de datasource so: o nome do datasource e onome do arquivo XML.

    3 JavaBeans Set Datasource: um datasource capaz de empacotar uma Collection ou um Array deJavaBeans. necessrio uma classe especial de fbrica (factory) que fornea um mtodo esttico paragerar a coleo ou um array de JavaBeans. Para criar este datasource voc precisa de um nome para odatasource, o nome da classe que fornece o mtodo esttico para recuperar o Array/Collection de objetose o nome deste mtodo, que ter uma definio como esta:

    public static Collection createMyCollection( )

    ou

    public static Object[ ] createMyArray( )

    necessrio setar o tipo de resultado (Collection ou Array).

    4 Custom Datasource: este tipo de datasource genrico. O iReport no sabe como a interfaceJRDataSource implementada por esta conexo particular, mas isto no importante. necessrio umaclasse especial de fbrica (factory) que fornea um mtodo esttico que retorne um JRDataSource. Paracriar este datasource voc precisa do nome do datasource, do nome da classe que fornece o mtodoesttico para recuperar o JRDataSource, e do nome deste mtodo que ter uma definio como esta:

    public static JRDataSource createMyJRDataSource( )

    Mais detalhes

    Enquanto escrevia, o iReport encontrava-se em sua verso 0.2.x, na qual se baseia estedocumento. Maiores informaes em: http://ireport.sourceforge.net.

    Requisitos

    Ambas as ferramentas possuem requisitos para o seu funcionamento, os quais so em sua maioriabibliotecas de terceiros, tambm gratuitas. Ao realizar o download opte pelos arquivos completos, poisestes possuem todas as bibliotecas necessrias. No necessrio baixar o jasperreports, pois o iReport j o traz em sua pasta lib, entretanto, interessante ver os exemplos e o javadoc fornecidos peloJasperReports.

    Mais detalhes

    Voc pode ver a lista completa de requisitos para o JasperReports e iReport nos linksabaixo:JasperReports: http://jasperreports.sourceforge.net/requirements.html

    iReport: http://ireport.sourceforge.net/cap2.html#2.1

    Instalando e configurando

    1. Descompacte os arquivos do iReport no diretrio de sua preferncia. Cheque nesse momento se serocriadas as pastas referentes.

    2. Cheque se o JDK e o Ant esto devidamente configurados, ou seja, se as variveis de ambienteJAVA_HOME e ANT_HOME foram criadas e esto apontando para os diretrios corretos. Lembre-se desetar o PATH com JAVA_HOME\ bin e ANT_HOME\bin, e o CLASSPATH com JAVA_HOME\ lib eANT_HOME\ lib. No caso dos dados a serem usados forem recuperados de um banco de dados vocdeve tambm setar no CLASSPATH o driver JDBC do banco.

    3. Copie o arquivo tools.jar, localizado na pasta lib de seu JDK instalado, para os diretrio...\ iReport\ lib

    4. Copie o driver JDBC de seu banco para a pasta lib do iReport.

    5. Para testar a instalao do iReport, abra o prompt, v ao diretrio do iReport e digite ant iReport.Outra opo editar o arquivo iReport.bat (para Windows) ou iReport.sh (para Linux), localizados na

    Grupo de Usurios Java http://www.guj.com.br Pgina 4

    http://ireport.sourceforge.net/http://jasperreports.sourceforge.net/requirements.htmlhttp://../DOCUME~1/PAULOS~1/LOCALS~1/Temp/Rar$DI00.345/2.1http://../DOCUME~1/PAULOS~1/LOCALS~1/Temp/Rar$DI00.345/2.1http://jasperreports.sourceforge.net/requirements.htmlhttp://ireport.sourceforge.net/
  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    5/12

    Grupo de Usurios Javahttp://www.guj.com.br

    pasta iReport-0.2.x. Corrija as variveis para apontarem para os diretrios corretos, executando oarquivo de lote. Se tudo ocorreu bem o iReport ir inicializar. H tambm uma forma de iniciar o iReportsem ter o Ant instalado. Para isso, execute o arquivo de lote chamado startup.bat (Windows) estatrtup.sh (Linux) localizados na pasta noAnt do diretrio principal do iReport.

    6. Ao iniciar, v ao menu Tools >> Options, ir surgir uma janela (vide Fig. 2) onde voc deve localizara aba External Programs, setando ali todos os programas externos a serem utilizados como

    visualizadores de relatrio. Aps isso clique em Save.

    Fig. 2: Setando programas externos.

    Exemplo

    O exemplo a seguir utiliza como fonte de dados uma base simples no SGBD open source Firebird, masvoc pode adaptar o exemplo para uma base e um SGBD qualquer, desde que este possua um driverJDBC ou ODBC, devidamente configurado. O driver JDBC tipo 4 (conexo direta com o banco) do Firebird

    chamado de Jaybird.Mais detalhes

    Abaixo esto os links para realizar o download dos arquivos e ferramentas necessriaspara o exemplo:Firebird - http://firebird.sourceforge.netJaybird - http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_downloadBase de dados acervo.fdb

    Obs.: Este documento no descreve como utilizar outros tipos de datasources, isto ser feito em outraoportunidade.

    Criando uma conexo

    Antes de mais nada devemos criar uma conexo com nossa fonte de dados:1. Selecione o menu Datasources >> Connection/ Datasources. A janela que aparece lista todas asfontes de dados e conexes JDBC que voc define. Clique no boto New para criar uma nova conexo(ou datasource).

    Fig. 3: Lista de conexes / datasources.

    Grupo de Usurios Java http://www.guj.com.br Pgina 5

    http://firebird.sourceforge.net/http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_downloadhttp://us.f2.yahoofs.com/bc/40e16b31_17340/bc/Manuais+&+Artigos/ACERVO.FDB?http://us.f2.yahoofs.com/bc/40e16b31_17340/bc/Manuais+&+Artigos/ACERVO.FDB?http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_downloadhttp://firebird.sourceforge.net/
  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    6/12

    Grupo de Usurios Javahttp://www.guj.com.br

    2. Na janela que aparece escolha o tipo de conexo (no nosso caso Database JDBC Connection). Namesma janela d um nome conexo. Por exemplo, BibliotecaPessoal FB.

    3. No campo JDBC Driver, selecione o driver do seu banco. Caso no esteja listado, como no nossocaso, especifique um de acordo com o seu SGBD. Para o Firebird, digiteorg.firebirdsql.jdbc.FBDriver, lembrando que odriver deve estar no classpath .

    4. Em JDBC URL digitamos o caminho para a nossa base de dados:jdbc:firebirdsql:localhost/3050:c:/ / db/ / Acervo.fdb

    Obs.: A sintaxe da URL difere de SGBD para SGBD, consulte a documentao de seu banco para saber asintaxe exata. Repare tambm no caminho para a base de dados.

    5. Em Server Address digite o caminho para servidor de banco de dados, no nosso caso localhost.Em Database, entre com o nome do banco (Acervo.fdb) ou do alias. Entramos, ento, com o usersysdba e password masterkey. Temos a possibilidade de salvar a senha marcando a opo Savepassword.

    Fig. 4: Criando uma nova conexo JDBC.6. Para testarmos a conexo clicamos no boto Test. No esquea que o SGBD precisa estar rodando.Se tudo ocorreu bem a seguinte mensagem ir aparecer:

    Fig. 5: Teste de conexo bem sucedido.

    7. O prximo passo ir ao menu Build >> Set active connection, escolhendo na janela que aparece aconexo com a base que iremos utilizar para preencher o relatrio, no nosso caso: BibilotecaPessoal

    FB.

    Fig. 6: Escolhendo a conexo.Obs.: importante salientar que a configurao de uma conexo dentro do iReport no obrigatria,pois podemos utiliz-lo apenas para criar o design do relatrio e compil-lo. As tarefas de preenchimento,exportao para um formato (pdf, por exemplo), e visualizao, ficam de responsabilidade de uma classe

    Grupo de Usurios Java http://www.guj.com.br Pgina 6

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    7/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Java. Porm, conveniente, at mesmo para a realizao dos testes, termos um nico ambiente quealm de permitir a definio do layout, tambm permita visualizarmos, em diversos formatos, o resultadodo design e preenchimento do relatrio atravs de um simples boto (Run) ra isso, neces-srioque a conexo JDBC esteja funcionando.

    : . Pa

    Criando o Design do Relatrio

    Considerando que o teste de conexo com o banco foi bem-sucedido iniciamos a etapa de design dorelatrio.

    1. V ao menu File >> New Document ou clique no boto:

    2. Ir aparecer a janela Report Properties onde damos um nome ao nosso relatrio (Report Name)chamando-o de RelatorioBibliotecaPessoal (no pode haver espao entre as palavras). Ainda namesma janela podemos configurar o tamanho da pgina, a sua orientao, as margens, o comprimento,largura e o espao entre as colunas, alm de outras opes mais avanadas.

    Fig. 7: Configurando a pgina do relatrio.

    3. Agora podemos criar o design d rra de ferramentas:e nosso relatrio (fig. 8), utilizando a ba

    serimos os elementos do relatrio, bastando clicarmos uma vez sobre o respectivo boto e logo apsno

    ,E

    tabela constituda de dois Retngulos arredondados: , enquanto os outros elementos soto

    Inrelatrio. O contedo dos elementos de texto e as configuraes de fonte esto disponveis atravs de

    um duplo clique sobre o elemento, assim como as configuraes para os elementos geomtricos.

    Na figura 8, os textos Relatrio Biblioteca Pessoal, Data:, Cdigo, Ttulo, Volumedio, Editora, Autor e Adquirido em so campos de texto esttico:

    Ados campos (fields).

    Fig. 8: Design do relatrio.

    Grupo de Usurios Java http://www.guj.com.br Pgina 7

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    8/12

    Grupo de Usurios Javahttp://www.guj.com.br

    4. Para definir os campos (fields) para preenchimento , precisamos conhecer os nomes das colunasdas tabelas de onde recuperaremos os dados. O iReport permite a insero do SQL no cdigo XMLatravs do menu Datasource >> Report query ou clicando no boto:

    5. No campo da janela que aparece, na aba Report SQL Query, digitamos nossa query. Levando emconsiderao que o resultado dessa consulta deve conter os dados que preenchero o relatrio, o SQLdeve ser bem estruturado. A mesma janela nos permite visualizar os nomes dos campos que fazem partedo resultado da consulta. Por exemplo, se digitarmos a consulta SELECT * FROM LIVRO e em seguidaclicarmos no boto Read Fields visualizaremos todas as colunas da tabela LIVRO de nosso banco, eseus respectivos tipos. Para inserir esta consulta no cdigo XML devemos clicar no boto Save query toreport.

    Fig. 9: Visualizando os nomes das colunas contidas no resultado da consulta.

    Obs.: Em nosso exemplo no iremos inserir o SQL no cdigo XML. Realizaremos a conexo com obanco e a consulta em nossa classe Java, passando o objeto ResultSet gerado para o JasperReports.

    6. Agora que conhecemos os nomes das colunas e seus tipos, podemos definir nossos campos (fields)no relatrio, registrando-os para o mapeamento dos dados. Para tanto, na mesma janela selecione oprimeiro campo (coluna) que aparece e, segurando a tecla Shift, clique no ltimo campo, pressionandoo boto Register fields to report. A esma tarefa pode ser realizada indo ao menu View >>Report fields ou clicando no boto:

    m

    A janela que aparece permite o registro de campos, parmetros e a criao de variveis no relatrio:

    Fig. 10: Registrando os campos (fields).

    Grupo de Usurios Java http://www.guj.com.br Pgina 8

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    9/12

    Grupo de Usurios Javahttp://www.guj.com.br

    7. Aps registrarmos as colunas a serem mapeadas, devemos inserir elementos fields que faroreferncia a elas para serem preenchidos. Para isso, depois de inserir um field, damos um duplo cliquenele, surgindo assim uma janela onde, na aba Text Field, em TextField Expression Class,configuraremos a classe referente ao tipo da coluna que queremos mapear; e em Textfieldexpression, o nome desta coluna entre $F{ e }. Por exemplo, para mapear a coluna CODIGO que dotipo INTEGER, selecionamos em TextField Expression Class, a classe java.lang.Integer, e em

    Textfield expression digitamos $F{CODIGO}. Realize o mesmo processo para as outras colunas(TITULO, AUTOR, VOLUME, EDICAO, EDITORA, DATA_ADQUIRIDO), atentando para o tipo da coluna.

    Fig. 11: Mapeando a coluna CODIGO.

    8. Podemos tambm criar expresses para efetuar clculos ou formataes sobre os dados provenientesdas colunas mapeadas, assim como, optar a que nvel executar esta expresso. (veja Variveis e

    Expresses)Em nosso exemplo inserimos a dada atual de impresso do relatrio, formatando-a de acordo com o

    padro brasileiro. Para isso, inserimos um field, damos um duplo clique sobre ele, e na janela queaparece, na aba Text Field, digitamos a seguinte expresso Java no campo TextField Expression:

    new SimpleDateFormat( "dd/MM/yyyy" ).format( new Date( ) )

    Fig. 12: Inserindo a data atual formatada no relatrio.

    Outro exemplo pode ser visto ao inserirmos o nmero das pginas de nosso relatrio. Para isso,utilizamos a varivel interna $V{PAGE_NUMBER}.

    Grupo de Usurios Java http://www.guj.com.br Pgina 9

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    10/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Inserimos dois fields no relatrio. No primeiro, no campo Evaluation time, escolhemos o nvel deexecuo Now , que considerar a pgina atual e para o segundo field, o nvel Report, que significaque a varivel ser inicializada somente uma vez, no comeo do relatrio, e que executa o clculoespecificado at que o fim do relatrio seja alcanado, ou seja, a quantidade de total de pginas.

    Fig. 13: Nmero da pgina atual. Fig. 14: Nmero total de pginas.

    9. Para informarmos ao iReport em que formato desejamos visualizar o relatrio, vamos ao menuBuild, escolhendo uma das opes de visualizao ali existentes.

    Fig. 15: Opes de visualizao.

    Obs.: Podemos agora realizar um teste, clicando no boto .

    Gerando relatrio a partir de uma classe

    Vimos at o momento como configurar e utilizar o iReport para montar o layout de nosso relatrio, etambm visualiz-lo para fins de teste. Nesta seo, veremos na prtica como gerar um relatrio emformato pdf a partir de uma classe simples. A classe RelatorioBibliotecaPessoal ser apresentada edescrita posteriormente.

    Supe-se que voc j utilizou o iReport para criar o design do relatrio e definir os campos a serempreenchidos, que estas informaes foram salvas em um arquivo XML, e que este foi compilado nestemesmo ambiente, gerando um arquivo .jasper. Este ltimo arquivo (.jasper) ser utilizado pela classe aseguir:

    /* pacotes necessrios */

    import dori.jasper.engine.*;import dori.jasper.view.JasperViewer;import java.sql.*;import java.util.*;

    Grupo de Usurios Java http://www.guj.com.br Pgina 10

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    11/12

    Grupo de Usurios Javahttp://www.guj.com.br

    publicclass RelatorioBibliotecaPessoal {

    /* Real za con tornani exo com o banco de dados, re do o objeto Connection */

    privatestatic Connection getConnection( ) throws

    ClassNotFoundException, SQLException

    {

    String driver = "org.firebirdsql.jdbc.FBDriver";String url = "jdbc:firebirdsql:localhost/3050:c://db//Acervo.FDB";

    String user = "sysdba";

    String password = "masterkey";

    Class.forName(driver);

    Connection con = DriverManager.getConnection( url, user, password );

    return con;

    }

    /* Gera Relatorio e visualiza-o */

    publicvoid geraRelatorio( ) throws JRException, Exception

    {

    Connection con = getConnection( );

    Statement stm = con.createStatement( );

    String query = "select * from Livro";

    ResultSet rs = stm.executeQuery( query );

    /* implementao da interface JRDataSource para DataSource ResultSet */

    JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

    /* HashMap de parametros utilizados no relatrio. Sempre instanciados */

    Map parameters = new HashMap();

    // parameters.put("COLUNA", valor);

    /* Preenche o relatrio com os dados. Gera o arquivo BibliotecaPessoal.jrprint */

    JasperFillManager.fillReportToFile( "BibliotecaPessoal.jasper", parameters, jrRS );

    /* Exporta para o formato PDF */JasperExportManager.exportReportToPdfFile( "BibliotecaPessoal.jrprint" );

    /* Preenche o relatorio e o salva diretamente em arquivo PDF. Sem

    a necessidade do .jrprint */

    // JasperRunManager.runReportToPdfFile("BibliotecaPessoal.jasper", parameters, jrRS);

    /* Visualiza o relatrio em formato PDF */

    JasperViewer.viewReport( "BibliotecaPessoal.pdf", false );

    }

    publicstaticvoid main(String[] args) throws JRException, Exception

    {

    new RelatorioBibliotecaPessoal().geraRelatorio();

    }

    }

    Basicamente, a classe anterior realiza os seguintes passos:

    1. O mtodo geraRelatorio() chama o mtodo getConnection() para realizar a conexo com o bancode dados e retornar um objeto Connection.

    2. realizada a consulta sql, gerando um objeto ResultSet com os dados referentes ao preenchimentodo relatrio. Este objeto passado ao construtor da classe JRResultSetDataSource (implementaopadro da interface JRDataSource para ResultSet) do JasperReports, criando o objeto datasource (jrRS).

    3. O objeto datasource (jrRS) passado como parmetro para o mtodo esttico fillReportToFile()da classe dori.jasper.engine.JasperFillManager para o preenchimento do relatrio, assim como oXML compilado (BibliotecaPessoal.jasper) e possveis parmetros (parameters). Este procedimentocria o arquivo (BibliotecaPessoal.jrprint) referente ao relatrio preenchido.

    Grupo de Usurios Java http://www.guj.com.br Pgina 11

  • 8/6/2019 TI - APOSTILA - Gerao de Relatrio com JasperReports e iReport

    12/12

    Grupo de Usurios Javahttp://www.guj.com.br

    Obs.: O HashMap de parmetros deve ser instanciado, mesmo no havendo a utilizao destes norelatrio. So exigidos por todos os mtodos de preenchimento do JasperReports.

    4. O arquivo .jrprint (BibliotecaPessoal.jrprint) passado como parmetro para o mtodoexportReportToPdfFile() da classe dori.jasper.engine.JasperExportManager para exportar orelatrio para o formato pdf.

    Mais detalhesOutros formatos suportados pelo JasperReports podem ser obtidos a partir dautilizao de seus mtodos referentes. Consulte a documentao (javadoc) doJasperReports para conhec-los: http://jasperreports.sourceforge.net/api/index.html

    Obs.: A classe dori.jasper.engine.JasperRunManager pode substituir a utilizao das classesJasperFillManager e JasperExportManager nos passos 3 e 4. Seu mtodo runReportToPdfFile(), porexemplo, recebe como parmetros o arquivo .jasper referente ao relatrio compilado, possveisparmetros (parameters) e o objeto JRResultSetDataSource.

    5. Finalizando, utilizada a classe dori.jasper.viewer.JasperViewer, uma GUI para a visualizao dorelatrio em pdf. Seu mtodo viewReport() recebe como parmetro o nome do arquivo de relatrio eum boolean referente ao formato do arquivo de relatrio, ou seja, true para arquivos XML e false paraoutro.

    Concluso

    Demonstramos a interao do JasperReports com o iReport, para a gerao de relatrios. Vimos comoinstalar e configurar o iReport, assim como utiliz-lo para desenhar relatrios estruturados que seroprocessados pelo JasperReports.

    Ambas as ferramentas demonstradas aqui, se completam e mostram-se poderosas, oferecendo aodesenvolvedor um amplo conjunto de recursos na organizao e apresentao de contedo de umrelatrio. A utilizao destas, permite o rpido desenvolvimento de um relatrio estruturado e complexode modo gil e facilitado.Carlos Feliz Paixo ([email protected]) programador Java e estagirio de desenvolvimento do ServioFederal de Processamento de Dados (Serpro) Departamento SUNAT - Regional Belm-PA - usando JasperReports

    (jasperreports.sourceforge.net) e iReport (ireport.sourceforge.net) para a gerao de relatrios.

    Grupo de Usurios Java http://www.guj.com.br Pgina 12

    http://jasperreports.sourceforge.net/api/index.htmlhttp://jasperreports.sourceforge.net/api/index.html