SlideShare uma empresa Scribd logo
1 de 47
Baixar para ler offline
Aplicações normalmente precisam de algum
tipo de relatório.
Em Java existem alguns frameworks que
podem ser utilizados para facilitar a geração
podem ser utilizados para facilitar a geração
destes relatórios.
Dentre os frameworks, o JasperReports com
iReport é um dos que faz mais sucesso, seja
para web ou não.
JasperReports
Framework open source escrito em Java para geração
de relatórios.
Biblioteca motor que transforma o arquivo JRXML em
Biblioteca motor que transforma o arquivo JRXML em
um relatório exportado para uma das extensões
suportadas (PDF, HTML, etc) usando a fonte de dados
especificada
Design definido via XML
Após codificado, o arquivo deve ser compilado,
gerando assim um arquivo .jasper
Desenvolvimento trabalhoso.
iReport
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.
desenvolvida em Swing.
Fornece suporte à construção de relatórios complexos.
Permite inserir tipos de objetos como textos estáticos,
figuras geométricas, imagens, gráficos, sub relatórios
entre outros.
Elimina a necessidade de manipulação direta dos
arquivos JRXML.
É possível adicionar complementos para acrescentar
funcionalidades ou estender as existentes em um
relatório. Entre eles estão:
iText: extensão para gerar e manipular arquivos RTF, XML,
iText: extensão para gerar e manipular arquivos RTF, XML,
HTML e PDF.
JFreeChart: Geração de gráficos
Apache POI: permite criar e manipular vários formatos do
Microsoft Office, além da extensão OLE 2.
Campos (Fields) são “áreas específicas” no relatório que
receberão diretamente os dados das colunas referenciadas.
Ex:
<field name=“Nome” class=“java.lang.String”/>
Parâmetros são dados passados para a operação de
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. Ex:
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}
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. Ex
(lowest), maior (highest), etc. Ex
<variable name=“ValorTotalCompraSum”
class=“java.lang.Double” calculation=“Sum”>
<variable expression> ${ValorProduto} </variable expression>
</variable>
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”
<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.
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}
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>
O JasperReports divide o layout do relatório em áreas
“pré-definidas”, chamadas seções ou bandas.
As seções ou bandas, levam em considerção a estrutura
visual de um relatório. São elas: background, title,
visual de um relatório. São elas: background, title,
pageHeader, columnHeader, detail, columnFoter,
pageFooter, lastPageFooter, summary e noData.
O conteúdo colocado na banda background é exibido como plano
de fundo das páginas do relatório. Por padrão este é exibido em
todas as páginas, mas isto pode ser configurado.
O conteúdo da banda title aparece somente uma vez no começo do
relatório.
O que definimos na banda pageHeader aparece no alto de cada
página do mesmo.
Esta parte pode, por exemplo, conter a data/hora e/ou o nome da
organização.
O columnHeader lista nomes daqueles campos específicos que você
quer apresentar.
Por exemplo do “Nome do empregado”, “Hora de Início”, “Hora de
término”, “Horas trabalhadas”, etc.
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 “Total de horas trabalhadas: 180”
O pageFooter aparece no final de cada página. Pode conter por
exemplo, o número da página como “1 de 7”.
O lastPageFooter permite colocar uma informação diferenciada no
rodapé da última página.
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 “detail”, as horas totais trabalhadas para cada empregado
podem ser apresentadas em um gráfico de pizza.
A banda noData é impressa quando não existem dados para
impressão no relatório.
Às vezes pode ser necessário agrupar algumas informações em comum no seu
relatório.
O iReport permite que você crie seções adicionais de agrupamento: Group Header e
Group Footer.
A banda Group Header exibe as informações sobre o grupo (ex: nome do grupo),
antes que as informações agrupadas sejam exibidas. Ex:
antes que as informações agrupadas sejam exibidas. Ex:
Mamíferos
Cavalo, Vaca, Elefante.
Insetos
Formiga, Mosca, Abelha.
A banda Group Footer exibe informações finais do grupo (ex: total de registro no
grupo), após as informações agrupadas terem sido exibidas. Ex:
Cavalo, Vaca, Elefante.
Total de Mamíferos: 3
Formiga, Mosca, Abelha.
Total de Insetos: 3
O relatório pode ser desenvolvido no programa externo
iReport que pode ser obtido no endereço
http://community.jaspersoft.com/project/ireport-designer,
ou pode-se incluir um plugin no eclipse que permite a criação
e edição do relatório dentro do próprio eclipse. Utilizaremos a
e edição do relatório dentro do próprio eclipse. Utilizaremos a
segunda opção.
Clique no menu Help >
Eclipse Marketplace
Pesquise por jaspersoft
studio
Em seguida clique no
Em seguida clique no
botão Install.
Siga os passos da
instalação.
Ao concluir a instalação,
reinicie o Eclipse.
Antes de começar, crie o pacote
unifimes.pdw.relatorios
Acesse o menu File > New >
Jasper Report
Nesse ponto, você pode optar
Nesse ponto, você pode optar
por criar um relatório em branco
(mais trabalhoso, porém mais
flexível) ou utilizar um dos
modelos oferecidos.
Para o nosso exemplo, selecione
o modelo Coffee
Clique em Next
Indique o local onde o
relatório deverá ser salvo.
Em nosso exemplo, vamos
deixar dentro do pacote
deixar dentro do pacote
unifimes.pdw.relatorios.
Clique em Next.
Neste ponto, você deve
selecionar uma fonte de
dados.
O iReport provê suporte a
diversas fontes de dados:
diversas fontes de dados:
JDBC, Hibernate, etc.
Se não existir nenhuma
configurada, clique em
New.
Se existir, selecione-a e
pule os 3 próximos slides
desta apresentação.
Nesta tela, selecione o
tipo da fonte de dados.
Em nosso exemplo
iremos trabalhar com
iremos trabalhar com
conexão JDBC, então
selecione a opção
Database JDBC
Connection.
Clique em Next
Nesta tela, informe os
dados da conexão
Qual o driver?
Qual a url do banco de
dados?
dados?
Qual o usuário?
Qual a senha?
Após informar os dados
acima, alterne para a aba
Driver Classpath.
Nesta aba, informe o conector
(arquivo .jar) do banco. Em
nosso exemplo, informe o
conector MySQL utilizado nos
exemplos anteriores. Se você
não possui, ele pode ser obtido
no endereço:
no endereço:
http://dev.mysql.com/download
s/connector/j/
Clique no botãoTest. Se os
dados foram informados
corretamente, você deverá
obter uma mensagem de
sucesso.Caso contrário, revise
os dados informados.
Clique em Finish.
Com a fonte de dados
selecionada, informe o
código SQL para obter
os dados que irão
preencher o relatório.
preencher o relatório.
Em nosso exemplo,
digite: select * from
produto
Clique em Next.
Se a consulta estiver
correta, esta tela deve
exibir os campos
retornados por ela, para
que você selecione
apenas os que serão
que você selecione
apenas os que serão
exibidos no relatório.
Em nosso exemplo,
selecione os campos: id,
nome, valor e validade.
Clique em Next.
Nesta tela, você deve
informar o(s) campo(s)
pelo qual os registros
serão agrupados.
serão agrupados.
Em nosso exemplo, não
haverá agrupamento de
informações, logo, não
selecione nenhum.
Clique em Finish.
Após concluir, o
eclipse deve
alternar para a
perspectiva
perspectiva
Report Design
que permite a
edição do
relatório.
No iReport é possível adicionar máscaras de formatação aos
valores do tipo Date e Numérico. Para isto, selecione o
campo a ser formatado, vá até as propriedades e selecione a
abaText Field. Localize a opção Pattern, clique na reticências
e selecione o padrão desejado ou crie o seu próprio.
e selecione o padrão desejado ou crie o seu próprio.
Se algum campo estiver com valor nulo, o iReport irá
imprimir por padrão a string null. Para alterar isto, vá até as
propriedades e selecione a abaText Field. Procure pela
opção Blank when null e marque-a.
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.
“preencher” o relatório.
Para que o eclipse faça a compilação e exibição dos arquivos
.jasper, clique com o botão direito no nome do projeto e acesse a
opção JasperReports > Toggle JasperReports Nature.
A partir daí, a compilação do arquivo JRXML no eclipse é feita
juntamente com a do projeto. Se a opção Build Automatically
estiver ativa, ela deve ocorrer sempre que uma modificação for
salva.
Uma vez compilado o relatório, pode-se chamar o
relatório via Java, para que a aplicação exiba os relatórios
desejados.
A seguir conheceremos algumas classes que ajudam nesta
tarefa.
Atenção: É possível compilar o arquivo JRXML e gerar o arquivo .jasper via
código java. Contudo, a menos que isto seja fundamental, recomenda-se
compilá-lo previamente e só efetuar as requisições ao .jasper via código
java, de forma a evitar constantes compilações a cada nova requisição do
relatório.
tarefa.
Classe JRLoader
Principais Métodos:
loadObjectFromFile(java.lang.String str);
loadObjectFromFile(java.lang.String str);
loadObject(java.io.File file)
loadObject(java.net.URL url)
loadObject(java.io.InputStream is);
Classe JasperFillManager
Principal método: fillReport (estático)
Retorna objeto JasperPrint
Assinatura:
Assinatura:
JasperPrint fillReport(
String sourceFileName,
HashMap parameters,
Connection connection);
Parâmetros de fillReport:
String sourceFileName: corresponde ao nome do
relatório compilado (.jasper).
HashMap parameters: lista de parâmetros do
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.
JRExporter
Classe útil quando queremos exportar o relatório para diversos
formatos.
Exemplos:
JRExporter jrPdf = new JRPdfExporter();
jrPdf. exportReport(); //exporta para pdf
jrPdf. exportReport(); //exporta para pdf
JRExporter jrHtml = new JRHtmlExporter();
jrHtml. exportReport(); //exporta para html
JRExporter jrXls = new JRXlsExporter();
jrXls. exportReport(); //exporta para excel
JRExporter jrOdt = new JROdtExporter();
jrOdt. exportReport(); //exporta para odt
Crie um pacote chamado unifimes.pdw.relatorios.
Adicione os arquivos abaixo dentro de WebContent >WEB-INF > lib
commons-beanutils-x.x.x.jar
commons-collections-x.x.x.jar
commons-digester-x.x.jar
commons-javaflow-x.jar
commons-javaflow-x.jar
groovy-all-x.x.x.jar
iText-x.x.x.jar
jasperreports-x.x.x.jar
poi-x.x-x.jar
primefaces-x.x.jar
Crie o pacote unifimes.pdw.util.
Crie uma classe chamada RelatorioUtil.java
public class RelatorioUtil {
public static final int RELATORIO_PDF = 1;
public static final int RELATORIO_EXCEL = 2;
public static final int RELATORIO_HTML = 3;
public static final int RELATORIO_PLANILHA_OPEN_OFFICE = 4;
public static final intRELATORIO_EDITOR_WORD = 5;
public static final intRELATORIO_EDITOR_OPEN_OFFICE = 6;
public static final intRELATORIO_EDITOR_OPEN_OFFICE = 6;
public StreamedContent geraRelatorio(HashMap<String, Object> parametrosRelatorio, JasperReport
relatorioJasper, String nomeRelatorioSaida, int tipoRelatorio, Connection con) throws Exception {
StreamedContent arquivoRetorno = null;
try {
FacesContext context = FacesContext.getCurrentInstance();
String caminhoRelatorio = context.getExternalContext().getRealPath("/");
String caminhoArquivoRelatorio = null;
JasperPrint impressoraJasper = JasperFillManager.fillReport(relatorioJasper,
parametrosRelatorio, con);
JRExporter tipoArquivoExportado = null;
String extensaoArquivoExportado = "";
File arquivoGerado = null;
switch (tipoRelatorio) {
case RelatorioUtil.RELATORIO_PDF :
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
break;
case RelatorioUtil.RELATORIO_HTML :
tipoArquivoExportado = new JRHtmlExporter();
extensaoArquivoExportado = "html";
break;
case RelatorioUtil.RELATORIO_EXCEL :
tipoArquivoExportado = new JRXlsExporter();
extensaoArquivoExportado = "xls";
break;
break;
case RelatorioUtil.RELATORIO_PLANILHA_OPEN_OFFICE :
tipoArquivoExportado = new JROdsExporter();
extensaoArquivoExportado = "ods";
break;
case RelatorioUtil.RELATORIO_EDITOR_WORD :
tipoArquivoExportado = new JRDocxExporter();
extensaoArquivoExportado = "docx";
break;
case RelatorioUtil.RELATORIO_EDITOR_OPEN_OFFICE :
tipoArquivoExportado = new JROdtExporter();
extensaoArquivoExportado = "odt";
break;
default :
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
Break;
}
caminhoArquivoRelatorio = caminhoRelatorio + File.separator +
nomeRelatorioSaida + "." + extensaoArquivoExportado;
arquivoGerado = new java.io.File(caminhoArquivoRelatorio);
tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT,
impressoraJasper);
tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE,
arquivoGerado);
tipoArquivoExportado.exportReport();
arquivoGerado.deleteOnExit();
arquivoGerado.deleteOnExit();
InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio,
"application/" + extensaoArquivoExportado, nomeRelatorioSaida + "." +
extensaoArquivoExportado);
} catch (JRException e) {
throw new Exception("Não foi possível gerar o relatório.", e);
} catch (FileNotFoundException e) {
throw new Exception("Arquivo do relatório não encontrado.", e);
}
return arquivoRetorno;
}
}
Altere sua classe ProdutoBean.java e adicione o código a seguir:
private StreamedContent retorno;
private Integer tipo;
public StreamedContent getRetorno() { imprimir(); return retorno; }
public void setRetorno(StreamedContent retorno) { this.retorno = retorno; }
public Integer getTipo() {return tipo; }
public void setTipo(Integer tipo) { this.tipo = tipo; }
public void setTipo(Integer tipo) { this.tipo = tipo; }
public void imprimir () {
String relatorioJasper = new String();
FacesContext facesContext = FacesContext.getCurrentInstance();
try {
URL urlRelatorio = getClass().getResource(relatorioJasper);
JasperReport jr = (JasperReport) JRLoader.loadObject(urlRelatorio);
Conexao com = new Conexao().getConexao();
this.arquivoRetorno = new RelatorioUtil().geraRelatorio(null, jr, "relatorio", tipo, con);
} catch (Exception ex) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Erro ao visualizar certificado", "Detalhes: “+ ex.getMessage()));
}
}
Altere produtos.xhtml e acrescente o código abaixo após os
componentes datatable e message:
Tipo:
<p:selectOneRadio id="options" value="#{produto.tipo}">
<f:selectItem itemLabel="PDF" itemValue="1" />
<f:selectItem itemLabel="XLS" itemValue="2" />
<f:selectItem itemLabel="XLS" itemValue="2" />
<f:selectItem itemLabel="HTML" itemValue="3" />
<f:selectItem itemLabel="ODS" itemValue="4" />
<f:selectItem itemLabel="DOCX" itemValue="5" />
<f:selectItem itemLabel="ODT" itemValue="6" />
</p:selectOneRadio>
<p:commandButton ajax="false" value="Emitir Relatório">
<p:fileDownload value="#{produto.arquivoRetorno}“/>
</p:commandButton>
Altere produtos.xhml e adicione o código abaixo para criar
uma nova coluna no datatable.
<p:column sortBy="#{prod.id}">
<f:facet name="header"><p:outputLabel
value="Relatório"/></f:facet>
value="Relatório"/></f:facet>
<p:commandLink value="Gerar PDF" ajax="false">
<f:setPropertyActionListener target="#{produto.id}"
value="#{prod.id}"></f:setPropertyActionListener>
<p:fileDownload
value="#{produto.produtoRetornado}"></p:fileDownload>
</p:commandLink>
</p:column>
Altere ProdutoBean.java e adicione o código abaixo:
private StreamedContent produtoRetornado;
public StreamedContent getProdutoRetornado() { imprimirProduto(); return produtoRetornado; }
public void setProdutoRetornado(StreamedContent produtoRetornado){ this.produtoRetornado =
produtoRetornado; }
private void imprimirProduto() {
String relatorioJasper = new String();
relatorioJasper = "/pdw/relatorios/produto.jasper";
FacesContext facesContext = FacesContext.getCurrentInstance();
try {
URL urlRelatorio = getClass().getResource(relatorioJasper);
JasperReport jr = (JasperReport) JRLoader.loadObject(urlRelatorio);
HashMap<String, Object> parametro = new HashMap<String, Object>();
parametro.put("idProduto", id);
Connection con = new Conexao().getConexao();
produtoRetornado = new RelatorioUtil().geraRelatorio(parametro, jr, "relatorio", 1, con);
} catch (Exception ex) {
facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
"Erro ao visualizar certificado", "Detalhes: “ + ex.getMessage()));
}
}
Crie um novo relatório
assim como o anterior,
mas desta vez, agrupe
os dados pelo nome do
produto.
produto.
Após criar o produto,
crie um novo
parâmetro (Botão
direito em Parameters >
Create Parameter)
chamado idProduto
Altere o tipo do
parâmetro criado
(Selecione o parâmetro
e vá em propriedades)
e vá em propriedades)
para java.lang.Integer.
SANTOS, Ismael H. F. Módulo III – Relatórios e Gráficos em Java. Disponível em: http://www.tecgraf.puc-
rio.br/~ismael/Cursos/Cidade_FPSW/aulas/Modulo3_Graficos_Relatorios/Java_Relatorios.pdf. Acesso
em: 03 de junho de 2013.
TOFFOLI, Giulio. iReport – User Manual. Disponível em: http://pt.scribd.com/doc/97594609/iReport-
User-Manual. Acesso em: 05 de junho de 2013.
ARAÚJO, Everton Coimbra de. Desenvolvimento para WEB com Java. Florianópolis: Visual Books, 2010.
ARAÚJO, Everton Coimbra de. Desenvolvimento para WEB com Java. Florianópolis: Visual Books, 2010.
LUCKOW, Décio Heinzelmann; MELO, Alexandre Altair de. Programação Java para a WEB. São Paulo:
Novatec Editora, 2010.

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Excel
ExcelExcel
Excel
 
