You are on page 1of 118

Ferramenta para desenvolvimento e gerao de relatrios utilizando Java

Jasper iReport

TJAVIREP
Junho/2007

Apostila desenvolvida especialmente para a Target Informtica Ltda. Sua cpia ou reproduo expressamente proibida. T@rgetTrust Treinamento e Tecnologia I

T@rgetTrust Treinamento e Tecnologia

II

Sumrio
1. O que o iReport........................................................................1 Objetivos.......................................................................................................................................2 O que o iReport..........................................................................................................................3 O que o JasperReports................................................................................................................4 Exerccios......................................................................................................................................5 2. Instalando o iReport....................................................................1 Objetivos.......................................................................................................................................2 Aonde obter o iReport...................................................................................................................3 Requisitos mnimos do iReport.....................................................................................................4 Instalando o iReport......................................................................................................................5 3. Acesso ao banco de Dados...........................................................1 Objetivos.......................................................................................................................................2 Configurando DataSource.............................................................................................................3 Definindo a Conexo Ativa..........................................................................................................5 4. iReport Wizard............................................................................1 Objetivos.......................................................................................................................................2 Criando um relatrio no iReport...................................................................................................3 Exerccios......................................................................................................................................8 5. Modelo Relatrio iReport.............................................................1 Objetivos.......................................................................................................................................2 Estrutura de um relatrio..............................................................................................................3 Variveis, Parmetros e campos...................................................................................................7 Arquivos gerados pelo iReport...................................................................................................10 Exerccios....................................................................................................................................11 6. Customizando Relatrios.............................................................1 Objetivos.......................................................................................................................................2 Criando um relatrio.....................................................................................................................3 Inserindo Grficos no relatrio.............................................................................................9 Exerccios....................................................................................................................................13 7. Criando Subrelatrios................................................................15 Objetivos.....................................................................................................................................16 O que um subrelatrio..............................................................................................................17 Criando um subrelatrio.............................................................................................................18 Exerccios....................................................................................................................................25 8. Visualizando e Salvando Relatrios.............................................26 Objetivos.....................................................................................................................................27 Gerando o seu relatrio em formato PDF...................................................................................28 Gerando o seu relatrio em formato HTML...............................................................................30 Exerccios....................................................................................................................................32
T@rgetTrust Treinamento e Tecnologia III

9. Internacionalizao.....................................................................1 Objetivos.......................................................................................................................................2 O que o Internacionalizao.......................................................................................................3 Criando um relatrio internacionalizado......................................................................................4 Testando via java........................................................................................................................11 Exerccios....................................................................................................................................13 10. Relatrios Crosstab...................................................................1 Objetivos.......................................................................................................................................2 O que o Crosstab........................................................................................................................3 Criando um relatrio Crosstab......................................................................................................4 Exerccios....................................................................................................................................11 JRDataSource.................................................................................1 Objetivos.......................................................................................................................................2 O que o JRDataSource...............................................................................................................3 Utilizando a interface JRDataSource............................................................................................4 Utilizando a interface JRDataSource............................................................................................5 Exerccios....................................................................................................................................11

T@rgetTrust Treinamento e Tecnologia

IV

1. O que o iReport

O que o iReport

Objetivos
Saber o que o iReport Saber o que o JasperReports Entender para que serve o iReport Diferenciar o iReport do JasperReports

O que o iReport

O que o iReport
O iReport uma ferramenta poderosa, intuitva e fcil de usar que constroi relatrios para JasperReports. O iReport desenvolvido 100% em Java. Essa ferramenta permite ao usurio gerar relatrios complexos com imagens, grficos e subrelatrios. O iReport integrado com o JfreeChart, uma das bibliotecas Java de gerao de grficos mais difundidas. Com o iReport possvel gerar relatrios em vrios formatos incluindo PDF, HTML, XML, XLS, CVS,entre outros.

O que o iReport

O que o JasperReports
JasperReport a biblioteca de classes que torna possvel gerar os relatrios. O iReport apenas uma interface grfica que faz uso do JasperReports. So as classes e mtodos disponibilizados pelo JasperReports que sero usados para efitivamente gerar e exportar os relatrios.

O que o iReport

Exerccios
1. O que faz o iReport? 2. Para que serve o JasperReports?

O que o iReport

Espao para anotaes

O que o iReport

2. Instalando o iReport

Instalando o iReport

Objetivos
Saber como obter o iReport Saber instalar o iReport Saber os requisitos mnimos para se instalar o iReport

Instalando o iReport

Aonde obter o iReport


O iReport est disponvel para download no site da SourceForge.net. O iReport e o JasperReports so projetos dessa comunidade de desenvolvedores de software livre. O endereo para download http://sourceforge.net/projects/ireport/

Instalando o iReport

Requisitos mnimos do iReport


Para que o iReport funcione corretamente no seu sistema necessrio que voc tenha a verso mais atualizada do JDK instalada no seu sistema. Caso voc ainda no tenha o Java Development Kit (JDK) instalado no seu computador, voc pode fazer o download no site da Sun: http://java.sun.com

Instalando o iReport

Instalando o iReport
A instalao do iReport bastante simples. preciso apenas descompactar o arquivo .zip que voc baixou do site da SourceForge.net. Ao descompactar esse arquivo ele j vai criar toda a estrutura de diretrios necessrios para que o iReport funcione. Uma vez descompactado, basta executar o arquivo iReport.bat (para Windows), ou iReport.sh (para Linux), que o iReport ir ser exeutado.

Instalando o iReport

Espao para anotaes

3. Acesso ao banco de Dados

Acesso ao banco de Dados

Objetivos
Como configurar o DataSource que vai ser utilizado pelo iReport Conhecer os diferentes drivers para conexo com o Banco de Dados. Testar a conexo com o Banco de Dados.

Acesso ao banco de Dados

Configurando DataSource
Logo que o iReport iniciar ser necessrio configurar o DataSource para que seja possvel acessar o banco de dados, sobre qual vamos trabalhar para gerar nossos relatrios. A definio do DataSource no obrigatria. Mas se voc no tiver um banco de dados disponvel no ser possvel testar o relatrios que voc estar criando. Para definir a DataSource, clique no menu DataSource e selecione a opo Connections/DataSource. A janela mostrada na figura 3.1 vai aparecer. Clique no boto New para criar uma nova conexo.

Figura 3.1 Conexes / Fontes de Dados

Ao clicar no boto New a janela da figura 3.2 vai se abrir. Vamos utilizar uma conexo com o banco de dados Oracle. Ento devemos preencher essa janela com os seguintes valores: Connection Type/ Datasource: Database JDBC connection Name: Conexo Oracle JDBC Driver: oracle.jdbc.driver.OracleDriver Server Address: oracledb.targettrust.com.br Database: ireportdb Username: java Password: java

Acesso ao banco de Dados

Figura 3.2 Connections properties

Ao preencher todos os campos acima clique no boto Wizard. Ele ir gerar a JDBC URL para voc. A URL gerada jdbc:oracle:thin:@oracle.targettrust.com.br:1521:ireportdb. ser

