Documente Academic
Documente Profesional
Documente Cultură
Desenvolvendo Relatórios
Profissionais com iReport™
para NetBeans IDE
o
çã
ra
st
on
em
D
Este livro é dedicado ao Samuel,
o
çã
ra
st
on
em
D
AGRADECIMENTOS
Primeiramente quero agradecer a minha família, pelo apoio e compreen-
são da minha ausência.
o
Daniel deOliveira, pelo apoio que uma comunidade de grande peso como o
çã
DFJUG tem sobre meu trabalho. ra
st
on
em
D
PREFÁCIO
Nem bem havia feito um ano que meu primeiro livro sobre relatórios JasperRe-
ports usando iReport havia sido iniciado e, acompanhando o site oficial da ferra-
menta, recebo uma excelente notícia: o iReport irá rodar sobre o NetBeans IDE.
Na prática, isso significa que você, como desenvolvedor, poderá criar, testar e
utilizar seus relatórios diretamente na IDE, sem a necessidade de abrir outro aplica-
tivo. De fato, isso é um grande salto para as ferramentas gratuitas, que anos atrás,
não tinham essa característica.
o
veram mudanças visuais para que o mesmo se incorporasse ao NetBeans.
çã
Espero que gostem deste livro tanto quanto gostei de reescrevê-lo.
ra
st
on
em
D
INTRODUÇÃO AO DESENVOLVIMENTO DE
RELATÓRIOS COM IREPORT
Em 2001, nasceu o JasperReports, criado por Teodor Danciu, quando teve a ta-
refa de avaliar ferramentas de relatórios para um projeto que estava trabalhando.
As soluções existentes eram muito caras para o orçamento do projeto e, em uma
situação comum no mundo do desenvolvimento, ele decidiu escrever sua própria
ferramenta de relatórios, que ao liberá-la para a comunidade, ficou imensamente
popular em pouco tempo.
o
projetada para ajudar o desenvolvedor com a tarefa de criar relatórios para aplica-
çã
ções, tanto Desktop como Web, fornecendo uma API que facilita sua geração.
Com seis anos de existência, o iReport é reescrito para trabalhar dentro do Ne-
tBeans IDE, após o seu criador ter visto uma palestra no JavaOne 2007 a respeito
de um desenvolvedor que estava criando tal ferramenta para gerar relatórios Jas-
perReports.
X | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
Este livro é a mais que uma orientação, é um guia que o ensinará a utilizar o iRe-
port para NetBeans para construir relatórios JasperReports, criando desde os mais
simples relatório até os mais sofisticados, utilizando desde uma linguagem SQL até
as mais sofisticadas linguagens orientadas a objetos como HQL do Hibernate e EJB
QL (Enterprise JavaBeans Query Language), passando por sub-relatórios, relatórios
com gráficos, crosstab, passagem de parâmetros e outros.
Também será visto a exportação para diversos formatos suportados pelo Jasper-
Reports, como PDF, MS Excel, RTF, ODF, entre outros.
o
çã
ra
st
on
em
D
Introdução | XI
É também desejável que o leitor esteja bem familiarizado tanto com o desen-
volvimento desktop Java Swing, como em aplicações Web envolvendo Servlets, JSP
e JavaServer Faces. O conhecimento de frameworks Java ORM, como o Hibernate
e TopLink, de EJB 3 e IoC, como o Spring, é importante para um melhor aproveita-
mento dos exemplos.
o
ANTES DE COMEÇAR çã
ra
Em algumas partes deste livro, você encontrará apenas o trecho do código pro-
st
... Indica que acima ou abaixo contém mais código, mas que não está sendo exi-
bido, sendo necessário recorrer ao exemplo completo, para visualizá-lo na íntegra,
que pode ser baixado gratuitamente no site do autor.
D
OS SOFTWARES REQUERIDOS
Os aplicativos criados nesse livro não exigem software proprietário. Portanto ao
longo dos capítulos você não só aprenderá a usá-los, como também onde encontrá-
los na Internet, caso precise de uma atualização.
HARDWARE REQUERIDO
Uma boa configuração de hardware se faz necessário para trabalhar com apli-
cações escritas em Java. Um computador para rodar bem o iReport para NetBeans
deve ter as seguintes configurações para uma confortável utilização, segundo o
autor:
HD: 100 MB de espaço livre (1GB caso esteja utilizando o NetBeans IDE)
o
çã
Monitor: 17 polegadas ou superior ra
CÓDIGOS DOS EXEMPLOS CRIADOS NO LIVRO
st
www.integrator.com.br.
Caso não encontre algum exemplo entre em contato pelo e-mail edson@integrator.
em
com.br.
D
Introdução | XIII
o
compreensão do que está sendo desenvolvido, incluindo os passos para executar
cada exemplo.
çã
A seguir, você tem uma sinopse de cada um dos capítulos do livro, incluindo
ra
também o apêndice:
st
O iReport para NetBeans IDE é um programa Open Source, capaz de criar visual-
em
o
CAPÍTULO 3 - ESTRUTURA DE UM RELATÓRIO E SEU
DESENVOLVIMENTO
çã
ra
Um relatório é uma maneira agradável de apresentar as informações vindas de
st
alguma base de dados com sua aparência formatada. Na maioria das vezes, relató-
on
rios são usados para agrupar as informações vindas de um conjunto de dados, rela-
cionados entre si, oriundos de diversas tabelas. Como resultado você tem apenas os
campos determinados na construção do seu relatório e exposto como tal de forma
em
o
Neste capítulo você aprenderá a criar um relatório mais complexo, utilizando
çã
mais de uma entidade (tabela) no desenvolvimento, agrupando informações e fil-
trando-as através de parâmetros.
ra
st
APLICAÇÃO DESKTOP
Assim como criar um relatório, é muito fácil chamá-lo por uma aplicação. Este
em
capítulo utilizará uma aplicação desktop simples, com interface gráfica Swing, cria-
da no NetBeans IDE, apenas com o intuito de ensiná-lo a chamar sua aplicação.
D
CAPÍTULO 7 - SUB-RELATÓRIOS
Os sub-relatórios são relatórios dentro de outros, também conhecidos como
relatórios do tipo “mestre-detalhe”.
o
sistentes em Java e também o que possui uma gama de soluções para problemas
comuns.
çã
Neste capítulo você aprenderá a desenvolver seus relatórios utilizando o Hiber-
ra
nate para acessar os dados, incluindo um exemplo com sub-relatório.
st
O uso de Java Persistence API se tornou muito intenso, e como não poderia
em
deixar de ser, o JasperReports possui suporte a esta especificação através de EJB QL.
Esta linguagem de queries possui uma semelhança à HQL do Hibernate e também a
tradicional instrução SQL.
D
Este capítulo tratará de outras formas de acesso que não utilizam um banco de
dados diretamente.
o
çã
CAPÍTULO 11 - SIMPLIFICANDO RELATÓRIOS COM
ra
GROOVY
st
aplicações Java.
o
diferentes no mesmo relatório, o que chamamos de Subdataset.
çã
ra
CAPÍTULO 13 - INTERNACIONALIZANDO RELATÓRIOS
st
to. Não seria diferente no caso dos relatórios. O JasperReports introduziu esta ca-
racterística na versão 0.6.2 e desde então seu suporte foi acrescentado ao iReport,
facilitando mais ainda seu desenvolvimento.
em
Neste capítulo será criada uma aplicação Java desktop simples, pelo NetBeans,
para ser usada com um relatório internacionalizado gerado pelo iReport.
D
CAPÍTULO 14 - CROSSTABS
Crosstabs (cross-tabulation), no JasperReports, são tabelas cruzadas, comuns no
desenvolvimento de relatórios com a utilização de planilhas eletrônicas, também
conhecidas por tabelas dinâmicas ou tabelas de referências cruzada.
Graças ao iReport, você pode contar com o uso de um assistente, tornando esta
tarefa não muito complicada.
o
do JasperReports, que não foram apresentadas até o momento, sendo passadas em
çã
formato de dicas, como adicionar um trecho da query em um relatório, minimizar o
consumo de memória, imagem de fundo no relatório e outras.
ra
st
CAPÍTULO 16 - SCRIPTLET
on
Neste capítulo será visto como escrever um simples scriptlet, qual a sua utilida-
D
Neste capítulo você vai aprender a criar seus próprios templates e utilizá-los no
iReport.
XX | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
Os formatos discutidos aqui são os mais utilizados para exportação pelo Jasper-
Reports: RTF, XLS, CSV, HTML e ODF.
o
Para Download, veja “CÓDIGOS DOS EXEMPLOS CRIADOS NO LIVRO”, além dos
arquivos referentes aos exemplos contidos no livro, há também os seguintes apên-
dices:
çã
ra
APÊNDICE B – O MYSQL
st
on
EM JAVA
D
APÊNDICE E – O TOMCAT
SUMÁRIO
Capítulo 1 - Conhecendo o iReport para NetBeans IDE ........................................... 1
Antes de utilizar o iReport para NetBeans IDE .............................................. 3
Obtendo e instalando o Java SE .................................................................... 3
A instalação no Windows .............................................................................. 4
Em Windows versão 9x ................................................................................. 5
A instalação no Linux .................................................................................... 5
Obtendo e instalando o iReport para NetBeans IDE ..................................... 7
Algumas características do iReport para NetBeans IDE................................. 8
o
Instalando o iReport .................................................................................... 9
No Windows com instalador ......................................................................... 9
çã
No Windows e Linux sem instalador ........................................................... 10
Como instalar o plug-in iReport for NetBeans............................................. 10
ra
Compilando o fonte do iReport para NetBeans .......................................... 11
st
o
A janela Palette ............................................................................................ 47
Adicionando uma conexão a um relatório vazio ......................................... 49
çã
Criando a query do relatório ....................................................................... 51
Os elementos da query registrados no JasperReports ................................ 55
ra
Desenhando o relatório............................................................................... 56
Os símbolos para exibir o formato de números .......................................... 63
st
o
Capítulo 7 - Sub-relatórios.................................................................................... 113
çã
O relatório mestre-detalhe que será desenvolvido ................................... 115
Criando e configurando o relatório principal ............................................ 116
ra
Gerando a query ........................................................................................ 117
Definindo a posição dos campos............................................................... 118
st
o
O conceito da API de persistência ............................................................. 171
Sobre Java Annotations ............................................................................. 172
çã
Criando as entidades ................................................................................. 173
O relacionamento ...................................................................................... 178
ra
Onde encontrar o TopLink......................................................................... 182
Criando a conexão EJBQL no iReport ........................................................ 182
st
o
Subdatasets ............................................................................................... 238
Utilizando Subdatasets em seu gráfico ..................................................... 241
çã
Gráficos de linhas ...................................................................................... 244
Utilizando Gráficos em um relatório com Hibernate ................................ 248
ra
Capítulo 13 - Internacionalizando relatórios ........................................................ 249
st
o
Adicionando o scriptlet ao relatório ......................................................... 297
Criando as variáveis do relatório ............................................................... 298
çã
Editando a query do relatório ................................................................... 299
Criando o design do relatório ................................................................... 299
ra
Como evitar valores repetidos em um relatório........................................ 301
Forçando o valor a aparecer ao menos uma vez em cada página ............. 301
st
o
çã
ra
st
on
em
D
1
CONHECENDO O IREPORT PARA
o
çã
NETBEANS IDE
ra
st
on
em
D
O iReport para NetBeans IDE é um programa Open Source, capaz de criar visual-
mente os mais complexos relatórios para aplicações Java no formato da biblioteca
JasperReports.
Através de uma interface gráfica intuitiva, o desenvolvedor é capaz de criar qual-
quer tipo de relatório de forma simples e rápida. Mesmo sabendo que o iReport
desenvolve um formato XML usado pelo JasperReports, o que não é difícil de ma-
nipular, há uma vantagem em usar esta ferramenta. Se o desenvolvedor é um usuá-
rio iniciante no formato XML do JasperReports, o iReport supre suas necessidades
evitando que seja necessário fazer modificações no código fonte. Caso seja expe-
riente neste formato, o iReport minimiza o tempo na criação dos mais complexos
relatórios.
o
Neste capítulo você aprenderá onde obter, os requerimentos necessários para
çã
executar, como instalar e entender sobre algumas das mais importantes caracterís-
ticas do iReport.
ra
st
O iReport para NetBeans IDE, por ser uma ferramenta Java, precisa do Sun Java
2 SDK 1.5 instalado em sua máquina, ou superior. Perceba que não é apenas a JVM
(Java Virtual Machine) que deve estar instalada. Isso porque, para compilar os arqui-
em
o
• JDK 6 Update 6 – Este é o kit de desenvolvimento Java. Este kit consiste em
çã
um compilador (javac), uma ferramenta de execução (java), uma ferramenta para
geração de documentação (javadoc), um conjunto de bibliotecas prontas para o uso
e etc.
ra
• Java Runtime Environment (JRE) 6 Update 6 – Este é o ambiente runtime do
st
aceitar os termos de uso do Java SE, clicando na opção “Accept”. Após a página
recarregar, haverá a possibilidade de baixar a versão que você precisa para a sua pla-
taforma. Observe que na página de Downloads existem diversos Java SE. Existe Java
D
SE para a plataforma Windows, Linux, Solaris SPARC, Solaris x86 e Linux AMD64.
Efetue o download do Java SE para o seu sistema operacional clicando sobre o link
do produto que utilizará para instalação.
A INSTALAÇÃO NO WINDOWS
Tendo em vista que o Windows no qual será descrito está na versão XP ou supe-
rior, inicie o assistente com um duplo clique sobre o arquivo executável, que como
tantos outros desta plataforma, basta avançar até concluir.
Para configurar qualquer variável de ambiente em um sistema Windows na ver-
são NT, você deve entrar no Painel de Controle, Sistema e na guia Avançado clique no
botão Variáveis de Ambiente.
Capítulo 1 | 5
o
encontra a máquina virtual Java.
çã
Na variável PATH, você tem que adicionar a variável JAVA_HOME, acrescida do
caminho para os binários. Após o último valor, coloque um ponto-e-vírgula (“;”) e
adicione %JAVA_HOME%\bin.
ra
Ao confirmar as caixas de diálogo, teste se o Java está funcionando na sua má-
st
java -version
em
EM WINDOWS VERSÃO 9X
Você deve editar o arquivo autoexec.bat, encontrado em C:\autoexec.bat e adi-
cionar as variáveis como o exemplo a seguir:
D
A INSTALAÇÃO NO LINUX
No momento em que este livro está sendo escrito, a versão baixada para o siste-
ma operacional Linux é a jdk-6u6-linux-i586.bin.
6 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
Entre no terminal do seu Linux, após baixar o arquivo, e mude para o usuário
Root ou administrativo do sistema e altere a permissão do arquivo para executável,
assim você poderá instalá-lo:
Execute o arquivo:
shell# ./jdk-6u6-linux-i586.bin
o
çã
JAVA_HOME=/jdk1.6.0_06
JRE_HOME=/jdk1.6.0_06/jre
export JAVA_HOME
ra
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/lib
export MANPATH=$MANPATH:$JAVA_HOME/man
st
java -version
o
OBTENDO E INSTALANDO O IREPORT PARA NETBEANS IDE
çã
Para baixar o iReport para NetBeans IDE, entre no endereço oficial http://www.
ra
jasperforge.org/ireport ou http://ireport.sourceforge.net/. Até o momento em que
este livro é escrito a versão atual do iReport para NetBeans IDE está em 3.1.2. Esta
st
onde está alocado para baixar. Clique no item iReport-nb-3.1.2 e confirme no botão
Browse Package. Copie o link existente em Location e o cole na barra de endere-
em
ços.
Se você estiver usando o sistema operacional Microsoft Windows, baixe a versão
iReport-nb-3.1.2-windows-installer.exe, ao qual inclui um instalador, ou o arquivo
D
o
• Um editor para escrever as expressões incluindo destaques (highlights) nas
sintaxes;
çã
• Suporte para Unicode e línguas não latinas como: Russo, Chinês, Japonês,
ra
Coreano entre outras;
• Integração para compilar e exportar;
st
INSTALANDO O IREPORT
Como há mais de uma forma de instalar o iReport para NetBeans, você verá to-
das aqui. A primeira forma de instalação que será mostrada é no sistema operacio-
nal Windows com o assistente. A segunda forma será sem o uso de assistente, neste
caso tanto no sistema operacional Windows como no Linux será mostrada.
A última forma será no NetBeans IDE, em forma de plug-in.
o
demais utilizados em outros programas neste sistema operacional. Dê um duplo
çã
clique no arquivo iReport-nb-3.1.2-windows-installer.exe para iniciar o processo de
instalação pelo assistente.
ra
1. Na primeira etapa você tem a tela inicial do iReport nb-3.1.2. Clique no botão
Next para prosseguir.
st
o
shell# tar –xpvzf iReport-nb-3.1.2.tar.gz
çã
Ao descompactar o iReport, entre no diretório e execute a permissão de execução:
ra
shell# cd iReport-nb-3.1.2/
shell# chmod +x ireport
st
shell# ./ireport
D
o
çã
ra
st
o
çã
ra
st
on
em
D
o
NETBEANS çã
ra
st
on
em
D
o
figurações regionais de seu sistema operacional e cria um diretório chamado de
.ireport no diretório do usuário em home no Linux, em Document and Settings de
çã
seu Windows XP ou AppData\Roaming no seu usuário em Windows Vista. Neste
diretório você encontra diversos arquivos.
ra
st
on
em
D
o
cução dos exemplos de relatórios. Apesar de ser o MySQL, os exemplos mostrados
çã
poderão ser feitos em Oracle, SQL Server, PostgreSQL e etc.
O banco de dados chamado de relatorios será usado em todos os capítulos ao lon-
ra
go do livro, sendo as tabelas que o compõe são apresentadas na Figura 2.2 a seguir.
st
on
em
D
o
STANDALONE
çã
O banco de dados a ser criado é composto por cinco entidades, sendo quatro
delas principais para o cenário proposto. Para o exemplo, você vai criar o primeiro
ra
relatório usando apenas a tabela de produtos.
Vá ao menu File do iReport para NetBeans e selecione no menu o item Report
st
Wizard.
on
em
D
o
çã
ra
st
on
em
D
d. Clique no botão Test para verificar se a conexão foi estabelecida com sucesso.
Caso apareça a mensagem “Connection test successful!”, significa que você configu-
rou tudo corretamente e que agora há uma comunicação com o banco de dados.
e. Salve as informações de conexão com o banco de dados através do botão Save
da caixa de diálogo.
Capítulo 2 | 19
o
digite a instrução SQL, a seguir, que selecionará somente a tabela de produtos e, em
seguida, clique no botão Next para prosseguir:
çã
ra
SELECT * FROM produtos
st
on
em
D
o
çã
ra
Figura 2.6 – Seleção de campos para a geração do relatório
st
5. Na quinta etapa, você vai selecionar o layout que deseja utilizar em seu rela-
tório. Mantenha na opção Columnar layout e clique no botão Next.
em
o
rização do relatório.
çã
O visualizador de relatórios para o formato JasperReports está embutido no
iReport para NetBeans, diferente do que acontecia em versões que não utilizam a
plataforma NetBeans.
ra
st
Agora com a criação de um relatório básico, você está preparado para configurar
o iReport para NetBeans em algumas de suas características.
em
Na guia General:
• Default unit – Indica a unidade utilizada para o trabalho com os relatórios.
Podem ser: mm, cm, pixels e polegadas.
• Limit the number of records – Quando selecionado, você pode definir o número
máximo de relatórios que podem ser exibidos, alterando em Max number of reports.
• Report locale – Define a localização atual da sua máquina, exibindo de forma
correta certos padrões numéricos como números, moedas e datas.
• Report timezone – Define a timezone da região, pegando automaticamente a
configuração do sistema operacional.
22 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
Em Classpath você pode adicionar bibliotecas e classes não disponíveis pelo iReport
para compilar relatórios com acesso a dados de forma específica. Essa guia será utiliza-
da mais adiante quando utilizar outras formas de conexão com o banco de dados.
o
çã
Na guia Viewers você pode selecionar cada um dos programas que deseja uti-
lizar como visualizadores quando compilar e exportar o relatório em um determi-
nado formato. Depois, para visualizar no formato desejado, dentro do programa
ra
selecionado, você seleciona no menu Preview.
st
Adicione um programa que deseja utilizar para cada tipo de arquivo, principal-
mente o PDF que será muito utilizado ao longo do livro.
on
PREVIEW
Por padrão, o iReport utiliza o seu diretório corrente do arquivo .jrxml, aberto
D
Ao avançar, você define o nome do relatório, só que desta vez deve manter a
extensão, como por exemplo: PrimeiroRelatorio.jrxml.
Na etapa de conexões siga os mesmos procedimentos feitos no passo número
2 da versão Standalone. Como extra, você pode selecionar uma conexão ativa já
existente do NetBeans IDE, com a opção NetBeans Database JDBC connection.
o
para o arquivo é /.netbeans/dev/config/Preferences/com/jaspersoft/ireport.properties.
çã
ra
ABRINDO UM RELATÓRIO NO IREPORT PARA NETBEANS
Um relatório criado em nosso idioma possui muitos acentos em rótulos, devido
st
não corrigida até o momento que este livro é escrito, há o problema com a codifica-
ção de caracteres no sistema operacional Windows, que inicializa trabalhando com
o padrão iso-8859-1.
em
Como o tipo aceito pelo iReport é UTF-8, o programa precisa criar arquivos
neste padrão. Se isso não ocorrer, quando abrir um relatório com a codificação
diferente de UTF-8, verá o erro mostrado na Figura 2.8.
D
Para corrigir este problema, basta alterar o atalho que inicializa o programa,
transmitindo o seguinte parâmetro: -J-Dfile.encoding=UTF-8.
Você pode resolver este problema simplesmente criando um arquivo .bat, no
diretório bin da instalação do iReport, da seguinte forma:
ireport.exe -J-Dfile.encoding=UTF-8
Porém, pode ser que você acredite que esta solução seja muito ruim e quer algo
mais profissional. Neste caso, basta alterar o arquivo de configurações chamado -
que é o mesmo do NetBeans (netbeans.conf), porém, com outro nome.
Altere no arquivo, que se encontra no diretório etc, no local da instalação do seu
o
iReport, na seguinte linha:
çã
default_options=”-J-Xms24m -J-Xmx64m -J-Dfile.encoding=UTF-8”
ra
Ao inicializar o iReport, ele carregará estas configurações, encontradas nesta
linha, e inicializará os arquivos com essa codificação.
st
on
default_options=”-J-Duser.language=en -J-Duser.country=US …”
3
ESTRUTURA DE UM RELATÓRIO E SEU
o
DESENVOLVIMENTO çã
ra
st
on
em
D
o
A ESTRUTURA DO RELATÓRIO
çã
Um relatório no JasperReports possui diversas seções, separadas por linhas ho-
ra
rizontais ao qual são chamadas de Bands (bandas).
O comportamento de cada Band depende da funcionalidade para a qual está pre-
st
parada. Quando o relatório se junta aos dados para rodar a impressão, estas seções
on
são impressas na tela de diferentes maneiras, com diferentes tempos. Por exemplo,
o cabeçalho da página (pageHeader) é repetido em todas as páginas, uma vez em
cada página, enquanto que os detalhes onde serão exibidos os dados (detail), é
em
o
criar tabelas usando os elementos de relatórios.
çã
• Ignore pagination - ignora a paginação ao preencher o relatório, impossibi-
litando a visualização das demais páginas caso haja mais que uma. Quando
ra
ativa, esta opção implica até mesmo na visualização correta dos dados caso
haja mais de uma coluna.
st
são é Vertical. Com a ordem Vertical, primeiro os dados são impressos um em-
baixo do outro, passando para uma nova coluna somente quando a coluna está
em
o
ASSISTENTES çã
ra
st
on
em
D
Para uma maior compreensão dos diversos elementos que compõem um relató-
rio no JasperReports, através do iReport para NetBeans, é importante a um desen-
volvedor aprender a desenhá-lo manualmente, isto é, sem o uso de assistentes.
No capítulo anterior foram apresentadas as bandas e as configurações iniciais
de um relatório em branco através de suas propriedades. Neste capítulo você irá
aprender a criar um relatório manualmente, adicionando diversos elementos, confi-
gurando-os e trabalhando com banco de dados.
o
port name na janela Report Inspector) dê um nome para o seu relatório. Os tama-
nhos predefinidos serão mantidos.
çã
ra
Dica: Caso queira visualizar o Grid para desenhar o relatório, vá ao menu
st
A JANELA PALETTE
em
O iReport para NetBeans na lateral direita a janela Palette. Esta janela contém
doze elementos que são muito usados na construção de um relatório. Estes ditos
“elementos” são objetos gráficos que podem compor um relatório, como uma linha,
D
o
com bordas ao seu redor.
çã
7. Rectangle – Usado para desenhar retângulos ao redor de outros elementos,
criando destaques como uma formatação de parágrafo de um programa de
ra
edição de textos, este elemento pode também conter retângulos com cantos
arredondados.
st
10. Image – Utilizado para exibir imagens em seu relatório. Podem ser imagens
dinâmicas (preenchidas por um banco de dados, por exemplo) ou estáticas.
11. Round Rectangle – Gera o elemento rectangle, porém, com a propriedade
Radius já pré-definida com um valor.
12. Text Field – Utilizado para criar os campos dinâmicos dos relatórios. É neste
elemento que você se conecta a um determinado campo do banco de dados
para exibir suas informações, por exemplo.
Capítulo 4 | 57
o
çã
4. Decrease Font Size – Altera o tamanho da fonte do texto encontrado no ele-
mento diminuindo sempre em dois pontos (2pt).
ra
5. Bold – Aplica negrito ao texto encontrado no elemento.
6. Italic – Aplica itálico ao texto encontrado no elemento.
st
o
çã
Figura 4.10 – Design final do relatório
ra
Para criar a aparência vista na Figura 4.10, os seguintes passos serão feitos:
1. Na janela Palette, clique na ferramenta Static Text e arraste um tamanho qual-
st
<staticText>
...
<textElement>
<font
size=”24”
isBold=”true” />
</textElement>
<text><![CDATA[Produtos Cadastrados]]></text>
</staticText>
o
çã
ra
st
lhor maneira de exibir um relatório tabular como o criado. Ajuda na rápida identifi-
cação de linhas, além do design agradável.
Na janela Report Inspector, em Styles, clique com o direito do mouse e selecio-
D
o
çã
ra
st
Para essa alteração, salve (Save As) com outro nome, por exemplo: Relatorio-
em
imagem para que ela tenha a Height (Altura) de 70 e a Width (Largura) de 85, em
Properties. Ainda na janela Properties, em Image, clique no botão com três pontos
da propriedade Image Expression.
Na caixa de diálogo Image Expression, coloque entre “aspas” o caminho para o di-
retório onde se encontram as imagens que deseja exibir. Depois, concatene (em Java
é o sinal de “+”) com o campo imagem do banco de dados, que já está com o nome
de cada produto armazenado. Por exemplo, no caso do livro, as imagens estarão em
um diretório chamado de imagens, onde você deverá ter a seguinte expressão:
“imagens/”+$F{Imagem}
5
RELATÓRIOS COM GRUPOS E PASSAGEM
o
DE PARÂMETROS çã
ra
st
on
em
D
“Tudo que uma pessoa pode imaginar, outras podem tornar real.”
Júlio Verne
Capítulo 5 | 81
o
5.1 ilustra o resultado final do relatório.
çã
ra
st
on
em
D
GERANDO O RELATÓRIO
Para começar, pegue o relatório zebrado feito no capítulo anterior. Salve como
RelatorioAgrupado. Na janela Report Inspector, clique no primeiro item da árvore
de componentes e digite em Report name, na Properties, Relatorio_Agrupado.
Apague os itens existentes e mantenha apenas os elementos das bands pageHe-
ader, columnHeader e pageFooter. Em detail mantenha apenas o Frame.
Em pageHeader altere o rótulo para Pedidos Efetuados. Quanto aos quatro rótu-
los encontrados na band columnHeader altere como mostra a Tabela 5.1 a seguir.
84 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
o
çã
ra
st
Para completar a query, você deverá adicionar uma ordenação pelo código do
pedido (PedidoID). Clique com o direito no campo PedidoID, no desenho da query
em
o
Existe um campo chamado Default Value Expression. É a opção padrão para
çã
o valor do prompt, caso não se lembre de nenhum código de pedido. Neste caso,
você vai adicionar o número do pedido 10248 como padrão. Por se tratar de um int,
ra
converta para java.lang.Integer, digitando neste campo o detalhe a seguir:
st
Caso queira completar com uma descrição para o parâmetro criado, basta adi-
em
o
APLICAÇÃO DESKTOP çã
ra
st
on
em
D
Assim como criar um relatório, é muito fácil chamá-lo por uma aplicação. Este
capítulo utilizará uma aplicação desktop simples, com interface gráfica Swing, cria-
da no NetBeans IDE, apenas com o intuito de ensiná-lo a chamar sua aplicação.
o
çã
ra
st
on
em
D
o
çã
ra
st
on
em
D
o
O RELATÓRIO MESTRE-DETALHE QUE SERÁ DESENVOLVIDO
çã
O relatório com sub-relatório, a ser desenvolvido, possui como semelhança do
Capítulo 5 sua estrutura, uma vez que fará uso das mesmas tabelas, mas em uma
ra
situação completamente diferente. Antes, você criou o relatório com agrupamento;
desta vez, será criado com um sub-relatório. A Figura 7.1 ilustra o resultado do
st
o
çã
ra
Figura 7.4 – A estrutura do relatório
st
A Figura 7.4 exibe como deverá ficar o formato do relatório principal. Estes ele-
on
Ajuste seu relatório de modo a ficar com alinhamento dos valores exibidos. Como
o relatório não sofreu mudanças ainda na query, você pode executá-lo para visualizar
sua aparência. A Figura 7.8 lhe dará uma visão melhor do que pode ser feito.
o
çã
ra
st
on
...
WHERE
PedidoID = $P{PAR_PEDIDOID}
Capítulo 7 | 131
o
Figura 7.14 – Resultado final com a adição do retorno da variável para o relatório mestre
çã
CHAMANDO O RELATÓRIO POR UMA APLICAÇÃO WEB
ra
No Capítulo 6, foi ensinado como configurar as bibliotecas do JasperReports na IDE
st
NetBeans através de uma aplicação Swing. Agora você vai criar um projeto, para a Web,
chamando o relatório desenvolvido para ser exibido em formato PDF.
on
RelatoriosNaWeb/
|_ WEB-INF/
||_ lib/
|||_Arquivos JAR (JasperReports e MySQL)
||_ classes/
|||_ br/
|||_ com/
|||_ integrator/
|||_ Relatorio.class
||_ relatorios/
|||_ RelatorioMestreDetalhe.jasper
|||_ SubRelatorio.jasper
||_ web.xml
|_ index.jsp
As bibliotecas encontradas no diretório lib foram omitidas, uma vez que você
já as conhece.
Capítulo 7 | 137
o
çã
ra
st
Iremos marcar os números dos pedidos, mas se desejar pode marcar os nomes,
embora a saída se torne repetitiva.
Clique com o direito do mouse sobre o Text Field que representa o nome do
cliente. Selecione no menu de contexto o item Hyperlink.
No campo Anchor Name Expression, utilize o Expression Editor e digite o cam-
po $F{PedidoID}.toString(). Por se tratar de um campo numérico, você deverá con-
vertê-lo para string, uma vez que esta opção só aceita este tipo. Clique no botão
Apply para confirmar.
Capítulo 7 | 139
o
çã
ra
Figura 7.18 – Destaque da utilização dos marcadores no Adobe Acrobate®
st
on
em
D
8
RELATÓRIOS COM HIBERNATE
o
çã
ra
st
on
em
D
O HIBERNATE
Hibernate é um projeto audacioso que procura ter uma completa solução para
o
o problema de gerenciamento de dados persistentes em Java. O Hibernate é um
framework que se relaciona com o banco de dados, onde esse relacionamento é co-
çã
nhecido como mapeamento objeto/relacional para Java, deixando o desenvolvedor
livre para se concentrar em problemas da lógica do negócio. Sua simplicidade em
ra
configuração, dá ao desenvolvedor algumas regras para que sejam seguidas como
padrões de desenvolvimento ao escrever sua lógica de negócios e suas classes per-
st
cando com o banco de dados como se fosse diretamente feito por sua aplicação.
Uma mudança de banco de dados, nesse caso, não se torna traumática, alterando
apenas um ou outro detalhe nas configurações do Hibernate.
em
Atenção: Este capítulo, nem mesmo o livro, tem a intenção de ensinar o uso do
D
Hibernate. Além de ser um assunto complexo, exigindo até mesmo um livro so-
mente sobre ele, o foco do livro se baseia na criação de relatórios usando o iRe-
port para NetBeans.
144 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
o
çã
2. Na caixa de diálogo New Database Connection altere para MySQL (Connec-
tor /J driver) em Name. Preencha os demais itens conforme as configurações
feitas no seu banco de dados relatorios. Veja na Figura 8.1 como deverá ficar
ra
preenchida a caixa de diálogo. Confirme no botão OK;
st
on
em
D
Figura 8.1 – Configurações da conexão JDBC para o banco de dados relatorios no MySQL
Capítulo 8 | 145
3. Retornando a caixa de diálogo New Web Application, você terá as opções Da-
tabase Connection e Database Dialect configuradas com o dialeto do MySQL.
Confirme no botão Finish.
o
çã
ra
st
on
Figura 8.2 – Configuração completa da conexão e dialeto usado pelo projeto com o Hibernate
em
CRIANDO AS ENTIDADES
Para o exemplo proposto, você terá um pacote em sua aplicação chamado de
br.com.integrator.model, que possuirá as entidades Categoria e Produto.
Fora dos pacotes, você possui os arquivos XML que mapeiam as entidades junto
ao arquivo que configura o Hibernate.
156 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
DESENVOLVENDO O RELATÓRIO
O relatório final utilizando o Hibernate será similar ao mostrado na Figura 8.5.
No caso, será feito sem o uso de assistentes.
o
çã
ra
Figura 8.5 – Resultado final do primeiro relatório com Hibernate
st
Vá até a janela Report Inspector e clique com o direito do mouse sobre o primeiro
item, selecionando no menu de contexto a opção Edit Query. Na caixa de diálogo Re-
em
port query, selecione em Query language o item Hibernate Query Language (HQL).
Digite a query para selecionar todos os campos da entidade Produto:
D
from Produto
Caso você não tenha experiência com o Hibernate, saiba que ele usa uma linguagem
própria para selecionar dados, similar às cláusulas SQL, só que simplificado. Quando é
adicionada a query from Produto, é o mesmo que dizer ao Hibernate em SQL:
Duas taglibs são adicionadas nesta página, uma vez que se utiliza a JSTL. A URI
do primeiro cabeçalho chama as tags CORE e o segundo cabeçalho são as tags de
formatação.
A tag <c:forEach /> varre o List enviado pelo Servlet através de requestScope,
transmitido pelo Servlet criado, ao qual repassa à página JSP.
o
categoria que deseja visualizar.
çã
Por fim, crie na página índex.jsp, um link que chamará o Servlet ServletCatego-
ria, contendo por entre as tags <body/>:
ra
<a href=”ServletCategoria”>Visualizar Categorias para Relatório</a>
st
Figura 8.11 – Página que chamará o Servlet que fará a geração do relatório
9
RELATÓRIOS USANDO EJB QL
o
çã
ra
st
on
em
D
O uso de Java Persistence API se tornou muito intenso, e como não poderia
deixar de ser, o JasperReports possui suporte a esta especificação através de EJB QL.
Esta linguagem de queries possui uma semelhança à HQL do Hibernate e também a
tradicional instrução SQL.
Com a especificação do EJB3, na introdução da JPA, Java Persistence API, ficou
muito popular o uso de JPQL, Java Persistence Query Language, que é uma é uma
extensão da EJB QL (Enterprise JavaBeans Query Language).
Neste capítulo você vai aprender a configurar um arquivo de persistência e criar
um relatório com sub-relatório utilizando a EJB QL.
o
O CONCEITO DA API DE PERSISTÊNCIA
çã
Até a versão J2EE 1.4, a plataforma Java não possuía uma forma simples de ma-
pear objetos em um banco de dados. Uma forma mais complexa podia ser utilizada,
ra
exigindo um container EJB, utilizando EJB QL (que foi introduzida como parte da es-
pecificação EJB2.0). Com a introdução de JPA (Java Persistence API), definida na JSR-
st
A JPA é baseada no conceito POJO (Plain Old Java Object), algo como “Bom e
Velho Objeto Java”, que incorpora idéias de renomados frameworks de persistência
para padronizar o mapeamento O/R em Java.
Na JPA, os objetos persistentes são denominados entidades (Entities). Uma entidade
é um objeto simples (POJO), que representa um conjunto de dados persistido no banco.
Como entidades são definidas por classes Java comuns, sem relação com frameworks
ou bibliotecas, elas podem ser abstratas ou herdar de outras classes, sem restrições.
A chave primária, indicada como um conceito importante nas entidades, possui
uma identificação e estado, sendo seu ciclo de vida independente do tempo de
duração da aplicação.
Capítulo 9 | 175
Retornando a caixa de diálogo New Entity Classes from Database, altere os no-
mes de Class Name para o singular, mantendo o padrão de nomes de entidades.
Em Package digite o nome do pacote em que estas entidades serão colocadas. No
livro foi usado br.com.integrator.entities. Veja a Figura 9.4 para melhor compreensão.
o
çã
ra
st
on
A entidade Categoria
A entidade Categoria, criada pelo NetBeans, já possui todas as anotações neces-
sárias para o reconhecimento no iReport. Para sua melhor compreensão, temos a
Listagem 9.1 mostrando como ela pode estar:
Capítulo 9 | 183
o
çã
ra
st
on
DESENVOLVENDO O RELATÓRIO
O relatório que será criado é com sub-relatório. Infelizmente o iReport para
NetBeans não suporta o uso de assistente para criar o sub-relatório. Portanto você
deverá criar os dois relatórios manualmente e depois chamar o sub-relatório, atra-
vés da ferramenta subreport.
Capítulo 9 | 185
Nota: O livro não se aprofundará neste assunto, uma vez que está focado no de-
senvolvimento de relatórios JasperReports com o uso do iReport para NetBeans.
De todos os objetos que surgirão, selecione class e produtos (na parte inferior,
em Field name) e tecle <DELETE>. Confirme logo após.
o
çã
ra
st
on
em
Apenas para que você possa examinar, seu relatório mestre, quando executado,
poderá ser semelhante ao mostrado na Figura 9.8 mostrada a seguir.
Capítulo 9 | 187
o
A Figura 9.9 a seguir mostra o resultado final da query escrita no Report query.
çã
ra
st
on
em
D
select c.nome,
p.pedidoID,
p.dataPedido
from Pedido p join p.cliente c
Retorna três campos/colunas, que são nomeados pelo iReport para NetBeans como
COLUMN_x, onde x é o número da coluna/objeto na ordem existente na instrução.
o
çã
ra
st
on
em
D
o
çã
FONTES DE DADOS
ra
st
on
em
D
o
desenvolvimento interoperativo de sistemas. Com a popularidade dos Web Servi-
ces em 2004, a linguagem XML fincou sua bandeira na transmissão de dados. Isso
çã
significa que diversos sistemas e gerenciadores de banco de dados exportam neste
formato. Por ser uma linguagem extensível, seu formato tem como característica
ra
principal sua semelhança em tags e atributos como o HTML (HyperText Markup
Language). Mas a semelhança para por ai, pois o XML não contém tags pré-defini-
st
das, possibilitando que cada fornecedor crie suas próprias tags. Mas graças a sua
on
semântica de não poder conter tags desordenadas, sua leitura é de fácil acesso.
O iReport suporta o uso de XML como datasource desde a versão 0.4.0, graças
ao suporte do JasperReports.
em
Para a criação de um relatório usando XML, você tem o seguinte formato encon-
trado em um arquivo chamado produtos.xml, como mostrado na Listagem 10.1.
/produtos/produto
o
çã
ra
st
on
em
O que é XPath?
D
O XPath (XML Path Language) é uma linguagem de consulta usada para pesquisar
e recuperar informações contidas nos nós de um documento XML. As consultas
do XPath são formadas como expressões e são usadas para se referir às várias
partes de um documento XML. Esta linguagem exibe um documento XML como
uma árvore com tipos de nós diferentes. Suas expressões identificam esses nós
no documento XML com base no seu tipo, nome e valores, bem como a relação
de um nó com outros nós do documento.
Para definir os campos, clique com o direito do mouse sobre cada elemento e
selecione, no menu de contexto, o item Add node as field (Figura 10.3).
206 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
o
çã
Figura 10.5 – Definindo as características do arquivo CSV
ra
st
No Report query, você possui a guia CSV Datasource. Basta clicar no botão Get
fields from datasource. Os campos aparecem na parte inferior. Como ocorre com o
arquivo XML, você pode definir a mudança de um tipo pois o iReport registra todos
em
como java.lang.String.
D
o
çã
GROOVY
ra
st
on
em
D
o
Neste capítulo você vai construir um relatório utilizando Groovy, trabalhando
com expressões e aprenderá como rodar o relatório criado em suas aplicações tam-
bém usando Groovy.
çã
ra
CRIANDO UM RELATÓRIO USANDO GROOVY
st
tório.
O iReport para NetBeans possui em seu diretório de instalação, em modules/
ext, o arquivo groovy-all-1.5.5.jar.
D
<jasperReport
language=”groovy”
...
o
SEUS RELATÓRIOS çã
ra
st
on
em
D
Como todo bom relatório, não poderia faltar os gráficos. Simples e eficazes, os
gráficos exibem uma situação visualmente impactante, possibilitando um entendi-
mento muito maior, mais rico, do que apenas números e textos.
O JasperReports possui suporte a geração de gráficos, facilitando o desenvolvi-
mento do relatório, através da biblioteca JFreeChart.
Neste capítulo será apresentado como criar gráficos em um relatório JasperRe-
ports usando o iReport para NetBeans, além de aprender a trabalhar com consultas
diferentes no mesmo relatório, o que chamamos de Subdataset.
o
O primeiro exemplo na geração de relatórios com gráficos um gráfico no forma-
çã
to de pizza 3D (Pie 3D). A Figura 12.1 a seguir ilustra o resultado final.
ra
st
on
em
D
Como o gráfico é de barras, você terá como categorias os nomes dos clientes
e os valores o total encontrado das compras efetuadas por cada um no respectivo
período. Observe que Series expression é o mesmo que Value axis label expression.
Confirme tudo e dê um Preview.
o
çã
ra
st
on
GRÁFICOS DE LINHAS
Por último, o relatório que será criado utilizará um gráfico de linhas para repre-
sentar a demanda de vendas 4 de um determinado produto. A Figura 12.7 demons-
tra o resultado do relatório final.
o
çã
ra
st
on
em
D
4
Baseado no livro Excel Avançado 2003/2007 Forecast – Análise de Previsão de Demanda (veja bibliografia)
13
INTERNACIONALIZANDO RELATÓRIOS
o
çã
ra
st
on
em
D
o
Em seu projeto, crie um pacote, se não o tiver feito ao criar a classe Main, cli-
çã
cando com o direito do mouse sobre Source Packages e selecionando no menu de
contexto o item New>Java Package. Se preferir seguir o exemplo do livro, digite
ra
br.com.integrator no campo Package Name, da caixa de diálogo New Java Package.
A internacionalização da aplicação exigirá a geração de um arquivo .properties.
st
Crie um novo arquivo, clicando com o direito do mouse sobre o pacote br.com.in-
on
o
çã
ra
st
on
em
D
o
çã
CRIANDO SEU PRIMEIRO RELATÓRIO CROSSTAB
O design não necessitará da maioria das bands, uma vez que apenas a band
ra
Summary será usada neste primeiro exemplo.
st
Criando a query
em
Em seu relatório, crie uma query contendo apenas o nome do cliente (clientes.
nome), o código do pedido (pedidos.PedidoID) e a data do pedido (pedidos.data-
Pedido).
D
SELECT
clientes.nome,
pedidos.dataPedido,
pedidos.PedidoID
FROM
clientes INNER JOIN pedidos
ON clientes.ClienteID = pedidos.ClienteID
262 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
Como a tabela criada tem uma área exclusiva, também não poderia deixar de
possuir características próprias para sua manipulação.
1. Na janela Report Inspector é possível visualizar os parâmetros, grupos, mea-
sures e demais itens que compõem a crosstab gerada.
2. No Designer da crosstab, podemos alterar a largura, altura, formatação de
cada componente selecionando-o e modificando-o através da janela Properties.
3. Na janela Properties há um pequeno conjunto de propriedades próprias para
o elemento crosstab.
Se você executar o relatório, em Preview, observará melhor sua disposição,
como mostrada na Figura 14.4.
o
Na parte superior haverá os anos em que cada cliente efetuou sua compra e na la-
çã
teral seus respectivos nomes. Os dados agrupados, contam o número de pedidos efe-
tuados em cada ano. Ao final, você possui o total de pedidos efetuados por cliente.
ra
st
on
em
D
Figura 14.4 – Relatório Crosstab (agrupado por clientes e pedidos por ano)
Capítulo 14 | 267
o
çã
Figura 14.9 – Resultado final do exemplo desenvolvido
ra
st
o
çã
ra
st
on
em
D
Crie um novo relatório e mantenha apenas as bands: Title, Page Header, Detail
e Page Footer.
Os elementos que serão adicionados são: Static Texts e Text Fields. Apenas os
detalhes necessários para criar o assunto deste tópico serão apresentados.
Aos demais, a Figura 14.12 mostra o resultado final do design do seu relatório.
15
OUTRAS CARACTERÍSTICAS DA GERAÇÃO
o
DE RELATÓRIOSçã
ra
st
on
em
D
o
Para configurar o Report Virtualizer, vá ao menu Tools e clique em Options. Na
çã
guia Virtualizer, você possui o grupo Report Virtualizer. Em Use this virtualizer
você possui três opções que estão destinadas a configuração de três tipos de virtua-
ra
lizadores fornecidos pelo JasperReports (iReport): JRFileVirtualizer (File Virtualizer),
JRSwapFileVirtualizer (Single Swap/File Virtualizer) e JRGzipVirtualizer.JRFileVirtu-
st
o
çã
ra
st
on
em
D
A CLASSE JRABSTRACTSCRIPTLET
Para implementar um scriptlet em seus relatórios, primeiro você deve criar uma
classe estendendo a classe JRAbstractScriptlet, de net.sf.jasperreports.engine. Esta
o
classe expõe todos os métodos abstratos que manipulam os eventos que ocorrem
çã
durante a geração de um relatório e fornece estrutura de dados para acessar todas
as variáveis, campos e parâmetros presentes no relatório.
ra
O JasperReports fornece uma implementação bem simples através da classe JR-
DefaultScriptlet (veja a Listagem 16.1), estendendo a classe abstrata JRAbstractS-
st
criptlet.
on
package net.sf.jasperreports.engine;
/**
* @author Teodor Danciu (teodord@users.sourceforge.net)
* @version $Id: JRDefaultScriptlet.java,v 1.3 2004/06/01 20:28:22 teodord Exp $
D
*/
public class JRDefaultScriptlet extends JRAbstractScriptlet
{
public JRDefaultScriptlet() { }
public void beforeReportInit() throws JRScriptletException
{
}
public void afterReportInit() throws JRScriptletException
{
}
public void beforePageInit() throws JRScriptletException
{
}
public void afterPageInit() throws JRScriptletException
{
}
public void beforeColumnInit() throws JRScriptletException
{
296 | Desenvolvendo Relatórios Profissionais com iReport™ para NetBeans IDE
DESENVOLVENDO O RELATÓRIO
Conforme o já visto no Capítulo 10, podemos trabalhar diretamente com arqui-
vos CSV, simplesmente informando o arquivo e sua estrutura para a leitura.
O relatório proposto possui o design tabular, conforme a Figura 16.2 ilustra
após executado.
o
çã
ra
st
Portanto, dentro do seu projeto no NetBeans IDE, no mesmo pacote criado, gere
em
o
çã
ra
st
on
<textField ...>
<reportElement isPrintRepeatedValues=”false” ...>
...
</reportElement>
</textField>
o
TEMPLATES çã
ra
st
on
em
D
o
Na criação do relatório base, que servirá como template, você deve estar atento
ao detalhe do nome do arquivo/relatório. Este nome deve terminar com C de Colu-
çã
mnar ou com T de Tabular. É assim que o iReport diferenciará o template colunar ou
tabular na opção de layout do seu assistente de criação de relatório.
ra
No exemplo, o Template mostrado na Figura 17.1 utiliza um formato colunar,
o que o fez ser chamado de TemplateExemploC.jrxml, onde você pode observar o
st
o
çã
ra
st
o
çã
ra
st
on
em
D