Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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
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
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
Instalando o iReport
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
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.
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.
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
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.
Isso far com que o iReport utilize a conexo com o Oracle para criar e visualizar os relatrios.
4. iReport Wizard
iReport Wizard
Objetivos
Aprender a utilizar o iReport Wizard Criar um relatrio utilizando o iReport Visualizar o relatrio criado
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
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.
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
Agora para visualizar o seu relatrio recm gerado, selecione no menu Build, a opo JRViewer preview.
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.
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
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
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.
A figura 5.1 mostra as faixas de ttulo, cabealho de pgina, cabealho de coluna, detalhe, rodap de pgina.
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.
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.
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.
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,
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.
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.
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
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.
6. Customizando Relatrios
Objetivos
Criar campos estticos no relatrio Criar campos para apresentar o resultado do SQL Criar grficos para seus 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.
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.
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.
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.
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.
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.
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.
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)
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.
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.
Como podemos ver no relatrio e no grfico o produto DVD-Writer o mais caro, seguido pelo CPU 2.5Ghz e pelo Monitor 17.
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.
7. Criando Subrelatrios
Objetivos
Oque um subrelatrio Para que serve Como usar um subrelatrio para gerar relatrios tipo Mestre-Detalhe
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.
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.
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.
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
apenas a coluna de UF para ser apresentada no relatrio. Aps terminar, seu relatrio o wizard deve estar como mostra a figura 7.4.
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.
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.
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.
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.
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.
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.
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.
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();
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)
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.
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.
9. Internacionalizao
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
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
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
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
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.
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.
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
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:
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
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
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); } }
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
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
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).
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).
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.
Desenhe o componente de Crosstab na banda de Summary, quando voc fizer isso ir aparecer uma janela de wizard.
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
A proxima tela a tela de Columns aqui vamos adicionar as colunas do crosstab. Selecione o campo UF(conforme figura 10.7).
Relatrios Crosstab
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)
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).
Est pronto! Voc ir notar que ele criu mais um elemento na aba de Relatrio com o nome crosstab-1(figura 10.10).
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:
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
JRDataSource
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
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
Dica: para agilizar o desenvolviemento do layout do relatrio arraste os fields da guia de library diretamente para a band que voc desejar.
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
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.
Relatrios Crosstab
Relatrios Crosstab