Caso a porta do seu banco de dados oracle no seja a 1521, voc pode alterar manualmente. O boto wizard s uma facilidade, se voc j souber a sua JDBC URL, no precisa fazer o Wizard, basta digitar a URL no campo JDBC URL. Uma vez definida a sua JDBC URL clique no boto Test para verificar se a conexo est funcionando. Caso o teste for bem sucedido uma mensagem pop-up vai avisar que o teste da conexo foi bem sucedido. Do contrrio. Aparecer um mensagem de erro. Clique no boto Save e sua conexo estar salva e pronta para uso.

Acesso ao banco de Dados

Definindo a Conexo Ativa


Para indicar ao iReport para usar a conexo que acabamos de criar como a conexo padro, devemos definir a conexo que deve ficar ativa enquanto estamo gerando os nosso relatrios. Para isso basta clicar no menu Build e selecionar Set Active Connection. A janela da figura 3.3 ir aparecer. Selecione Oracle Connection e clique no boto OK.

Figura 3.3 Set Active Connection

Isso far com que o iReport utilize a conexo com o Oracle para criar e visualizar os relatrios.

Acesso ao banco de Dados

Espao para anotaes

4. iReport Wizard

iReport Wizard

Objetivos
Aprender a utilizar o iReport Wizard Criar um relatrio utilizando o iReport Visualizar o relatrio criado

iReport Wizard

Criando um relatrio no iReport


Vamos criar o nosso primeiro relatrio utilizando o Wizard do iReport. No menu File selecione o item Report Wizard. A janela de dilogo ir guiar o processo para gerao de um relatrio. Na passo 1, conforme mostra a figura 4.1, devemos colocar qual o SQL que vamos usar para gerar esse relatrio. No nosso exemplo, vamos listar todo o contedo da tabela vendas.

Figura 4.1 Passo 1 do iReport Wizard.

No passo 2, vamos selecionar as colunas que desejamos mostrar no relatrio. Vamos selecionar todos os campos, conforme mostra a figura 4.2.

iReport Wizard

Figura 4.2 Passo 2 do iReport Wizard.

No passo 3, podemos escolher se queremos agrupar o resultado por alguma coluna. Nesse primeiro exemplo vamos deixar em branco e seguir para o passo 4, conforme mostra a figura 4.3.

Figura 4.3 Passo 3 do iReport Wizard

iReport Wizard

No passo 4, vamos selecionar o layout do relatrio. O iReport j tem alguns layouts default para serem selecionados. Os layouts podem ser tabular ou dispostos em colunas. Vamos escolher tabular e o layout classicT.xml, conforme mostra a figura 4.4.

Figura 4.4 Passo 4 do iReport Wizrd No passo 5 basta clicar finish para finalizar a criao do seu relatrio, conforme mostra a figura.

iReport Wizard

Figura 4.5 Passo 5 do iReport Wizard

Agora para visualizar o seu relatrio recm gerado, selecione no menu Build, a opo JRViewer preview.

Figura 4.6 Menu Build

iReport Wizard

Aps selecionar o item mostrado na figura 4.6, clique no menu Build e selecione a opo Execute report (using active conn.). Vai aparecer uma janela pedindo para salvar o relatrio. Salve o relatrio e a visualizao deve aparecer, como mostra a figura 4.7.

Figura 4.7 Preview do relatrio gerado pelo Wizard.

Pronto voc acaba de construir o primeiro relatrio utilizando o iReport.

iReport Wizard

Exerccios

1. Utilizando o Wizard do iReport, crie um relatrio que liste todos os produtos e quantidades desses produtos e a quantidade de cada um deles agrupados por estado. 2. Utilizando o Wizard do iReport, crie um relatrio que apresente o total das quantidades de produtos em cada estado. Utilize o SQL abaixo para efetuar a pesquisa:
SELECT UF, SUM(QTDE) AS TOTAL FROM VENDAS GROUP BY UF

3. Com o Wizard do iReport crie um relatrio columnar que mostre o nome e o preo dos produtos da tabela produto. a. b. c. d. e. f. Clique em File | Report Wizard Entre o comnado SQL select * from produto Clique Next Selecione as colunas preco e nome e clique Next. Clique Next novamente Selecione Columnar da combobox de layout e clique no template classicC.xml. Clique Next. g. Clique em Finish h. Salve o relatrio com o nome a sua escolha. i. Para visualizar o relatrio clique em Build | Execute report (usinf active conn.)

iReport Wizard

Espao para anotaes

5. Modelo Relatrio iReport

Modelo Relatrio iReport

Objetivos
Entender a estrutura de um relatrio iReport Saber identificar cada seo de um relatrio gerado pelo iReport Selecionar as sesses que voc quer apresentar no seu relatrio

Modelo Relatrio iReport

Estrutura de um relatrio
Os relatrio do JasperReports gerados pelo iReport tem a seguinte estrutura conforme mostra a tabela 5.1.

1. Ttulo 2. Cabealho de Pgina 3. Cabealho de Coluna 4. Cabealho de Grupo 1 5. Cabealho de Grupo 2 6. Detalhe (repete para cada novo registro no banco de dados) 7. Rodap do Grupo 2 8. Rodap do Grupo 3 9. Rodap da Coluna 10. Rodap da Pgina 11. Sumrio
Tabela 5.1 Estrutura de um relatrio JasperReports

As sesses 1. Ttulo e 11. Sumrio so exibidas apenas uma vez em todo o relatrio. As sesses 2. Cabealho da Pgina e 10. Rodap da Pgina repetem a cada nova pgina. As sesses 3. Cabealho Coluna e 9. Rodap Coluna repetem a cada nova coluna dentro da pgina. As sesses 4, 5, 7 e 8 repetem de acordo com mudanas dos campos de 6. Detalhe. Pode haver quantos grupos se deseje, inclusive zero. Essas sesses so chamadas faixas (bands). Ento temos a faixo deTtulo, a faixa de Cabealho de Pgina, a faixa de Detalhe, etc. Dentro dessas faixas que so inseridos os elementos do relatrio , tais como os rtulos, campos, imagens, grficos, etc.

Modelo Relatrio iReport

A figura 5.1 mostra as faixas de ttulo, cabealho de pgina, cabealho de coluna, detalhe, rodap de pgina.

Figura 5.1 Faixas do Relatrio iReport

Na faixa de ttulo temos o campo de texto esttico Clasic Report Template. A faixa de cabealho da pgina est em branco apenas para dar espao entre o ttulo e o cabealho da coluna. Na faixa cabealho da coluna temos os campos de texto estticos UF, Produto e QTDE. Na faixa de detalhe temos campos de referncia aos valores retornados pela consulta SQL $F{UF}, $F{Produto} e $F{QTDE}. No se preocupe com o que isso quer dizer, vamos explicar em seguida. O importante identificar as faixas. Na faixa de rodap de pgina, esto as funes de data e paginao. Como os elementos j esto dispostos na faixas, fica mais difcil indentific-las. Se no houvesse nenhum elemento no relatrio as faixas ficariam como demonstra figura 5.2.

Modelo Relatrio iReport

Figura 5.2 Faixas sem elementos