Introdução ao Excel 2010
Introdução ao Excel 2010Introdução ao Excel 2010
Introdução ao Excel 2010
 
Principais instruções em sql
Principais instruções em sqlPrincipais instruções em sql
Principais instruções em sql
 
Etec ai -31- banco de dados
Etec   ai -31- banco de dadosEtec   ai -31- banco de dados
Etec ai -31- banco de dados
 
Excel 2010 na_pratica_3
Excel 2010 na_pratica_3Excel 2010 na_pratica_3
Excel 2010 na_pratica_3
 
Manual vsflexgrid
Manual vsflexgridManual vsflexgrid
Manual vsflexgrid
 
Excel
ExcelExcel
Excel
 
Sql
SqlSql
Sql
 
Curso de excel 2003
Curso de excel 2003Curso de excel 2003
Curso de excel 2003
 
Excel avancado 2015
Excel avancado 2015Excel avancado 2015
Excel avancado 2015
 
Tic-excel-01
Tic-excel-01 Tic-excel-01
Tic-excel-01
 
Consultas SQL
Consultas SQLConsultas SQL
Consultas SQL
 
Crystal reports tutorial gerando seus relatórios
Crystal reports   tutorial gerando seus relatóriosCrystal reports   tutorial gerando seus relatórios
Crystal reports tutorial gerando seus relatórios
 
