• Nenhum resultado encontrado

Prof. Fernando Freitas Esp. em Gestão e Docência Universitária/UNIFIMES

N/A
N/A
Protected

Academic year: 2021

Share "Prof. Fernando Freitas Esp. em Gestão e Docência Universitária/UNIFIMES"

Copied!
48
0
0

Texto

(1)

Prof. Fernando Freitas

Esp. em Gestão e Docência Universitária/UNIFIMES [email protected]

(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

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

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

(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.

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,

HTML e PDF.

 JFreeChart: Geração de gráficos

 Apache POI: permite criar e manipular vários formatos do

(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

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

(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

<variable name=“SomaValorTotalCompra”

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=“SomaValorTotalCompra”

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,

(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}

 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,

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

(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 Headerexibe as informações sobre o grupo (ex: nome do grupo), antes que as informações agrupadas sejam exibidas. Ex:

Mamíferos

Cavalo, Vaca, Elefante.

Insetos

Formiga, Mosca, Abelha.

 A banda Group Footerexibe 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.

(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 segunda opção.

(17)

Clique no menu

Help

>

Eclipse Marketplace

(18)

Pesquise por

jaspersoft

studio

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

relatorios

Acesse o menu File > New >

Jasper Report

 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

(20)

 Indique o local onde o

relatório deverá ser salvo.

Em nosso exemplo, vamos

deixar dentro do pacote

relatorios.

(21)

Neste ponto, você deve selecionar uma fonte de dados.

O iReport provê suporte a

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

conexão JDBC, então

selecione a opção

Database JDBC

Connection

.

(23)

 Nesta tela, informe os dados da conexão

 Qual o driver?

 Qual a url do banco de dados?

 Qual o usuário?

 Qual a senha?

Após informar os dados

acima, alterne para a aba

(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:

http://dev.mysql.com/download s/connector/j/

Clique no botão Test. Se os

dados foram informados corretamente, você deverá obter uma mensagem de

sucesso. Caso contrário, revise os dados informados.

(25)

Com a fonte de dados

selecionada, informe o

código SQL para obter

os dados que irão

preencher o relatório.

Em nosso exemplo,

digite:

select * from

autor

(26)

Se a consulta estiver

correta, esta tela deve

exibir os campos

retornados por ela, para

que você selecione

apenas os que serão

exibidos no relatório.

Em nosso exemplo,

selecione os campos:

id

,

nome

,

valor

e

validade.

(27)

Nesta tela, você deve

informar o(s) campo(s)

pelo qual os registros

serão agrupados.

Em nosso exemplo, não

haverá agrupamento de

informações, logo, não

selecione nenhum.

(28)

Após concluir, o

eclipse deve

alternar para a

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 aba Text Field. Localize a opção Pattern, clique na reticências 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 aba Text Field. Procure pela

(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.

 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)

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.

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

(32)

Classe

JRLoader

Principais Métodos:

 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:

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

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

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)

Adicione os arquivos abaixo dentro de WebContent > WEB-INF >

lib. Eles serão necessários na geração e exportação dos relatórios.

 commons-beanutils-x.x.x.jar  commons-collections-x.x.x.jar  commons-digester-x.x.jar  commons-javaflow-x.jar  commons-logging-x.jar  groovy-all-x.x.x.jar  iText-x.x.x.jar  jasperreports-x.x.x.jar  poi-x.x-x.jar

Se não houver, crie o pacote util.

(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 int RELATORIO_EDITOR_WORD = 5;

public static final int RELATORIO_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;

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();

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 AutorBean.java e adicione o código a seguir. Faça os import necessários:

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 imprimir() {

String relatorioJasper = new String();

relatorioJasper = "/relatorios/autores.jasper";

FacesContext facesContext = FacesContext.getCurrentInstance();

try {

URL urlRelatorio = getClass().getResource(relatorioJasper);

JasperReport jr = (JasperReport) JRLoader.loadObject(urlRelatorio); Connection con = ConnectionFactory.getConnection();

this.retorno = 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 sua página de listagem de autores (listar.xhtml) e acrescente o código abaixo imediatamente antes da tag </h:form>:

<p:outputLabel value="Tipo:"/>

<p:selectOneRadio id="options" value="#{autorBean.tipo}">

<f:selectItem itemLabel="PDF" itemValue="1" />

<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="#{autorBean.retorno}"/>

(43)
(44)

 Altere a página de listar autores (listar.xhml) e adicione o código abaixo para criar uma nova coluna no datatable. <p:column width="20%" headerText="Relatório">

<p:commandLink value="Gerar PDF" ajax="false"> <f:setPropertyActionListener

target="#{autorBean.autorSelecionado}" value="#{autor}"/> <p:fileDownload value="#{autorBean.autorRetornado}“/>

</p:commandLink> </p:column>

(45)

 Altere AutorBean.java e adicione o código abaixo:

private StreamedContent autorRetornado;

public StreamedContent getAutorRetornado() { imprimirProduto();

return autorRetornado; }

public void setAutorRetornado(StreamedContent autorRetornado) {

this.autorRetornado = autorRetornado;

}

private void imprimirProduto() {

String relatorioJasper = new String();

relatorioJasper = "/relatorios/autor.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("id", autorSelecionado.getId());

Connection con = ConnectionFactory.getConnection();

autorRetornado = 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()));

} }

(46)

Crie um novo relatório

assim como o anterior.

Após criar o produto,

crie um novo

parâmetro (Botão

direito em Parameters >

Create Parameter)

(47)

Altere o tipo do

parâmetro criado

(Selecione o parâmetro

e vá em propriedades)

para

java.lang.Integer.

Edite o XML e

acrescente no final da

sua consulta sql a

condição:

where id =

$P{id}

(48)

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.

LUCKOW, Décio Heinzelmann; MELO, Alexandre Altair de. Programação Java para a WEB. São Paulo: Novatec Editora, 2010.

Referências

Documentos relacionados

Goulart, com parecer exarado pelo Prof. Luiz Fernando da Silva. Danilo Rothberg, 2) Relatório Anual de Atividades da Prof. Arlindo Rebechi

cc Carta de Condução Número do BI..

Para fazer download de fontes para a impressora com o Utilitário de impressora Apple, o trabalho deve ser desativado no painel dianteiro da impressora. Se você ainda não tiver

Eu tenho rugas, porque tive filhos e fiquei preocu- pada com eles desde a concepção, mas também porque sorri, para to- das as suas novas descober- tas e porque passei muitas noites

Mesmo se a indicação de falta de abrilhantador e/ou de sal acender, o programa de lavagem decorre correctamente, em caso de utilização de detergentes combinados na utilização

Objetivos: Avaliar a eficácia da reabilitação pulmonar uma vez por semana associada a exercícios domiciliares em pacientes com doença pulmonar obstrutiva por meio das comparações

Este trabalho teve como objetivo discutir, analisar e apresentar dados relacionados ao saneamento básico de uma região de zona rural do município de Passira, em

[r]