Note as demais faixas no aparecem porque eles esto escondidas. Para visualizar todas as faixas de um relatrio, clique no menu principal View e seleciona a opo Bands. A janela de dilogo mostrada na figura 5.3 vai aparecer. Note que ela lista todas as faixas desse relatrio. As faixas com altiura zero ficam escondidas. As faixas com tamanho maior que zero aparecem no relatrio.Na figura 5.3, a faixa de detalhe tem altura igual a 19.

Figura 5.3 Janela de Faixas do iReport

Modelo Relatrio iReport

Assim se voc quer mostrar alguma faixa que no est aparecendo ou voc est precisando de mais espao, aumente a altura da faixa. Depois s colocar os elementos que desejar.

Modelo Relatrio iReport

Variveis, Parmetros e campos


Como vocs viram na figura 5.1, apreceram vrias expresses como $F{UF} $V{PAGE_NUMBER}. Mas o que so essas expresses? $F{<noma da coluna>} uma referncias as colunas (ou campos) retornados pela consulta SQL do relatrio. Assim se seu SQL tiver como retorno uma coluna UF, $F{UF} referencia essa coluna. Veja a figura 5.1 para ver como as colunas resultantes do SQL so mapeadas para os campos do nosso relatrio. $V{<noma varivel} referencia uma varivel que calculada dentro do relatrio e especificado pelo programador. Algumas variveis como o nmero da pgina, $V{PAGE_NUMBER}, o iReport j disponibiliza automaticamente para voc. $P{<nome do parmetro>} indica um parmetro passado para a query SQL do relatrio. Os paramtros so uteis para cue possamos executar a query de acordo com a seleo do usurio. Por exemplo, para trazer o resultado das vendas de apenas um estado podemos criar um parmetro na consulta SQL para trazer os resultados do estado indicado. Para criar um parmetro clique no menu principal View e selecione a opo Report Parameters. A janela da figura 5.4 vai aparecer.

Figura 5.4 Parmetros do Relatrio

Clique no Boto New. Uma nova janela vai aperecer conforme mostra a figura 5.5. Preencha o campo Parameter Name com estado. O campo Class Type com java.lang.String. Marque o campo Is For Prompting,

Modelo Relatrio iReport

assim quando voc executar o relatrio dentro do iReport ele vai perguntar qual o valor vc quer passar para esse parmetro. O campo Default value expression indica um valor padro a ser usado caso o valor para o parmetro estado no seja passado ao relatrio. Preencha esse campo com SP . O campo Parameter Description contm a descrio do que esse parmetro representa. Clique em OK e depois feche a janela de parmetros.

Figura 5.5 Adicionando novo parmetro

Clique no menu principal View e selecione Report Query. Agora altere o sql do relatrio como indica o cdigo 5.1. select * from vendas where uf = $P{estado}
Cdigo 5.1 Query SQL parametrizada

Agora execute o seu relatrio clicando no menu principal Build e selecionando a opo Execute Report (using active conn.).

A janela da figura 5.6 deve aparecer, perguntando qual o valor do parmetro estado. Preencha com MG e o resultado do relatrio deve ser o que mostra a figura 5.7.

Modelo Relatrio iReport

Figura 5.6 Entrada de Parmetro

Figura 5.7 Relatrio das vendas do estado MG

Modelo Relatrio iReport

Arquivos gerados pelo iReport


Agora que voc j viu os detalhes da interface grfica, preciso entender o que o iReport faz para gerar esse relatrios. Salve o seu relatrio corrente. Clique no menu principal em File e selecione Save. Veja que ele vai salvar o nosso relatrio com a extenso .jrxml (JasperReports XML). Esse arquivo um documento padro XML. Ele contm as configuraes do nosso relatrio. Esse XML utilizado pelo JasperReports para gerar um arquivo binrio com a extenso .Jasper que o arquivo utilizado pelo JasperReports para efetivamente gerar o nosso relatrio. O arquivo .jrxml muito complexo. Por isso edit-lo manualmente seria no mnimo trabalhoso e nada produtivo, j que teriamos que descrever em forma de XML tudo aquilo que pode ser feito de forma grfica atravs do iReport. Uma das vantagens de se ter o relatrio descrito num documento XML que ele facilmente altervel. Por exemplo, se o nome da sua empresa mudar, e voc tiver 100 relatrios aonde fazer a alterao. Basta mandar substituir em seus arquivos .jrxml o nome velho da empresa pelo novo, compilar os .jrxml novamente e voc j terminou a sua tarefa.

Modelo Relatrio iReport

Exerccios
1. Como dividio um relatorio? E para que serve cada sesso? 2. Como se referencia uma coluna resultante do SQL do relatrio no iReport? 3. Como passar um parmetro para um relatrio? 4. O que um arquivo .jrxml? 5. O que um arquivo .jasper? 6. Crie um relatrio que recebe como parmetro um preo mnimo e um preo mximo e mostre todos os produtos nessa faixa de preo. a. Clique em File | Report Wizard b. Entre o comando SQL select * from produto e clique Next c. Selecione a coluna Nome e clique Next d. Clique Next novamente e. Selecione o classicT.xml layout Tabular da combobox e o template

f. Clique Next e depois Clique em Finish g. Clique em View | Report Parameters h. Clique no boto New i. No campo parameter name digite mnimo. j. Mude o parameter class type para double k. Marque is for Prompting. Clique em OK. l. Clique em New novamente m. No campo parameter name digite maximo. n. Mude o parameter class type para double o. Marque is for Prompting. Clique em OK. p. Feche a janela de Parameters q. Clique em View | Report Query

Modelo Relatrio iReport

r. Adicione a query a clusula where preco > $P{minimo} and preco < $P{maximo}. O seu comando SQL deve ficar assim: select * from produto where preco > $P{minimo} and preco < $P{maximo} s. Salve o relatrio. t. Para visualizar, clique em Build | Execute Report (using active conn.) u. O iReport vai perguntar o valor mnimo e mximo. Entre com os valores (0 e 999999, por exemplo) e veja o resultado. v. Execute novamente, mas agora mude os valores de mnimo e mximo (0 e 500) e veja se o relatrio muda.

Modelo Relatrio iReport

Espao para anotaes

Modelo Relatrio iReport

6. Customizando Relatrios

Visualizando e Salvando Relatrios

Objetivos
Criar campos estticos no relatrio Criar campos para apresentar o resultado do SQL Criar grficos para seus relatrios

Visualizando e Salvando Relatrios

Criando um relatrio
At agora vimos como criar um relatrio a partir do iReport Wizard. Agora vamos criar um relatrio desde o comeo. Para tanto, clique em File no menu principal e selecione a opo New Document. A janela da figura 6.1 ir aparecer. Nela possvel escolher o tamanho, definir as margens, a orientao do relatrio e o nome. D o nome de MeuRelatorio e clique no boto OK.

Figura 6.1 New Document

Um novo relatrio em branco vai ser criado como mostra a figura 6.2. Nele podemos ver que algumas faixas j aparecem com tamanhos prdefinidos. Agora basta colocar os elementos que desejarmos nas faixas para montar o nosso relatrio.