Folha de calculo
Folha de calculoFolha de calculo
Folha de calculo
 
04 roteiro
04 roteiro04 roteiro
04 roteiro
 
Banco dados lj
Banco dados ljBanco dados lj
Banco dados lj
 
Excel 3
Excel 3Excel 3
Excel 3
 
TOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQLTOTVS LINHA RM TREINAMENTO SQL
TOTVS LINHA RM TREINAMENTO SQL
 
Microsoft Excel
Microsoft ExcelMicrosoft Excel
Microsoft Excel
 
Apresentação Excel
Apresentação ExcelApresentação Excel
Apresentação Excel
 

Semelhante a IReport.pdf

Semelhante a IReport.pdf (20)

JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 
Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto
Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a ObjetoProjeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto
Projeto de Máquina de Cálculo de Folha de Pagamento Orientado a Objeto
 
Apostila de algoritimos
Apostila de algoritimosApostila de algoritimos
Apostila de algoritimos
 
ODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para TabelasODI Series - Importar Arquivos Texto para Tabelas
ODI Series - Importar Arquivos Texto para Tabelas
 
Tutorial R
Tutorial RTutorial R
Tutorial R
 
Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3Curso Básico de Java - Aula 3
Curso Básico de Java - Aula 3
 
Aula2
Aula2Aula2
Aula2
 
Cartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdfCartilha de R para Estatística e Data Science.pdf
Cartilha de R para Estatística e Data Science.pdf
 
Excel - como funciona
Excel - como funcionaExcel - como funciona
Excel - como funciona
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Rm1150130412rmglobais
Rm1150130412rmglobaisRm1150130412rmglobais
Rm1150130412rmglobais
 
Access
AccessAccess
Access
 
RCOM 11º Ano - HTML
RCOM 11º Ano - HTMLRCOM 11º Ano - HTML
RCOM 11º Ano - HTML
 
Sap – stablility and abstract principle
Sap – stablility and abstract principleSap – stablility and abstract principle
Sap – stablility and abstract principle
 
Apostila de java
Apostila de javaApostila de java
Apostila de java
 
Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05Tw Course Ajax 2007 Ap05
Tw Course Ajax 2007 Ap05
 
3260 php truquesmagicos %281%29
3260 php truquesmagicos %281%293260 php truquesmagicos %281%29
3260 php truquesmagicos %281%29
 
3260 php truquesmagicos
3260 php truquesmagicos3260 php truquesmagicos
3260 php truquesmagicos
 
Guia prático para criar algoritmos
Guia prático para criar algoritmosGuia prático para criar algoritmos
Guia prático para criar algoritmos
 
