Juliana Jenny Kolb
Home > Simulados on-line > Questões de Concursos > Tecnologia da Informação (TI)
JasperReports
O JasperReports é um framwork open-source escrito em Java para geração de relatórios. Ele permite gerar dinamicamente relatórios em diversos formatos; entre eles: PDF, HTML, XLS, CSV e XML.
Funcionamento
O design do relatório (localização dos campos a serem preenchidos e seus respectivos nomes, para futuro mapeamento) é definido em um arquivo XML, que obedece a estrutura declarada no arquivo jasperreports.dtd.
Usando o XML, o designer pode definir textos estáticos, imagens, linhas e formas geométricas, como retângulos e elipses, e suas localizações dentro do relatório.
Além disso, pode-se ainda definir os campos que serão preenchidos dinamicamente a partir de uma base de dados.
O arquivo XML é compilado gerando um arquivo .jasper, onde as expressões Java existentes dentro do XML serão verificadas em tempo de compilação.
Diferentes objetos Jasperreports são usados para representar as etapas do processo de geração de relatórios:
- JasperDesign: Representa a definição do relatório. A partir de um template XML é criado um JasperDesign.
- JasperReport: Representa o JasperDesign compilado. O processo de compilação verifica o design do relatório e compila o design em um JasperReport.
- JasperPrint: Representa o relatório gerado. É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido.
Dados
Para produzir um relatório precisamos fornecer dados ao Jasper.
Esses dados podem ser consultas SQL inserida ao código XML ou ser realizada por uma classe Java, gerando um objeto ResulSet, que será passado às classes do Jasper para o preenchimento do relatório.
O JasperReports suporta vários tipos de datasources (fonte de dados) através de uma interface específica chamada JRDataSource.
Há uma implementação padrão desta interface para objetos ResultSet, chamada JRResultSetDataSource.
No linguajar “Jasper”, um datasource somado a um arquivo .jasper gera um “print”, que pode ser “exportado” para os formatos PDF, HTML, XML, CVS ou XLS.
Campos, Parâmetros, Variáveis e Expressões
Campos (Fields) são “áreas específicas” que receberão diretamente os dados das respectivas colunas referenciadas. Por exemplo, para os dados da coluna Nome do tipo VARCHAR, da tabela Cliente, serem mapeados para o relatório, um campo Nome deve ser definido no arquivo XML da seguinte forma:
< 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. São declarados, por exemplo, da seguinte forma:
< parameter name=”TituloDoRelatorio” class=”java.lang.String”/>
E passados via código Java, através da classe HashMap:
Map parametros = new HashMap( );
parametros.put( “Cliente”, “Aluno DACA” );
Outra importante utilização de parâmetros é na query do relatório. Por exemplo:
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. Elas podem referenciar tipos internos de cálculos, como contagem (count), soma (sum), média (average), menor (lowest), maior (highest), etc.
Por exemplo, o cálculo do valor total da compra:
< 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” class=”java.lang.Double” resetType=”Page” calculation=”Sum”>
<variable expression> ${ValorProduto} </variable expression>
<initialValueExpression> new Double( 0 ) </initialValueExpression>
< /variable>
Existem também variáveis internas da ferramenta, com nomes “auto-explicativos”, prontas para o uso nas expressões: 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 frequentes, por exemplo.
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>
Layout
O JasperReports divide o layout do relatório em áreas “pré-definidas”, chamadas seções.
As seções levam em considerção a estrutura visual de um relatório. São elas: backgroud, title, pageHeader, columnHeader, detail, columnFoter, pageFooter, lastPageFooter e summary.
API
Classe dori.jasper.engine.design.JasperDesign
Instâncias dessa classe representam o relatório no seu formato mais primitivo. São resultados de um processamento sobre o arquivo XML.
Classe dori.jasper.engine.JasperReport
Instâncias dessa classe representam relatórios compilados. Nesse estágio, toda a análise sintática nas expressões existentes no XML já foram realizadas. Objetos dessa classe podem ser armazenados em arquivos .jasper.
Classe dori.jasper.engine.JasperCompileManager
Responsável por criar instâncias das classes JasperReport e JasperDesign.
Classe dori.jasper.engine.JasperPrint
Consiste no JasperReport com todos os campos preenchidos. Um objeto dessa classe pode ser visualizado diretamente utilizando visualizadores internos do JasperReport, como também pode ser transformado em formatos mais populares como HTML, XML ou PDF.
Interface dori.jasper.engine.JRDataSource
Essa interface padroniza o comportamento das classes que manipulam as fontes de dados necessárias durante o preenchimento dos campos existentes no JasperReport. Dessa forma, várias fontes podem ser utilizadas, seja um banco de dados, ou mesmo um arquivo XML.
Entre as classes que implementam essa interface; podemos citar:
dori.jasper.engine.JRResultSetDataSource (acessa um banco de dados)
dori.jasper.engine.data.JRTableModelDataSource (acessa tabelas já carregadas em interfaces swing)
dori.jasper.engine.JREmptyDataSource (não acessa nenhuma fonte de dados, utilizada quando se deseja criar um JasperPrint sem acessar nenhuma fonte de dados).
Classe dori.jasper.engine.JasperFillManager
Essa classe é utilizada para gerar instâncias da classe JasperPrint. Em seu processamento, ela utiliza uma fonte de dados (JRDataSource) e uma instância da classe JasperReport.
Classe dori.jasper.engine.JasperPrintManager
Permite imprimir o relatório (o conteúdo do relatório é enviado para impressora, uma janela de requisição de impressão é aberta). Tanto é possível imprimir todo o relatório como também páginas do mesmo.
Além disso, é possível imprimir o relatório como uma imagem ( utilizando o método printPageToImage)!
Classe dori.jasper.engine.JasperExportManager
Permite gerar documentos nos formatos PDF, HTML e XML (versão 1.0). Com o tempo, novos formatos serão incorporados.
IReport
O iReport é uma ferramenta que permite definir o design do relatório dentro de um ambiente gráfico, contento “todos” os recursos que a biblioteca Jasper oferece.
É possível definir relatórios com designs modernos e complexos sem se quer escrever uma linha de código XML, que é todo gerado automaticamente.
O ambiente oferece atalhos para tarefas de compilação e visualização do relatório, permitindo a realização de testes.