Visualizando e Salvando Relatrios

Figura 6.2 Relatrio em Branco

A figura 6.3 mostra alguns botes da barra de ferramenta que vamos utilizar. Da esquerda para a direita, so eles: Imagem Texto Esttico, Campo de texto, SubRelatrio, Grfico e Cdigo de Barra.

Figura 6.3 Botes da Barra de Ferramenta

Clique no boto de texto esttico, arraste o cursor sobre a faixa de Ttulo para inserir o elemento de texto esttico. D um duplo clique sobre o elemento recm inserido e a janela da figura 6.3 deve aparecer. Nela voc pode alterar todas as propriedades desse elemento. Mude o texto para Meu Relatrio e aumente o tamanho da fonte para 20.

Visualizando e Salvando Relatrios

Figura 6 .4 Propriedades do campo Esttico

Veja como ficou sobrando espao na banda de ttulo diminua o tamanho da faixa de ttulo (como foi mostrado no captulo 5). Aproveite e diminua a faixa de Cabealho de Pagina (page header) para altura 10, pois tb no vamos utiliz-la. Insira mais trs elementos de texto esttico na faixa de Cabealho de Coluna (columnHeader). Mude o texto para ID, Descrio e Preo. Para podermos inserir dados nesse relatrio vamos listar a tabela de produto. Para tanto clique no menu View e selecione Report Query. Entre o comando SQL select * from produto e clique no boto OK. Agora clique no boto de campo de texto ( o boto com a letra F estilizada). Insira trs campos na faixa de Detalhe (detial). Para poder referenciar uma coluna da nossa consulta SQL, temos que dar duplo clique sobre o elemento de campo de texto inserido. Uma janela como mostra a figura 6.5 vai abrir, clique na aba text field. No campo Text Field Expression, entre a referncia da coluna. Por exemplo, a coluna ID da consulta SQL acima referenciada com a expresso $F{ID}. Faa o mesmo para os outros dois campos. Referencia a coluna nome e preco. Cuide para colocar o tipo de dado correto no cmapo Textfield Expression Class para evitar erros. Repare que a expresso vai ficar verde quando voc entrar uma expresso vlida.

Visualizando e Salvando Relatrios

Figura 6.5 Propriedades Campo de Texto

Agora esconda as demais faixas (colocando sua altura para zero), menos a faixa de Rodap de Pgina (pageFooter). Na faixa de rodap de pgina, vamos colocar a data e o nmero da pgina. Para tanto adicione dois novos campos de texto na faixa de rodap de pgina. D duplo clique sobre o campo de texto da data. Clique na aba Text Field, troque o Textfield Expresion Class para java.lang.Date e no campo Textfield expression entre o comando new Date(). D duplo clique no o outro campo de texto e clique na aba Text Field. Mude o Textfield Expression Class para java.lang.Integer e no campo Textfield expression coloque a referncia a varivel do nmero da pgina, $V{PAGE_NUMBER}. Para visualizar as variveis pr-disponveis (builtin) em todos os relatrios basta clicar no menu View e selecionar Report Variables. O seu relatrio agora deve aparecer como o d figura 6.6. Clique no menu Build e selcione Execute Report (using active conn.) e veja o resultado.

Visualizando e Salvando Relatrios

Figura 6.6 Relatrio Meu Relatrio

Visualizando e Salvando Relatrios

Figura 6.8 Visualizao do Meu Relatrio

Visualizando e Salvando Relatrios

Inserindo Grficos no relatrio


Agora que j criamos um relatrio simples, vamos colocar um grfico para ilustrar o nosso relatrio. Vamos gerar um grfico comparando os preos dos trs produtos da tabela. Aumente a altura da faixa de sumrio (Summary) para colocar o grfico nela. Clique no boto grfico e arraste o cursor sobre a faixa de sumrio para criar um novo elemento grfico. Ao criar o elemento a janela da figura 6.7 vai abrir.

Figura 6.8 Grfico

Escolha o modelo de grfico que voc quer utilizar. Neste exemplo, vamos utilizar o grfico torta 3D. Selecione esse grfico na janela da figura 6.8.

Visualizando e Salvando Relatrios

Clique com o boto direito do mouse em cima do grfico que voc acabou de colocar no relatrio e clique em Chart properties(Conforme a figura 6.9)

Figura 6.9 Propriedades do grfico

Em chart tile expression digite Grafico de preos esse ser o titulo do grfico. Agora clique na aba Data e depois na sub-aba Details e digite os valores conforme a figura 6.10.

Visualizando e Salvando Relatrios

Figura 6.10 Detalhes dos dados do grfico

Onde Key Expression a chave da legenda do grfico, portanto vamos colocar a expresso: $F{NOME}. J no campo Value Expression o valor do grfico, ou seja, esse campo determina a disposio de valores, colocaremos a expresso: $F{PRECO}. Para finalizar, existe o campo opcional Label Expression que onde nos vamos colocar um rotlo para cada valor do grfico, escreva a expresso: $F{NOME} . O resultado final ser conforme a figura 6.11.

Visualizando e Salvando Relatrios

Figura 6.11 Resultado final

Como podemos ver no relatrio e no grfico o produto DVD-Writer o mais caro, seguido pelo CPU 2.5Ghz e pelo Monitor 17.

Visualizando e Salvando Relatrios

Exerccios
1 Crie um relatrio em branco. Utilize a consulta select uf, sum(qtde) as total from vendas group by produto, uf. Mostre os totais de quantidade de produtos por estado no seu relatrio em branco. No esquea de dar um ttulo ao seu relatrio.

2 Adicione um grfico (em formato pizza 3D) ao seu relatrio mostrando a quantidade de produtos vendidos por estado.

3 Crie um relatrio que liste os nomes dos produtos e os seus preos. Adicione um grfico (formato barras 3D) comparando os produtos por preo.

Visualizando e Salvando Relatrios

Visualizando e Salvando Relatrios

7. Criando Subrelatrios

Visualizando e Salvando Relatrios

Objetivos
Oque um subrelatrio Para que serve Como usar um subrelatrio para gerar relatrios tipo Mestre-Detalhe

Visualizando e Salvando Relatrios

O que um subrelatrio
Um subrelatrio um elemento que voc pode adicionar dentro de um outro relatrio. Um subrelatrio nada mais que um relatrio inserido dentro de outro. Assim voc pode modularizar seus relatros, criar relatrios complexos ou construir relatrios do tipo mestre-detalhe.

Visualizando e Salvando Relatrios

Criando um subrelatrio
Para criar um subrelatrio primeiro a necessrio criar o relatrio que esse subrelatrio ir referenciar. Para isso Clique em File e selecione New Document. Uma janela vai abrir para voc dar o nome do relatrio. Chame o relatrio de MeuSubrelatorio e clique OK. Adicione um parmetro que vai ser usado na consulta SQL. Esse parmetro o ID do produto. Clique em View e selecione Report Parameters. Adicione um parmetro com o nome de prodid, do tipo java.lang.Integer e valor default new Integer(1), como mostra a figura 7.1. Clique em OK e feche a janela anterior.