Spring & Struts
Spring & StrutsSpring & Struts
Spring & Struts
 

IReport.pdf

  • 1.
  • 2. Aplicações normalmente precisam de algum tipo de relatório. Em Java existem alguns frameworks que podem ser utilizados para facilitar a geração podem ser utilizados para facilitar a geração destes relatórios. Dentre os frameworks, o JasperReports com iReport é um dos que faz mais sucesso, seja para web ou não.
  • 3. JasperReports Framework open source escrito em Java para geração de relatórios. Biblioteca motor que transforma o arquivo JRXML em Biblioteca motor que transforma o arquivo JRXML em um relatório exportado para uma das extensões suportadas (PDF, HTML, etc) usando a fonte de dados especificada Design definido via XML Após codificado, o arquivo deve ser compilado, gerando assim um arquivo .jasper Desenvolvimento trabalhoso.
  • 4. iReport 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. desenvolvida em Swing. Fornece suporte à construção de relatórios complexos. Permite inserir tipos de objetos como textos estáticos, figuras geométricas, imagens, gráficos, sub relatórios entre outros. Elimina a necessidade de manipulação direta dos arquivos JRXML.
  • 5. É possível adicionar complementos para acrescentar funcionalidades ou estender as existentes em um relatório. Entre eles estão: iText: extensão para gerar e manipular arquivos RTF, XML, iText: extensão para gerar e manipular arquivos RTF, XML, HTML e PDF. JFreeChart: Geração de gráficos Apache POI: permite criar e manipular vários formatos do Microsoft Office, além da extensão OLE 2.
  • 6.
  • 7. Campos (Fields) são “áreas específicas” no relatório que receberão diretamente os dados das colunas referenciadas. Ex: <field name=“Nome” class=“java.lang.String”/> Parâmetros são dados passados para a operação de 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. Ex: 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}
  • 8. 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. Ex (lowest), maior (highest), etc. Ex <variable name=“ValorTotalCompraSum” class=“java.lang.Double” calculation=“Sum”> <variable expression> ${ValorProduto} </variable expression> </variable>
  • 9. 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” <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.
  • 10. 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} 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>
  • 11. O JasperReports divide o layout do relatório em áreas “pré-definidas”, chamadas seções ou bandas. As seções ou bandas, levam em considerção a estrutura visual de um relatório. São elas: background, title, visual de um relatório. São elas: background, title, pageHeader, columnHeader, detail, columnFoter, pageFooter, lastPageFooter, summary e noData.
  • 12. O conteúdo colocado na banda background é exibido como plano de fundo das páginas do relatório. Por padrão este é exibido em todas as páginas, mas isto pode ser configurado. O conteúdo da banda title aparece somente uma vez no começo do relatório. O que definimos na banda pageHeader aparece no alto de cada página do mesmo. Esta parte pode, por exemplo, conter a data/hora e/ou o nome da organização. O columnHeader lista nomes daqueles campos específicos que você quer apresentar. Por exemplo do “Nome do empregado”, “Hora de Início”, “Hora de término”, “Horas trabalhadas”, etc.
  • 13. 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 “Total de horas trabalhadas: 180” O pageFooter aparece no final de cada página. Pode conter por exemplo, o número da página como “1 de 7”. O lastPageFooter permite colocar uma informação diferenciada no rodapé da última página. 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 “detail”, as horas totais trabalhadas para cada empregado podem ser apresentadas em um gráfico de pizza. A banda noData é impressa quando não existem dados para impressão no relatório.
  • 14. Às vezes pode ser necessário agrupar algumas informações em comum no seu relatório. O iReport permite que você crie seções adicionais de agrupamento: Group Header e Group Footer. A banda Group Header exibe as informações sobre o grupo (ex: nome do grupo), antes que as informações agrupadas sejam exibidas. Ex: antes que as informações agrupadas sejam exibidas. Ex: Mamíferos Cavalo, Vaca, Elefante. Insetos Formiga, Mosca, Abelha. A banda Group Footer exibe informações finais do grupo (ex: total de registro no grupo), após as informações agrupadas terem sido exibidas. Ex: Cavalo, Vaca, Elefante. Total de Mamíferos: 3 Formiga, Mosca, Abelha. Total de Insetos: 3
  • 15.
  • 16. O relatório pode ser desenvolvido no programa externo iReport que pode ser obtido no endereço http://community.jaspersoft.com/project/ireport-designer, ou pode-se incluir um plugin no eclipse que permite a criação e edição do relatório dentro do próprio eclipse. Utilizaremos a e edição do relatório dentro do próprio eclipse. Utilizaremos a segunda opção.
  • 17. Clique no menu Help > Eclipse Marketplace
  • 18. Pesquise por jaspersoft studio Em seguida clique no Em seguida clique no botão Install. Siga os passos da instalação. Ao concluir a instalação, reinicie o Eclipse.
  • 19. Antes de começar, crie o pacote unifimes.pdw.relatorios Acesse o menu File > New > Jasper Report Nesse ponto, você pode optar Nesse ponto, você pode optar por criar um relatório em branco (mais trabalhoso, porém mais flexível) ou utilizar um dos modelos oferecidos. Para o nosso exemplo, selecione o modelo Coffee Clique em Next
  • 20. Indique o local onde o relatório deverá ser salvo. Em nosso exemplo, vamos deixar dentro do pacote deixar dentro do pacote unifimes.pdw.relatorios. Clique em Next.
  • 21. Neste ponto, você deve selecionar uma fonte de dados. O iReport provê suporte a diversas fontes de dados: diversas fontes de dados: JDBC, Hibernate, etc. Se não existir nenhuma configurada, clique em New. Se existir, selecione-a e pule os 3 próximos slides desta apresentação.
  • 22. Nesta tela, selecione o tipo da fonte de dados. Em nosso exemplo iremos trabalhar com iremos trabalhar com conexão JDBC, então selecione a opção Database JDBC Connection. Clique em Next
  • 23. Nesta tela, informe os dados da conexão Qual o driver? Qual a url do banco de dados? dados? Qual o usuário? Qual a senha? Após informar os dados acima, alterne para a aba Driver Classpath.
  • 24. Nesta aba, informe o conector (arquivo .jar) do banco. Em nosso exemplo, informe o conector MySQL utilizado nos exemplos anteriores. Se você não possui, ele pode ser obtido no endereço: no endereço: http://dev.mysql.com/download s/connector/j/ Clique no botãoTest. Se os dados foram informados corretamente, você deverá obter uma mensagem de sucesso.Caso contrário, revise os dados informados. Clique em Finish.
  • 25. Com a fonte de dados selecionada, informe o código SQL para obter os dados que irão preencher o relatório. preencher o relatório. Em nosso exemplo, digite: select * from produto Clique em Next.
  • 26. Se a consulta estiver correta, esta tela deve exibir os campos retornados por ela, para que você selecione apenas os que serão que você selecione apenas os que serão exibidos no relatório. Em nosso exemplo, selecione os campos: id, nome, valor e validade. Clique em Next.
  • 27. Nesta tela, você deve informar o(s) campo(s) pelo qual os registros serão agrupados. serão agrupados. Em nosso exemplo, não haverá agrupamento de informações, logo, não selecione nenhum. Clique em Finish.
  • 28. Após concluir, o eclipse deve alternar para a perspectiva perspectiva Report Design que permite a edição do relatório.
  • 29. No iReport é possível adicionar máscaras de formatação aos valores do tipo Date e Numérico. Para isto, selecione o campo a ser formatado, vá até as propriedades e selecione a abaText Field. Localize a opção Pattern, clique na reticências e selecione o padrão desejado ou crie o seu próprio. e selecione o padrão desejado ou crie o seu próprio. Se algum campo estiver com valor nulo, o iReport irá imprimir por padrão a string null. Para alterar isto, vá até as propriedades e selecione a abaText Field. Procure pela opção Blank when null e marque-a.
  • 30. 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. “preencher” o relatório. Para que o eclipse faça a compilação e exibição dos arquivos .jasper, clique com o botão direito no nome do projeto e acesse a opção JasperReports > Toggle JasperReports Nature. A partir daí, a compilação do arquivo JRXML no eclipse é feita juntamente com a do projeto. Se a opção Build Automatically estiver ativa, ela deve ocorrer sempre que uma modificação for salva.
  • 31. Uma vez compilado o relatório, pode-se chamar o relatório via Java, para que a aplicação exiba os relatórios desejados. A seguir conheceremos algumas classes que ajudam nesta tarefa. Atenção: É possível compilar o arquivo JRXML e gerar o arquivo .jasper via código java. Contudo, a menos que isto seja fundamental, recomenda-se compilá-lo previamente e só efetuar as requisições ao .jasper via código java, de forma a evitar constantes compilações a cada nova requisição do relatório. tarefa.
  • 32. Classe JRLoader Principais Métodos: loadObjectFromFile(java.lang.String str); loadObjectFromFile(java.lang.String str); loadObject(java.io.File file) loadObject(java.net.URL url) loadObject(java.io.InputStream is);
  • 33. Classe JasperFillManager Principal método: fillReport (estático) Retorna objeto JasperPrint Assinatura: Assinatura: JasperPrint fillReport( String sourceFileName, HashMap parameters, Connection connection);
  • 34. Parâmetros de fillReport: String sourceFileName: corresponde ao nome do relatório compilado (.jasper). HashMap parameters: lista de parâmetros do 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.
  • 35. JRExporter Classe útil quando queremos exportar o relatório para diversos formatos. Exemplos: JRExporter jrPdf = new JRPdfExporter(); jrPdf. exportReport(); //exporta para pdf jrPdf. exportReport(); //exporta para pdf JRExporter jrHtml = new JRHtmlExporter(); jrHtml. exportReport(); //exporta para html JRExporter jrXls = new JRXlsExporter(); jrXls. exportReport(); //exporta para excel JRExporter jrOdt = new JROdtExporter(); jrOdt. exportReport(); //exporta para odt
  • 36.
  • 37. Crie um pacote chamado unifimes.pdw.relatorios. Adicione os arquivos abaixo dentro de WebContent >WEB-INF > lib commons-beanutils-x.x.x.jar commons-collections-x.x.x.jar commons-digester-x.x.jar commons-javaflow-x.jar commons-javaflow-x.jar groovy-all-x.x.x.jar iText-x.x.x.jar jasperreports-x.x.x.jar poi-x.x-x.jar primefaces-x.x.jar Crie o pacote unifimes.pdw.util. Crie uma classe chamada RelatorioUtil.java
  • 38. public class RelatorioUtil { public static final int RELATORIO_PDF = 1; public static final int RELATORIO_EXCEL = 2; public static final int RELATORIO_HTML = 3; public static final int RELATORIO_PLANILHA_OPEN_OFFICE = 4; public static final intRELATORIO_EDITOR_WORD = 5; public static final intRELATORIO_EDITOR_OPEN_OFFICE = 6; public static final intRELATORIO_EDITOR_OPEN_OFFICE = 6; public StreamedContent geraRelatorio(HashMap<String, Object> parametrosRelatorio, JasperReport relatorioJasper, String nomeRelatorioSaida, int tipoRelatorio, Connection con) throws Exception { StreamedContent arquivoRetorno = null; try { FacesContext context = FacesContext.getCurrentInstance(); String caminhoRelatorio = context.getExternalContext().getRealPath("/"); String caminhoArquivoRelatorio = null; JasperPrint impressoraJasper = JasperFillManager.fillReport(relatorioJasper, parametrosRelatorio, con); JRExporter tipoArquivoExportado = null; String extensaoArquivoExportado = ""; File arquivoGerado = null;
  • 39. switch (tipoRelatorio) { case RelatorioUtil.RELATORIO_PDF : tipoArquivoExportado = new JRPdfExporter(); extensaoArquivoExportado = "pdf"; break; case RelatorioUtil.RELATORIO_HTML : tipoArquivoExportado = new JRHtmlExporter(); extensaoArquivoExportado = "html"; break; case RelatorioUtil.RELATORIO_EXCEL : tipoArquivoExportado = new JRXlsExporter(); extensaoArquivoExportado = "xls"; break; break; case RelatorioUtil.RELATORIO_PLANILHA_OPEN_OFFICE : tipoArquivoExportado = new JROdsExporter(); extensaoArquivoExportado = "ods"; break; case RelatorioUtil.RELATORIO_EDITOR_WORD : tipoArquivoExportado = new JRDocxExporter(); extensaoArquivoExportado = "docx"; break; case RelatorioUtil.RELATORIO_EDITOR_OPEN_OFFICE : tipoArquivoExportado = new JROdtExporter(); extensaoArquivoExportado = "odt"; break; default : tipoArquivoExportado = new JRPdfExporter(); extensaoArquivoExportado = "pdf"; Break; }
  • 40. caminhoArquivoRelatorio = caminhoRelatorio + File.separator + nomeRelatorioSaida + "." + extensaoArquivoExportado; arquivoGerado = new java.io.File(caminhoArquivoRelatorio); tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper); tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado); tipoArquivoExportado.exportReport(); arquivoGerado.deleteOnExit(); arquivoGerado.deleteOnExit(); InputStream conteudoRelatorio = new FileInputStream(arquivoGerado); arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio, "application/" + extensaoArquivoExportado, nomeRelatorioSaida + "." + extensaoArquivoExportado); } catch (JRException e) { throw new Exception("Não foi possível gerar o relatório.", e); } catch (FileNotFoundException e) { throw new Exception("Arquivo do relatório não encontrado.", e); } return arquivoRetorno; } }
  • 41. Altere sua classe ProdutoBean.java e adicione o código a seguir: private StreamedContent retorno; private Integer tipo; public StreamedContent getRetorno() { imprimir(); return retorno; } public void setRetorno(StreamedContent retorno) { this.retorno = retorno; } public Integer getTipo() {return tipo; } public void setTipo(Integer tipo) { this.tipo = tipo; } public void setTipo(Integer tipo) { this.tipo = tipo; } public void imprimir () { String relatorioJasper = new String(); FacesContext facesContext = FacesContext.getCurrentInstance(); try { URL urlRelatorio = getClass().getResource(relatorioJasper); JasperReport jr = (JasperReport) JRLoader.loadObject(urlRelatorio); Conexao com = new Conexao().getConexao(); this.arquivoRetorno = new RelatorioUtil().geraRelatorio(null, jr, "relatorio", tipo, con); } catch (Exception ex) { facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao visualizar certificado", "Detalhes: “+ ex.getMessage())); } }
  • 42. Altere produtos.xhtml e acrescente o código abaixo após os componentes datatable e message: Tipo: <p:selectOneRadio id="options" value="#{produto.tipo}"> <f:selectItem itemLabel="PDF" itemValue="1" /> <f:selectItem itemLabel="XLS" itemValue="2" /> <f:selectItem itemLabel="XLS" itemValue="2" /> <f:selectItem itemLabel="HTML" itemValue="3" /> <f:selectItem itemLabel="ODS" itemValue="4" /> <f:selectItem itemLabel="DOCX" itemValue="5" /> <f:selectItem itemLabel="ODT" itemValue="6" /> </p:selectOneRadio> <p:commandButton ajax="false" value="Emitir Relatório"> <p:fileDownload value="#{produto.arquivoRetorno}“/> </p:commandButton>
  • 43. Altere produtos.xhml e adicione o código abaixo para criar uma nova coluna no datatable. <p:column sortBy="#{prod.id}"> <f:facet name="header"><p:outputLabel value="Relatório"/></f:facet> value="Relatório"/></f:facet> <p:commandLink value="Gerar PDF" ajax="false"> <f:setPropertyActionListener target="#{produto.id}" value="#{prod.id}"></f:setPropertyActionListener> <p:fileDownload value="#{produto.produtoRetornado}"></p:fileDownload> </p:commandLink> </p:column>
  • 44. Altere ProdutoBean.java e adicione o código abaixo: private StreamedContent produtoRetornado; public StreamedContent getProdutoRetornado() { imprimirProduto(); return produtoRetornado; } public void setProdutoRetornado(StreamedContent produtoRetornado){ this.produtoRetornado = produtoRetornado; } private void imprimirProduto() { String relatorioJasper = new String(); relatorioJasper = "/pdw/relatorios/produto.jasper"; FacesContext facesContext = FacesContext.getCurrentInstance(); try { URL urlRelatorio = getClass().getResource(relatorioJasper); JasperReport jr = (JasperReport) JRLoader.loadObject(urlRelatorio); HashMap<String, Object> parametro = new HashMap<String, Object>(); parametro.put("idProduto", id); Connection con = new Conexao().getConexao(); produtoRetornado = new RelatorioUtil().geraRelatorio(parametro, jr, "relatorio", 1, con); } catch (Exception ex) { facesContext.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao visualizar certificado", "Detalhes: “ + ex.getMessage())); } }
  • 45. Crie um novo relatório assim como o anterior, mas desta vez, agrupe os dados pelo nome do produto. produto. Após criar o produto, crie um novo parâmetro (Botão direito em Parameters > Create Parameter) chamado idProduto
  • 46. Altere o tipo do parâmetro criado (Selecione o parâmetro e vá em propriedades) e vá em propriedades) para java.lang.Integer.
  • 47. SANTOS, Ismael H. F. Módulo III – Relatórios e Gráficos em Java. Disponível em: http://www.tecgraf.puc- rio.br/~ismael/Cursos/Cidade_FPSW/aulas/Modulo3_Graficos_Relatorios/Java_Relatorios.pdf. Acesso em: 03 de junho de 2013. TOFFOLI, Giulio. iReport – User Manual. Disponível em: http://pt.scribd.com/doc/97594609/iReport- User-Manual. Acesso em: 05 de junho de 2013. ARAÚJO, Everton Coimbra de. Desenvolvimento para WEB com Java. Florianópolis: Visual Books, 2010. ARAÚJO, Everton Coimbra de. Desenvolvimento para WEB com Java. Florianópolis: Visual Books, 2010. LUCKOW, Décio Heinzelmann; MELO, Alexandre Altair de. Programação Java para a WEB. São Paulo: Novatec Editora, 2010.