Java Relatorios
Java Relatorios
Java Relatorios
Gráficos em Java
Ementa
Modulo III – Relatórios em JAVA
Relatórios - Jasper e IReports
1
Bibliografia
Linguagem de Programação JAVA
Ismael H. F. Santos, Apostila UniverCidade, 2002
The Java Tutorial: A practical guide for programmers
Tutorial on-line: http://java.sun.com/docs/books/tutorial
Java in a Nutshell
David Flanagan, O´Reilly & Associates
Just Java 2
Mark C. Chan, Steven W. Griffith e Anthony F. Iasi, Makron
Books.
Java 1.2
Laura Lemay & Rogers Cadenhead, Editora Campos
Livros
Core Java 2, Cay S. Horstmann, Gary Cornell
Volume 1 (Fundamentos)
Volume 2 (Características Avançadas)
Java: Como Programar, Deitel & Deitel
Thinking in Patterns with JAVA, Bruce Eckel
Gratuito. http://www.mindview.net/Books/TIJ/
2
FPSW-Java
Relatórios
JasperReports
Relatórios
JasperReports
Framework open-source escrito em Java para
geração de relatórios
http://jasperreports.sourceforge.net/
3
iReport
O iReport é uma ferramenta que visa facilitar
a construção de relatórios (layout) utilizando
a biblioteca JasperReports através de uma
interface gráfica desenvolvida em Swing.
Usando JasperReports/iReport
1. Criação do desenho (layout) do relatório;
2. Preenchimento do relatório com dados;
3. Visualização (e/ou exportação) do relatório
(PDF, HTML, XLS, etc).
Obs.:
passo 1 é realizado no iReport;
passos 2 e 3 são programáticos, com o uso
da biblioteca JasperReports.
4
Funcionamento
O design do relatório é
definido em um arquivo
XML, que obedece a
estrutura declarada no
arquivo jasperreports.dtd.
O arquivo XML é
compilado gerando um
arquivo .jasper, onde as
expressões Java
existentes dentro do XML
serão verificadas em
tempo de compilação.
Maio 08 Prof. Ismael H. F. Santos - [email protected] 9
Funcionamento (cont.)
Pode-se ainda definir os
campos que serão
preenchidos dinamicamente
a partir de uma base de
dados.
Diferentes objetos
Jasperreports são usados
para representar as etapas
do processo de geração de
relatórios:
JasperDesign <- test.xml
JasperReport -> test.jasper
JasperPrint -> test.pdf
Maio 08 Prof. Ismael H. F. Santos - [email protected] 10
5
JasperReports DataSources
Para produzir um relatório precisamos fornecer dados ao
Jasper.
consultas SQL inserida no arquivo XML
um objeto ResulSet gerando por uma classe Java
Interface JRDataSource abstrai diferentes fontes de dados,
fornecendo os seguintes tipos:
JREmptyDatasource - especial datasource usado para
preencher relatórios que não possuem registros ou dados
recuperados
JRResultSetDataSource - implementação padrão desta
interface para objetos ResultSet
XML DataSource - empacotar um arquivo XML e normalizar
seu conteúdo. As únicas informações necessárias para criar
este tipo de datasource são: o nome do datasource e o nome
do arquivo XML.
Maio 08 Prof. Ismael H. F. Santos - [email protected] 11
JasperReports DataSources
TableModel DataSource – acessa tabelas já carregadas em
interfaces swing.
JavaBeans Set Datasource - capaz de empacotar uma
Collection ou um Array de JavaBeans. É necessário uma
classe especial de fábrica (factory) que forneça um método
estático para gerar a coleção ou um array de JavaBeans.
Custom Datasource - datasource genérico. É necessário uma
classe especial de fábrica (factory) que forneça um método
estático que retorne um JRDataSource.
No linguajar “Jasper", um datasource somado a um arquivo
.jasper gera um "print", que pode ser "exportado" para os
formatos PDF, HTML, XML, CVS ou XLS.
6
Campos e Parâmetros
Campos (Fields) são “áreas específicas” no relatório
que receberão diretamente os dados das respectivas
colunas referenciadas.
<field name=”Nome” class=”java.lang.String”/>
Parâmetros são dados passados para a operação de
preenchimento, que não podem ser encontrados
normalmente na fonte de dados.
<parameter name=”TituloDoRelatorio”
class=”java.lang.String”/>
Passados via código Java, através da classe HashMap:
Map parametros = new HashMap( ); parametros.put(
“Cliente”, “Fulano de Tal” );
Utilizados, por exemplo, na query do relatório
Select * FROM CLIENTE WHERE CLIENTE=$P{Cliente}
Maio 08 Prof. Ismael H. F. Santos - [email protected] 13
Variáveis
Variáveis são utilizadas para armazenar
resultados temporários necessários para geração
do relatório
podem referenciar tipos internos de cálculos, como
contagem (count), soma (sum), média (average),
menor (lowest), maior (highest), etc
<variable name=”ValorTotalCompraSum”
class=”java.lang.Double” calculation=”Sum”>
<variable expression> ${ValorProduto} </variable
expression>
</variable>
Maio 08 Prof. Ismael H. F. Santos - [email protected] 14
7
Variáveis
A ordem em que as variáveis são declaradas no
relatório é importante.
Podemos definir o nível no qual uma variável irá ser
inicializada. Pode ser no início do relatório (uma única
vez), a cada página, coluna ou grupo.
<variable name=”ValorTotalCompraSum”
class=”java.lang.Double” resetType=”Page”
calculation=”Sum”> <variable expression>
${ValorProduto} </variable expression>
<initialValueExpression> new Double( 0 )
</initialValueExpression>
</variable>
Variáveis internas da ferramenta: PAGE_NUMBER,
COLUMN_NUMBER, REPORT_COUNT,
PAGE_COUNT, COLUMN_COUNT.
Maio 08 Prof. Ismael H. F. Santos - [email protected] 15
Expressões
Expressões (Expressions) são utilizadas para especificar
o conteúdo de campos de texto, na realização de cálculos
freqüentes
Todas elas são expressões Java que podem conter em
sua sintaxe:
campos: acessado com $F{nome}
parâmetros: acessado com $P{nome}
variáveis de relatório: acessado com $V{nome}.
Exemplo de uma expressão:
<textFieldExpression> “Sr.(a) ” + $F{Cliente} + " realizou um
total de compras no valor de " + $V{ValorTotalCompraSum}
+ " no dia " + (new SimpleDateFormat("dd/MM/yyyy"))
.format($F{DataCompra}) + "."
</textFieldExpression>
Maio 08 Prof. Ismael H. F. Santos - [email protected] 16
8
Layout
O JasperReports divide o layout do relatório em
áreas “pré-definidas”, chamadas seções.
As seções levam em considerção a estrutura
visual de um relatório. São elas: background,
title, pageHeader, columnHeader, detail,
columnFoter, pageFooter, lastPageFooter e
summary.
9
JasperReport API
10
JasperReport API (cont.)
Interface net.sf.jasperreports.engine.JRDataSource
padroniza o comportamento das classes que manipulam as
fontes de dados necessárias durante o preenchimento dos
campos existentes no JasperReport.
Classe net.sf.jasperreports.engine.JasperFillManager
utilizada para gerar instâncias da classe JasperPrint
utilizando uma fonte de dados (JRDataSource) e uma
instância da classe JasperReport.
Classe net.sf.jasperreports.engine.JasperPrintManager
Permite imprimir o relatório completo ou páginas do mesmo.
É possível imprimir o relatório como uma imagem ( utilizando
o método printPageToImage)
Maio 08 Prof. Ismael H. F. Santos - [email protected] 21
11
JasperReport API (cont.)
public void gerar( String layout ) throws JRException , SQLException,
ClassNotFoundException {
//gerando o jasper design JasperDesign
desenho = JRXmlLoader.load( layout );
//compila o relatório JasperReport
relat = JasperCompileManager.compileReport( desenho );
//estabelece conexão
Class.forName( driver );
Connection con = DriverManager.getConnection( url , login , pwd );
Statement stm = con.createStatement();
String query = "select * from turma";
ResultSet rs = stm.executeQuery( query );
//implementação da interface JR ResultSetDataSource
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
Maio 08 Prof. Ismael H. F. Santos - [email protected] 23
12
FPSW-Java
Layout do
Relatório
IReport
Relatórios
IReport
O iReport é uma ferramenta que permite definir
o design do relatório dentro de um ambiente
gráfico, contento “todos” os recursos que a
biblioteca Jasper oferece.
É possível definir relatórios com designs
modernos e complexos sem se quer escrever
uma linha de código XML, que é todo gerado
automaticamente
13
Criar um arquivo JRXML
Relatório no iReport é
armazenado em um .jrxml
No menu File, clique em
New Document;
Aparece a janela para
configuração do seu
relatório:
o nome do relatório,
tamanho da folha,
margens,
colunas do relatório
Maio 08 Prof. Ismael H. F. Santos - [email protected] 27
14
Seções do layout do relatório
O detail é a banda onde os valores dos campos são
apresentados. Por exemplo, “Jorge Horacio”, “12:00h”,
“18:00h”, 06 horas”
O columnFooter pode indicar a soma de alguns dos
campos. Por exemplo “Horas totais trabalhadas: 180”
O pageFooter aparece no final de cada página. Pode
conter o número da página como “1/7”.
O summary é a banda onde a informação inferida a
partir dos dados da banda “detalhe” é indicada.
Por exemplo, após ter listado as horas trabalhadas para
cada empregado na banda do “detalhe”, as horas totais
trabalhadas para cada empregado podem ser
apresentadas em um gráfico de torta.
Maio 08 Prof. Ismael H. F. Santos - [email protected] 29
Exemplo
A tabela a seguir os textos “Relatório Biblioteca Pessoal”,
“Data:”, “Código”, “Título”, “Volume”, “Edição”, “Editora”, “Autor”
e “Adquirido em” são campos de texto estático
A tabela contém
dois Retângulos
“arredondados
enquanto os
outros elementos
são todos
campos (fields)
15
Definição da fonte de dados
Para a criação do relatório, é preciso obter
acesso aos metadados de uma fonte de
dados.
Para isso, é necessário definir essa fonte.
Os metadados da fonte são usados na
definição do layout do relatório.
O iReport provê suporte a diversas fontes de
dados: JDBC, Hibernate, etc.
16
Definir a consulta do relatório
Após a definição da fonte de dados, devemos
definir a consulta do relatório.
Essa consulta tem os seguintes objetivos:
apresentar ao iReport os metadados;
permitir testar o relatório com informações
provenientes da fonte de dados.
Para definir a consulta, obtenha acesso à
opção “Dados | Consulta do Relatório” na
barra de menus do iReport.
Desenhar o relatório
Após a definição da consulta, os campos do
resultado da consulta ficam disponíveis para
desenhar o relatório.
Veja a janela “Library”
Expanda a pasta “Campos”
Arraste os campos desejados para a seção
adequada do relatório (normalmente essa
seção é a “details”)
17
Compilar o relatório
Após o desenho do relatório, devemos compilá-lo.
Esse processo corresponde a gerar uma
representação em formato binário do relatório.
Resultado da compilação é um arquivo com a
extensão .jasper.
É essa representação que usamos com o
JasperReport para “preencher” o relatório.
Para compilar o relatório, use a opção “Criar |
Compilar” na barra de menus do iReport.
Há também um ícone na barra de ícones.
Maio 08 Prof. Ismael H. F. Santos - [email protected] 35
Compilar o relatório
O detail é a banda onde os valores dos campos são apresentados. Por exemplo, “Eduardo Bezerra”, “12:00h”, “18:00h”, 06 horas”
18
FPSW-Java
Preencher e
Visualizar o
Relatório
Relatórios
Preencher o relatório
Classe JasperFillManager
Principal método: fillReport (estático)
Retorna objeto JasperPrint
Assinatura:
JasperPrint fillReport(
String sourceFileName,
HashMap parameters,
Connection connection);
19
Preencher o relatório (cont.)
Parâmetros de fillReport:
String sourceFileName: corresponde ao nome
do relatório compilado (.jasper).
HashMap parameters: lista de parâmetros do
relatório (e.g., título, data, sessão)
Connection connection: conexão (JDBC) com a
fonte de dados utilizada para preencher o
relatório.
Exportar o relatório
JasperExportManager
Classe útil quando queremos exportar o relatório
para diversos formatos.
Exemplos:
JasperExportManager.exportReportToHtmlFile(
print, "hello.html");
JasperExportManager.exportReportToPdfFile(
print, "hello.pdf");
JasperExportManager.exportReportToXmlFile(
print, "hello.xml", false);
20
Visualizar o relatório
JasperViewer
Classe útil para visualização do relatório.
O visualizador utilizado é do próprio Jasper
O método viewReport (estático) é usado para
apresentar o relatório no visualizador.
Assinatura:
JasperViewer.viewReport(
JasperPrint jasperPrint,
boolean isExitOnClose)
Maio 08 Prof. Ismael H. F. Santos - [email protected] 41
Recursos relevantes
http://jasperreports.sourceforge.net/
http://jasperforge.org/sf/projects/ireport
http://www.jfreechart.org/
http://www.javafree.org/javabb/viewtopic.jbb?t=3154
21
FPSW-Java
JFreeChart
Relatórios
O que é JFreeChart?
JFreeChart é uma biblioteca livre para a Java
utilizada em Aplicações Desktop, Applets, Servlets
e JSP. http://www.jfree.org/jfreechart/index.html
22
O que é JFreeChart?
JFreechart pode ser usado para gerar gráficos de
Pizza, gráficos de Barra, gráficos de linha (com ou
sem efeito 3D), gráficos combinados, dentre
diversos outros tipos de gráficos. Exporta dados
para o formato PNG ou JPEG, Exporta para
qualquer formato usando a implementação de
Graphics2D incluindo:
PDF via iText (http://www.lowagie.com/iText/);
SVG via Batik (http://xml.apache.org/batik/);
Usando JFreeChart
Os .jar’s do JFreeChart são jcommon-1.0.12.jar e
jfreechart-1.0.9.jar devem ser adicionados ao lib
do projeto.
23
JFreeChart -> IReport
Para anexar os gráficos do JFreeChart ao IReport
é preciso instalar o plugin-netbeans do IReport.
1209691533171__iReport-nb-0.9.1.2.nbm
Gerando os Gráficos
Primeiramente, vamos criar as classes
ModeloGraficoItem que armazenará os dados que
darão origem ao gráfico e
ComposicaoDadosItemGrafico que gerará valores
arbitrários que serão exibidos no gráfico:
ModeloGraficoItem.java
ComposicaoDadosItemGrafico.java
O relatório contém
3 fields para
receber os valores
que darão origem
ao gráfico.
24
Modelo no IReport -> JFreeChart
Nesta mesma tela, na aba Parameters vamos
criar o parâmetro que irá receber a imagem.
Observe que este parâmetro deve ser do tipo
java.lang.Object:
25
Modelo no IReport -> JFreeChart
A montagem final do Modelo ficou assim (salvo
com o nome de ModeloGrafico): .
26
Modelo no IReport -> JFreeChart
// A String pathJasper garda o caminho para o relatório
compilado ModeloGrafico.jasper localizado na
subpasta
//relatorio/grafico
String pathJasper = "/TesteGrafico.jasper";
JRDataSource jrDataSourse = new
JRBeanArrayDataSource(array.toArray());
Jasper Print impressao =
JasperFillManager.fillReport(pathJasper, params,
jrDataSourse);
JasperExportManager.exportReportToPdf(impressao,
“ModeloGrafico.pdf"););
27
Modelo no IReport -> JFreeChart
28
Fonte de dados via Hibernate
Configure o classpath (Options->classpath). Em
particular, todos os itens a seguir devem estar
disponíveis ao iReport:
arquivos de mapeamento (.hbm.xml)
arquivos das classes persistentes (.class)
arquivo de configuração do Hibernate
driver JDBC do SGBD a que ser quer ter acesso
Após a configuração do classpath, configure a
conexão (análoga à configuração via JDBC)
29