Figura 7.1 Novo parmetro

Clique em View e selecione Report Query. Entre a consulta select nome from produto where id = $P{prodid} e clique em OK. Agora escoda todos as faixas menos a faixa de detalhe. Nela crie um campo de texto. D duplo clique no campo para que abra a janela de propriedades do campo de texto. Clique na aba Text Field, selecione o tipo java.lang.String e entre a referncia a coluna nome, que queremos mostrar, no campo Textfield expression. Feche a janela.

Visualizando e Salvando Relatrios

Figura 7.2 Campo de texto

Seu subrelatrio deve estar conforme o que mostra a figura 7.3.

Figura 7.3 Subrelatrio

Agora salve seu subrelatrio clicando em File e selecionando Save. Crie um novo relatrio a partir do iReport Wizard. Use a consulta SQL select uf,produto from vendas. No passo dois do wizard, selecione

Visualizando e Salvando Relatrios

apenas a coluna de UF para ser apresentada no relatrio. Aps terminar, seu relatrio o wizard deve estar como mostra a figura 7.4.

Figura 7.4 Relatrio que lista os estados

D dois cliques no campo de texto da coluna UF ( $F{UF} ). Desmarque a opo print repeated value como mostra a figura 7.5. Isso far com que os valores que forem repetidos no sejam impressos, ou seja, os estados que j foram listados no sero listados duas vezes.

Figura 7.5 Propriedades do Campo de texto UF

Visualizando e Salvando Relatrios

Agora aumente a altura da faixa de Detalhe (detail) para que possamos inserir o nosso subrelatrio. Aps aumentar a faixa, insira o subrelatrio como mostra a figura 7.6.

(Boto de Subrelatrio da barra de ferramenta)

Figura 7.6 Relatrio com subrelatrio

Agora que o elemento de subrelatrio est inserido, temos que configur-lo para usar o subrelatrio que criamos anteriormente. Para isso, d duplo clique no elemento de subrelatrio. A janela da figura 7.7 vai abrir, em Subreport expression coloque o caminho do diretrio aonde o MeuSubrelatrio.jasper foi gerado. Adicione um parmetro ao subreport chamado prodid como mostrado na figura 7.8. Clique na aba Subreport e escolha Use Connection expression da lista de opes como mostra a figura 7.9.

Visualizando e Salvando Relatrios

Figura 7.7 Aba Subreport(Other)

Figura 7.8 Parmetro do Subrelatrio

Visualizando e Salvando Relatrios

Figura 7.9 Aba Subreport do elemento SubRelatrio.

Agora que o relatrio e o subrelatrio esto vinculados, execute o relatrio principal. Os produtos vendidos em cada estado agora aparecem discriminados como mostra a figura 7.10.

Visualizando e Salvando Relatrios

Figura 7-10 Relatrio com Subrelatrios

Visualizando e Salvando Relatrios

Exerccios
1 Faa um relatrio mestre-detalhe utilizando um subreport. a. Crie um relatrio para ser usado como subrelatrio b. Acicione um parmetro a esse relatrio c. Crie o relatrio principal d. Adicione o elemento de Subrelatrio na faixa de Detalhes e. Edite as propriedades do Subrelatrio e passe o parmetro que o subrelatrio precisa receber. Configure as demais propriedades. f. Execute o relatrio.

2 Construa outro relatrio mestre-detalhe utilizando um subreport. Apresente o volar total dos produtos vendidos por estado. Adicione um grfico para comparar os resultados. Siga os mesmos passos do exerccio 1.

Visualizando e Salvando Relatrios

8. Visualizando e Salvando Relatrios

Visualizando e Salvando Relatrios

Objetivos
Visualizar o relatrio a partir de um programa Java ou de uma pgina JSP. Salvar o relatrio nos diferentes formatos como PDF, HTML, XML, entre outros.

Visualizando e Salvando Relatrios

Gerando o seu relatrio em formato PDF


Voc pode gerar o seu relatrio e salvar o resultado em um arquivo PDF. O JasperReports capaz de salvar o seu relatrio em um arquivo PDF sem complicaes. No cdigo 8.1 temos o exemplo de como salvar o nosso relatrio a partir de uma aplicao Java padro. Para tanto basta carregar o arquivo .JASPER gerado pelo iReport e os mtodos da biblioteca JasperReports fazem o resto do servio.
import import import import net.sf.jasperreports.engine.*; net.sf.jasperreports.view.*; java.sql.*; java.util.*;

public class Visualizador{ private static final String driver = oracle.jdbc.driver.OracleDriver; private static final String url = jdbc:oracle:thin:@localhost:1521:MYDATABASE; private private private private static static static static final final final final String String String String login Senha pdf = relat = java; = java; relatorio.pdf; = classic.jasper;

public static void main (String args[])throws Exception{ Class.forName(driver); Connection conn = DriverManager.getConnection(url,login,senha); HashMap parametros = new HashMap(); //Executa o relatrio JasperPrint impressao = JasperFillManager.fillReport( relat, parametros, conn); //Exibe o relatrio JasperViewer viewer = new JasperViewer(impressao,true); Viewer.show(); //Salva o relatorio no arquivo JasperExportManager.exportReportToPdfFile(impressao,pdf);

}
Cdigo 8.1 - Aplicao Java Desktop

No cdigo 8.2 temos um exemplo de como mostrar um relatrio em formato PDF numa pgina JSP. Assim voc pode mostrar seus relatrios na Web.

Visualizando e Salvando Relatrios

<%@ <%@ <%@ <%@ <%@ <%

page page page page page

errorPage="error.jsp" %> import="datasource.*" %> import="net.sf.jasperreports.engine.*" %> import="java.util.*" %> import="java.io.*" %>

String url = jdbc:oracle:thin:@localhost:1521:MYDATABASE; String login = java; String Senha = java; File reportFile = new File(application.getRealPath("classic.jasper")); if (!reportFile.exists()) throw new JRRuntimeException("Arquivo classic.jasper no encontrado."); //Abre conexo com o banco de dados Class.forName(driver); Connection conn = DriverManager.getConnection(url,login,senha); Map parameters = new HashMap(); parameters.put("ReportTitle", "Address Report"); parameters.put("BaseDir", reportFile.getParentFile()); byte[] bytes = JasperRunManager.runReportToPdf( reportFile.getPath(), parameters, conn ); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); ouputStream.close();

%> Cdigo 8.2 Relatrio em uma aplicao Web (report.jsp)

Visualizando e Salvando Relatrios

Gerando o seu relatrio em formato HTML


Se voc quiser exibir os seus relatrios diretamente na sua aplicao Web em formato HTML, o cdigo 8.3 mostra como fazer isso.

<%@ <%@ <%@ <%@ <%@ <%

page page page page page

import="net.sf.jasperreports.engine.*" %> import="net.sf.jasperreports.engine.util.*" %> import="net.sf.jasperreports.engine.export.*" %> import="java.util.*" %> import="java.io.*" %>

String url = jdbc:oracle:thin:@localhost:1521:MYDATABASE; String login = java; String Senha = java; File reportFile = new File(application.getRealPath("/reports/WebappReport.jasper")); if (!reportFile.exists()) throw new JRRuntimeException("Arquivo WebappReport.jasper no encontrado."); JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath()); //Abre conexo com o banco de dados Class.forName(driver); Connection conn = DriverManager.getConnection(url,login,senha); Map parameters = new HashMap(); parameters.put("ReportTitle", "Relatorio Web"); parameters.put("BaseDir", reportFile.getParentFile()); JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, parameters, conn ); JRHtmlExporter exporter = new JRHtmlExporter(); Map imagesMap = new HashMap(); session.setAttribute("IMAGES_MAP", imagesMap); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out); exporter.setParameter(JRHtmlExporterParameter.IMAGES_MAP, imagesMap); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "image.jsp? image="); exporter.exportReport(); %> Cdigo 8.3 Relatrio aplicao web em formato HTML (report_html.jsp)

Visualizando e Salvando Relatrios

Como voc pode observar no cdigo 8.3, o relatrio gerado no iReport, WebappReport.jasper, carregado (JRLoader.loadObject(...)) e logo aps executado (JasperFillManager.fillReport(...)). Aps o relatrio executado, ele expotardo para o formato HTML. Objeto exporter setado em seus parmetros, indicando qual o relatrio a ser exportado (jasperPrint) e para onde deve ser exportado (out a pgina JSP). O comando exportReport( ) realiza por fim a exportao.

Visualizando e Salvando Relatrios

Exerccios
1 Crie uma aplicao Java que visualize o relatrio gerado pelo iReport (.jasper) e depois salve o mesmo em um arquivo em fomrato PDF. Abra o PDF para conferir o seu relatrio. a. Use o exemplo do cdigo 8.1

2 Crie uma aplicao Web. Construa uma pgina JSP que carregue o relatrio gerado pelo iReport e mostra como formato PDF. a. Use o exemplo do cdigo 8.2

3 Crie uma outra pgina JSP na sua aplicao Web que mostra o contedo do seu relatrio diretamente na pgina JSP com formato HTML. a. Use o exemplo do cdigo 8.3

4 - Experimente passar parmetros para a sua query atravs das pginas JSP. No esquea de carregar um relatrio que aceita parmetros e lembre o nome do parmetro a ser usado.

Visualizando e Salvando Relatrios

Espao para anotaes

9. Internacionalizao

T@rgetTrust Treinamento e Tecnologia

Relatrios Crosstab

Objetivos
O que internacionalizao Crirar relatrios internacionalizados

Relatrios Crosstab

O que o Internacionalizao
Internacionalizar deixar uma aplicao multi-idiomas, ou seja, prover suporte a multiplos idiomas como por exemplo: portugus, ingls, italiano, alemo, etc.. Nesse conceito nos no reescrevemos toda a aplicao para ter esse ganho, o que feito externalizar os labels (rotulos) do sistema, bem como suas mensagem de iterao com o usurio, erros, etc... Esse um recurso poderoso que toda aplicao Java est apta a prover. No nosso caso um bom reltorio j deve prover esse recurso.

Relatrios Crosstab

Criando um relatrio internacionalizado


Vamos fazer um passo-a-passo de como criar seu primeiro relatrio internacionalizado. Para criar um relatrio clique em File e selecione New Document. Uma janela vai abrir para voc dar o nome do relatrio. Chame o relatrio de Relatorioi18n Clique na aba i18n para configurarmos as opes de internacionalizao, no campo Resource Bundle Base Name escreva relatorioi18n_resources e no campo When resource missing type coloque null esse ultimo campo configura o comportamento padro para quando no for encontrada a chave de internacionalizao.Clique em OK para fechar essa janela.

Figura 9.1 Novo Relatrio

Clique em Data e selecione Report Query. Entre a consulta select * from produto e clique em OK. Voc pode conferir isso figura 9.2.

Relatrios Crosstab

Figura 9.2 Query do Relatrio

Agora vamos montar o layout do relatrio. Crie um Text Field e coloque o elemento na banda de title, clique com o boto direito do mouse em cima do elemento e v na aba Text Field e depois no campo textfield expression e coloque a seguinte expresso $R{titulo} aps isso clique em OK. Conforme a figura 9.3

Relatrios Crosstab

Figura 9.3 Criando um Campo internacionalizavl

Agora vamos colocar os campos que so os rtulos do reltorio, o procedimento o mesmo do titlo, s que agora vamos crirar dois campos chamados coluna1,coluna2 conforme a figura 9.4.

Relatrios Crosstab

Figura 9.4 Criando dois Campos internacionalizavis

Vamos colocar os campos (valores) do relatrio agora. Araste o campo NOME da aba de library para dentro da banda de datail e ajuste o layout de acordo com o campo coluna1, aps isso faa a mesma coisa com o campo PRECO.

Figura 9.5 Aba Library

Relatrios Crosstab

Precisamos criar os arquivos internacionalizveis, para isso clique em Edit depois Internacionalization e Locale Files ir abrir uma janela. Nest janela configuramos os arquivos de internacionalizao. Cique em Create New Locale e digite _pt_BR conforme a janela da figura 9.6.

Figura 9.6 Criando um arquivo internacionalizvel.

Agora de um duplo clique sob o item que apareu na grid (Portugus(Brasil)) e podemos editar as chaves e os valores internacionalizavis a vontade. Insira as chaves e os valores conforme est na figura 9.7.

Relatrios Crosstab

Figura 9.7 Criando chaves e valores

Aps digitar essas chaves e valores clique em Save e Close. Vamos crirar um arquivo para o idioma ingls agora, clique em Create new locale e digite _en_US e digite as seguintes chaves com sesus respectivos valores:

Figura 9.8 Valores em ingls

Quando voc terminar de digitar clique em Save e Close e Close. Agora podemos rodar o relatrio. Vamos fazer isso clicando no boto Execute (with active connection) conforme figura 9.9.

Relatrios Crosstab

Figura 9.9 Rodando o relatrio

Pronto, j temos um reltorio com suporte a multiplos idiomas. Se for necessrio adicionar um idioma novo a unica operao necessria ser criar um arquivo internacionalizvel para esse idioma, essa operao normalmente feita por tradutores ou pessoas que conheam bem o idioma.

Relatrios Crosstab

Testando via java


Apartir de uma classes java, vamos ver como podemos rodar e testar relatrios internacionalizdos. Apartir da seguinte classe java.
package br.com.targettrust.diegopacheco.jasperreports.view; import import import import import import java.io.FileInputStream; java.sql.Connection; java.sql.DriverManager; java.util.HashMap; java.util.Locale; java.util.Map;

import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.view.JasperViewer; public class JasperReportsJavaView { @SuppressWarnings("deprecation") public static void main(String[] args) throws Throwable { Locale.setDefault(new Locale("pt","BR")); //Locale.setDefault(Locale.ENGLISH); // Parametros necessrios para rodar o Jasper Reports. String jasperToRun = "./src/ Relatorioi18n_resources.jasper"; Map<String, Object> parameters = new HashMap<String, Object>(); // Seta as propriedades do banco de dados. String driver = "org.hsqldb.jdbcDriver"; String url = "jdbc:hsqldb:/C:/banco/test"; String login = "sa"; String password = ""; //Estabelece Conexao. Class.forName(driver); Connection conn = DriverManager.getConnection(url,login,password); //Executa o reltrio e visualiza o mesmo. JasperPrint impressao = null; try { impressao = JasperFillManager.fillReport( new FileInputStream(jasperToRun),parameters,conn); } catch (Exception e) { throw new RuntimeException(e); } JasperViewer viewer = new JasperViewer(impressao, true); viewer.setVisible(true); } }

Cdigo 9.1 - Aplicao Java

Relatrios Crosstab

Se comentarmos a linha Locale.setDefault(new Locale("pt","BR")); e descomentarmos a linha Locale.setDefault(Locale.ENGLISH); e rodarmos essa classe o reltorio ficar em ingls assim podemos testar o relarrio apenas trocando o Locale. Neste exemplo s precisamos ter os arquivos: Relatorioi18n_resources _pt_BR.properties Relatorioi18n_resources _en.properties

Na pasta src. Esses arquivo so os mesmos arquivos que nos editamos anteriormente pelo iReport.

Relatrios Crosstab

Exerccios
1. O que internacionalizao? 2. Crie um reltorio internacionalizado em portugus e ingls com a seguinte query Select v.uf,p.nome,v.qtde from vendas v, produto p where v.produto=p.id order by p.nome 3. Adicione ao relatrio anterior suporte ao idioma espanhol.

Relatrios Crosstab

Espao para anotaes

10. Relatrios Crosstab

T@rgetTrust Treinamento e Tecnologia

Relatrios Crosstab

Objetivos
O que Crosstab Saber que informao colocar na linha, coluna e detalhe Crirar relatrios Crosstab

Relatrios Crosstab

O que o Crosstab
Crosstab um tipo especial de componente de relatrio onde as linhas e as colunas so dinmicas. Normalmente utilizado para mostrar agregaes entre tabelas. Este tambm conhecido como referencias cruzadas, ou seja, nos cruzamos as linhas com as colunas. Poderiamos utilizar crosstab para mostrar por exemplo uma viso de Cliente X Vendedores, assim poderiamos saber o quanto cada vendedor vendeu para um determinado cliente. Outra aplicao seria para ter um total de lucro mensal de uma empresa atravez dos meses e anos com um determinado vendedor.

Relatrios Crosstab

Criando um relatrio Crosstab


Para criar um subrelatrio primeiro a necessrio criar o relatrio. Para isso Clique em File e selecione New Document. Uma janela vai abrir para voc dar o nome do relatrio. Chame o relatrio de RelatorioCrosstab e clique OK. Adicione um consulta SQL clicando em Data e depois Report Query vai aparecer uma janela para voc digitar uma consulta SQL, digite a seguinte query: select v.uf, v.qtde, v.produto=p.id p.nome from vendas v, produto p where

Figura 10.1 Report Query

Aps voc entrar com a query anterior clique em OK e essa janela ir fechar. Agora vamos organizar as bandas do relatrio. Clique com o boto direito do mouse em cima de alguma banda do relatrio (ex: detail) e clique em band

Relatrios Crosstab

properties, quando voc fizer isso ir aparecer uma janela(conforme a da figura 10.2).

Figura 10.2 Report Bands

Zere todas as propriedades Band Height de todas as bandas, exceto as bandas title e summary. Voc deve zerar uma banda e clicar em Apply e somente depois disso zerar a proxima banda do relatrio. Coloque um elemento Static Text na banda de title e escreva o seguinte texto nele Relatrio Crosstab.(conforme figura 10.3).

Figura 10.3 Static Text do ttulo

Relatrios Crosstab

Chegou o momento de adicionar o componente crosstab. Na barra de ferramentas do iReport existe um boto para fazer isso, ele se chama Crosstab, confira com a figura 10.4.

Figura 10.4 Barra de ferramentas e boto Crosstab

Desenhe o componente de Crosstab na banda de Summary, quando voc fizer isso ir aparecer uma janela de wizard.

Figura 10.5 Wizard de Crosstab

Agora vamos configurar o Crosstab com ajuda do wizard. A primeira tela a tela onde voc escolhe o subdataset aqui poderiamos configurar um dataset diferente do dataset do relatrio. Nesse exemplo vamos utilizar o mesmo do relatrio. A proxima tela a tela de Rows nela vamos configurar as linhas do crosstab, selecione o campo NOME (conforme figura 10.6.

Relatrios Crosstab

Figura 10.6 Rows

A proxima tela a tela de Columns aqui vamos adicionar as colunas do crosstab. Selecione o campo UF(conforme figura 10.7).

Relatrios Crosstab

Figura 10.7 Columns

Agora chegou a hora de configurar o detail onde vai ficar os dados que iro se repetir com maior frequncia. Selecione o campo QTDE e em Function selecione Nothing(Conforme figura 10.8)

Figura 10.8 Detail

Relatrios Crosstab

A proxima tela a tela de Layout vamos marcar apenas o check-box Show grid lines para ele desenhar os contornos da tebela que ser gerada (conforme figura 10.9).

Figura 10.9 Layout

Est pronto! Voc ir notar que ele criu mais um elemento na aba de Relatrio com o nome crosstab-1(figura 10.10).

Relatrios Crosstab Figura 10.10 Crosstab Design

Aqui podemos mexer no layout, aplicar expresses, modificar as bordas e fazer mudanas nos campos e na ordem do crosstab. Agora s executar o reltorio clicando em Build e depois em Execute (With active connection). O resultado ser esse:

Figura 10.11 Resultado

Relatrios Crosstab

Exerccios
1. O que Crosstab? 2. Crie um reltorio Crosstab que busque todos os estados e todos os produtos e a quantidade de produtos vendida em cada estado.O Relatrio Crosstab dever ser Estados X Produtos 3. Faa um reltorio semelhante ao anterior, s que agora de Produtos X Estados e internacionalizado.

Relatrios Crosstab

Espao para anotaes

JRDataSource

T@rgetTrust Treinamento e Tecnologia

Relatrios Crosstab

Objetivos
O que JRDataSource Saber como usar a interface JRDataSource Criar relatrios que utilizem DataSources customizados

Relatrios Crosstab

O que o JRDataSource
O Jasperreports um framework muito flexvel. Jasper prove alm do acesso a dados via sql acesso da forma que voc quizer. Significa que sua fonte de dados(datasource) pode ser oque voc quizer, como por exemplo arquivos txt, xml, dat, dbf, etc... Este recurso do jasper nos possibilita fazer praticamente qualquer forma de acesso a qualquer meio de armazenamento de informaes. Como o Jasper faz isso? A resposta simples atravez da interface JRDataSource, basta voc implementar os metodos dessa interface e fazer o acesso da forma que for mais conveniente. Podemos trazer dados mistos dessa forma, ou seja, parte dos dados pode estar no banco de dados e uma empresa, parte dos dados pode estar em outro banco de dados, outra parte pode estar em um xml que fica hospedado em um web site, etc...

Relatrios Crosstab

Utilizando a interface JRDataSource


Est interface do Jasperreports tem dois metodos, so eles:
public Object getFieldValue(JRField arg0) throws JRException public boolean next() throws JRException

O metodo getFieldValue o metodo resposvel por retornar o campo ao Jasper.O framework ir infocar esse campo toda a vez que ele estiver processando um elememento do tipo Filed representado por F$ {NOME_DO_CAMPO}. Este metodo recebe por parametro um objeto JRField que representa o campo. esperado um retorno do tipo Object com o valor desse campo. O metodo next deve retornar um boolean indicando se existem mais campos para serem processados, caso voc tenha mais campos para processar deve retornar true se no tiver mais campos para processar, retorna false. Normalmente esse campo pode ser atribuido ao retorno do metodo hasNext de um Iterator, pois comum utilizar listas para datasources.

Relatrios Crosstab

Utilizando a interface JRDataSource


Antes de fazermos a utilizao desta interface necessrio criar um retrio. Ento abra o iRerport e crie um novo relatrio com a seguinte query Select * from produto. Monte o design de acordo com a figura 11.1.

Figura 11.1 Design do relatrio

Dica: para agilizar o desenvolviemento do layout do relatrio arraste os fields da guia de library diretamente para a band que voc desejar.

Figura 11.2 Dica

Coloque mais 3 labels (rtulos) e o titlo Produtos e salve o relatrio.

Relatrios Crosstab

Compile o relatrio e guarde o arquivo .jasper compilado. Agora vamos criar algumas classes java. Neste exemplo ser criando uma classe java que serializa uma lista de produtos, ento vamos comear com o pojo de produto.
package br.com.targettrust.diegopacheco.jasperreports.datasource; import java.io.Serializable; public class Produto implements Serializable{ private private private private static final long serialVersionUID = 1L; Long id; String descricao; Long preco;

public Produto() {} public Produto(Long id, String descricao, Long preco) { super(); this.id = id; this.descricao = descricao; this.preco = preco; } public String getDescricao() { return descricao; } public void setDescricao(String descricao) { this.descricao = descricao; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getPreco() { return preco; } public void setPreco(Long preco) { this.preco = preco; }

Relatrios Crosstab

@Override public int hashCode() { final int PRIME = 31; int result = 1; result = PRIME * result + ((descricao == null) ? 0 : descricao.hashCode()); result = PRIME * result + ((id == null) ? 0 : id.hashCode()); result = PRIME * result + ((preco == null) ? 0 : preco.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final Produto other = (Produto) obj; if (descricao == null) { if (other.descricao != null) return false; } else if (!descricao.equals(other.descricao)) return false; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (preco == null) { if (other.preco != null) return false; } else if (!preco.equals(other.preco)) return false; return true; } @Override public String toString() { return "id: " + id + ", descrio: " + descricao + ", preo: " + preco; } } Cdigo 11.1 Pojo de Produto.

Com o pojo criado podemos criar uma lista de Produtos e serializa-los, essa a proxima classe.

Relatrios Crosstab

package br.com.targettrust.diegopacheco.jasperreports.datasource; import import import import import java.io.File; java.io.FileOutputStream; java.io.ObjectOutputStream; java.util.ArrayList; java.util.List;

public class SerializaProdutos { public static void main(String[] args) throws Throwable { // Cria umna lista com 50 produtos. List<Produto> produtos = new ArrayList<Produto>(); for(int i=0;i<=50;i++){ produtos.add(new Produto((long)i,"prod" + i,(long) (i*1.45))); }

// serializa os objetos. ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:/lista_produtos.srl"))); oos.writeObject(produtos); oos.flush(); oos.close(); System.out.println("Serializao efetuada!"); } } Cdigo 11.2 Classe serializadora de Produtos Agora o DataSource que l desse arquivo serializado. package br.com.targettrust.diegopacheco.jasperreports.datasource; import import import import java.io.FileInputStream; java.io.ObjectInputStream; java.util.Iterator; java.util.List;

import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField; public class ListProdutosDataSource implements JRDataSource { private private private private String path = ""; List<Produto> produtos; Produto produto; Iterator<Produto> it;

public ListProdutosDataSource(String path) { this.path = path; try { initialize(); } catch (Throwable e) { throw new RuntimeException("Erro ao incializar: " + this.getClass() + ", message: " + e.getMessage()); } }

Relatrios Crosstab @SuppressWarnings("unchecked") private void initialize() throws Throwable { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path)); produtos = (List<Produto>)ois.readObject(); it = produtos.iterator(); } public boolean next() throws JRException { boolean next = it.hasNext(); if(next) // Obtem o proximo produto. produto = it.next(); } return next;

public Object getFieldValue(JRField arg0) throws JRException { if (arg0.getName().equals("ID")) return produto.getId().intValue(); if (arg0.getName().equals("NOME")) return produto.getDescricao(); if (arg0.getName().equals("PRECO")) return produto.getPreco().doubleValue(); } return null;

}
Cdigo 11.3 DataSource

E finalmente a classe para rodar o relatrio.

Relatrios Crosstab package br.com.targettrust.diegopacheco.jasperreports.datasource; import java.io.FileInputStream; import java.util.HashMap; import java.util.Map; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.view.JasperViewer; public class RunReport { public static void main(String[] args) throws Throwable { // Parametros necessrios para rodar o Jasper Reports. String jasperToRun = "./src/produtos.jasper"; Map<String, Object> parameters = new HashMap<String, Object>(); // Executa o reltrio e visualiza o mesmo. JasperPrint impressao = null; try { impressao = JasperFillManager.fillReport(new FileInputStream(jasperToRun),parameters,new ListProdutosDataSource("C:/lista_produtos.srl")); } catch (Exception e) { throw new RuntimeException(e); } JasperViewer viewer viewer.setVisible(true); } } Cdigo 11.4 Classe que roda o relatrio. = new JasperViewer(impressao, true);

A Classe Produto representa um pojo de Peoduto, ou seja, a entidade produto que pode ser entendida tambm pelo reflexo da tabela produto. A classe SerializaProdutos gera dinamicamente 50 produtos de os coloca em uma List de Produtos e apos isso essa classe serializa esse produtos no arquivo lista_produtos.srl. A classe ListProdutosDataSource o datasource de fato. Essa classe implementa a interface JRDataSource e tem a lgica de datasource. Primeiro obtido um ObjectInputStream apartir do path passado por parametro e recupera a List de Produtos, aps isso imediatamente guardado um Iterator que usado para saber se tem um prximo registro e pegar o prximo produto, o metodo getFieldValue feito usando um objeto produto que preenchido com o interator .next no metodo next. A classe RunReport simplesmente executa o ListProdutosDataSource e mostra o resultado na tela. relatrio com esse

Relatrios Crosstab

Exerccios
1.

Quando devemos usar a interface JRDataSource?

2. Crie um relatrio que mostre o nome a idade e o sexo de 100 pessoas.

Relatrios Crosstab

Espao para Anotaes

Relatrios Crosstab

You might also like