Geração de Relatório com JasperReports e ireport 1. Introdução - PDF
Geração de Relatório com JasperReports e ireport 1. Introdução
Download "Geração de Relatório com JasperReports e ireport 1. Introdução"
Raquel Freire Nobre
1 Geração de Relatório com JasperReports e ireport 1. Introdução Dentre as tarefas de um sistema, a mais comum é a geração de relatório. Presente na maioria dos sistemas, mas muitas vezes não suficientemente reconhecida, esta tarefa constitui um importante módulo do sistema. Basicamente, o processo de geração de relatório resume-se na definição do design e mapeamento de dados para campos dentro de um layout definido. Nesse contexto, surgiram ferramentas comerciais com intuito de auxiliar neste processo. No passado, essa área foi completamente dominada por produtos comerciais, como o Crystal Reports, que com o passar do tempo tornaram-se cada vez mais robustos no que diz respeito a novas funcionalidades, como o suporte a diferentes tipos de fontes de dados. Porém, o que se vê hoje é o surgimento de ferramentas opensource com o mesmo objetivo, e tão ou mais robustas que as comerciais, com a grande conveniência de serem gratuitas. É o caso das ferramentas foco deste documento: JasperReports e ireport. 2. JasperReports JasperReports é um poderoso framework open-source para geração de relatórios. Escrito em Java, essa biblioteca apresenta grande habilidade na organização e apresentação de conteúdo, permitindo a geração dinâmica de relatórios em diversos formatos, como PDF, HTML, XLS, CSV e XML, podendo ainda ser utilizada em qualquer aplicação Java, incluindo aplicações desktop, Web e distribuídas Funcionamento Antes de iniciar a utilizar a biblioteca JasperReports, é necessário a compreensão de seu funcionamento (Veja a fig. 1). O design do relatório, incluindo a localização dos campos a serem preenchidos e seus respectivos nomes, para futuro mapeamento, são definidos em um arquivo XML através de tags XML que obedecem a uma estrutura, vocabulário e restrições declarados em um arquivo DTD (jasperreports.dtd). Usando XML, o designer pode definir textos estáticos, imagens, linhas, formas geométricas, como retângulos e elipses, e suas localizações dentro do relatório. Pode-se, ainda, e principalmente, definir os campos que serão preenchidos dinamicamente a partir de uma base de dados. O arquivo XML precisa ser compilado, gerando um arquivo.jasper, isto é, contendo a versão compilada do código XML. Isto implica na compilação de todas as expressões Java definidas no arquivo XML, sendo realizadas várias verificações em tempo de compilação. Diferentes objetos JasperReports são usados para representar as etapas do processo de geração de relatório: JasperDesign: Representa a definição do relatório. A partir do 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 objeto JasperReport. JasperPrint: Representa o relatório gerado. É criado um JasperPrint a partir de um JasperReport, contendo o relatório preenchido. Linguagem de Programação Página 1
2 2.2. Dados Para produzir um relatório precisamos fornecer dados ao Jasper. Estes dados podem ser recuperados de diferentes lugares, como de uma base de dados em um SGBD ou em um arquivo XML. Para recuperarmos informações de um banco de dados relacional, precisamos realizar uma consulta (query) em linguagem SQL. Essa query pode ser 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, ou seja, é possível realizar consultas, gerando objetos ResultSet e passando ao JasperReports para o preenchimento do relatório. Quando a fonte de dados é um ResultSet, este objeto deve conter todas as colunas a serem mapeadas para seus campos correspondentes no relatório. A figura 1 ilustra o funcionamento do JasperReports: Figura 1 - Etapas para a geração de relatório com JasperReports. 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. O relatório deve conter um campo com o mesmo nome da coluna a qual faz referência. Por exemplo, para os dados da coluna Nome do tipo VARCHAR, da tabela Aluno, 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: HashMap parametros = new HashMap( ); parametros.put( Nome, Carlos Paixão ); Outra importante utilização de parâmetros é na query do relatório. Por exemplo: SELECT * FROM aluno WHERE nome=$p{nome} O relatório será gerado apenas para o aluno passado por parâmetro. Linguagem de Programação Página 2
3 Variáveis são utilizadas para simplificar o projeto do relatório. Através de uma variável podemos definir somente uma vez uma expressão, que seja usada freqüentemente durante o design do relatório, chamando-a quando precisarmos daquela funcionalidade. 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> <variable expression> ${ValorProduto} </variable expression> Em uma expressão, uma variável pode referenciar outras variáveis do relatório, mas somente se aquelas variáveis foram definidas previamente no projeto do relatório. Assim, a ordem em que as variáveis são declaradas no relatório é importante. Para as variáveis que executam o cálculo nós podemos especificar o nível em que devem ser reinicializadas. O nível Report (de relatório) significa que a variável será inicializada somente uma vez, no começo do relatório, e que executa o cálculo especificado até que o fim do relatório seja alcançado. Mas nós podemos escolher executar o cálculo em nível de página, coluna ou de grupo. O exemplo abaixo demonstra o mesmo cálculo anterior em nível de página. Nossa variável será inicializada com zero no começo de cada nova página: <variable name= ValorTotalCompraSum class= java.lang.double resettype= Page calculation= Sum > <variable expression> ${ValorProduto} </variable expression> </variable> <initialvalueexpression> new Double( 0 ) </initialvalueexpression> 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, GroupName_COUNT. Expressões (Expressions) são utilizadas para especificar o conteúdo de campos de texto, na realização de cálculos freqüentes, por exemplo. Todas elas são expressões Java que podem conter em sua sintaxe: campos, parâmetros e variáveis de relatório. Por exemplo: <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> 2.4. Layout Para a melhor organização e definição do design do relatório, o JasperReports divide o layout em áreas pré-definidas, chamadas seções. Ao projetar um relatório nós necessitamos definir a posição do conteúdo dentro de uma seção, levando em consideração o que ela representa na estrutura visual de um relatório. A seguir estão as seções em que é baseado o layout de relatório: title, pageheader, columnheader, groupheader, detail, groupfooter, columnfoter, pagefooter, summary. Linguagem de Programação Página 3
4 3. ireport Criar o design do relatório diretamente em XML pode ser uma tarefa custosa. Necessitava-se, então, de uma ferramenta que automatizasse esse processo. O ireport veio preencher essa lacuna, permitindo 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 ainda oferece atalhos para tarefas de compilação e visualização do relatório, permitindo a realização de testes, acelerando assim o processo de design. É importante salientar que existem outras ferramentas com o mesmo objetivo que o ireport, mas que não são suficientemente maduras, no que diz respeito a facilidade de uso, e principalmente, no suporte as tags XML do JasperReports Fonte de Dados O ireport dá suporte a conexões JDBC, ODBC, e à 4 tipos de datasources: 1 Empty data source (JREmptyDatasource): é um especial datasource usado para preencher relatórios que não possuem registros ou dados recuperados. 2 XML DataSource: é um datasource capaz de empacotar um arquivo XML e normalizar seu conteúdo. As únicas informações necessárias para criar este tipo de datasource são: o nome do datasource e o nome do arquivo XML. 3 JavaBeans Set Datasource: é um datasource capaz de empacotar uma Collection ou um Array de JavaBeans. É necessário uma classe especial de fábrica (factory) que forneça um método estático para gerar a coleção ou um array de JavaBeans. Para criar este datasource você precisa de um nome para o datasource, o nome da classe que fornece o método estático para recuperar o Array/Collection de objetos e o nome deste método, que terá uma definição como esta: public static Collection createmycollection( ) ou public static Object[ ] createmyarray( ) É necessário setar o tipo de resultado (Collection ou Array). 4 Custom Datasource: este tipo de datasource é genérico. O ireport não sabe como a interface JRDataSource é implementada por esta conexão particular, mas isto não é importante. É necessário uma classe especial de fábrica (factory) que forneça um método estático que retorne um JRDataSource. Para criar este datasource você precisa do nome do datasource, do nome da classe que fornece o método estático para recuperar o JRDataSource, e do nome deste método que terá uma definição como esta: public static JRDataSource createmyjrdatasource( ) 3.2. Requisitos Ambas as ferramentas possuem requisitos para o seu funcionamento, os quais são em sua maioria bibliotecas de terceiros, também gratuitas. Ao realizar o download opte pelos arquivos completos, pois estes possuem todas as bibliotecas necessárias. Não é necessário baixar o jasperreports, pois o ireport já o traz em sua pasta lib, entretanto, é interessante ver os exemplos e o javadoc fornecidos pelo JasperReports. Linguagem de Programação Página 4
5 3.3. Instalando e configurando 1. Entre na pagina do irepor em e faça o download do ireport na área de download e depois execute o ireport windowsinstaller.exe, ou podemos instalar o plugin para trabalhar com a IDE NetBeans (ireport plugin.zip). 2. Apos instalado, copie o driver JDBC de seu banco para a pasta lib do ireport. 3. Ao iniciar, vá ao menu Ferramentas >> Opções, irá surgir uma janela (vide Fig. 2) onde você deve localizar a aba External Programs, setando ali todos os programas externos a serem utilizados como visualizadores de relatório. Após isso clique em Ok. Figura 2 - Setando programas externos. Exemplo O exemplo a seguir utiliza como fonte de dados uma base simples no SGBD open source MySql, mas você pode adaptar o exemplo para uma base e um SGBD qualquer, desde que este possua um driver JDBC ou ODBC, devidamente configurado Criando uma conexão Antes de mais nada devemos criar uma conexão com nossa fonte de dados: 1. Selecione o botão Report Datasources, ou ainda selecione no menu de boas vidas a opção 1 de criação de conexão. Figura 3 - Tela de Boa Vinda ao JasperSoft Linguagem de Programação Página 5
6 A janela que aparece lista todas as fontes de dados e conexões JDBC que você define. Clique no botão New para criar uma nova conexão (ou datasource). Figura 4 - Lista de conexões / datasources. 2. Na janela que aparece escolha o tipo de conexão (no nosso caso Database JDBC Connection). Na mesma janela dê um nome à conexão. Por exemplo, RelCadUser. 3. No campo JDBC Driver, selecione o driver do seu banco. Caso não esteja listado, como no nosso caso, especifique um de acordo com o seu SGBD. Para o Mysql, a especificação e default mas confira se o nome correto do drive esta de acordo com com.mysql.jdbc.driver, lembrando que o driver deve estar no classpath. 4. Em JDBC URL digitamos o caminho para a nossa base de dados: jdbc:mysql://localhost/colegio Obs.: A sintaxe da URL difere de SGBD para SGBD, consulte a documentação de seu banco para saber a sintaxe exata. Repare também no caminho para a base de dados. 5. Em Server Address digite o caminho para servidor de banco de dados, no nosso caso localhost. Em Database, entre com o nome do banco (colegio) ou do alias. Entramos, então, com o user root e password. Temos a possibilidade de salvar a senha marcando a opção Save password. Linguagem de Programação Página 6
7 Figura 5 - Criando uma nova conexão JDBC 6. Para testarmos a conexão clicamos no botão Test. Não esqueça que o SGBD precisa estar rodando. Se tudo ocorreu bem a seguinte mensagem irá aparecer: Figura 6 - Teste de conexão bem sucedido Obs.: É importante salientar que a configuração de uma conexão dentro do ireport não é obrigatória, pois podemos utilizá-lo apenas para criar o design do relatório e compilá-lo. As tarefas de preenchimento, exportação para um formato (pdf, por exemplo), e visualização, ficam de responsabilidade de uma classe Java. Porém, é conveniente, até mesmo para a realização dos testes, termos um único ambiente que além de permitir a definição do layout, também permita visualizarmos, em diversos formatos, o resultado do design e preenchimento do relatório através de um simples botão (Run)ra isso, é neces-sário que a conexão JDBC esteja funcionando. Criando o Design do Relatório Considerando que o teste de conexão com o banco foi bem-sucedido iniciamos a etapa de design do relatório. 1. Vá ao menu Arquivo >> New ou clique na opção 2 na tela de boas vindas: Figura 7 - Tela de Boa Vinda ao JasperSoft Linguagem de Programação Página 7
8 2. Irá aparecer a janela New File onde podemos escolher o modelo do nossa relatório e depois clicar em Launch Report Wizard para utilizar o assiste de criação do relatório. O foco desse material e demonstrar a utilização da ferramenta, por este motivo, vamos utilizar o assiste. Figura 8 - Escolha de Template do Relatório 3. Clicando em Launch Report Wizard, irá aparecer a janela onde damos um nome ao nosso relatório (Report Name) chamando-o de RelCadUser (não pode haver espaço entre as palavras). Ainda na mesma janela podemos configurar o local do arquivo que será criado RelCadUser.jrxml e depois que compilarmos o relatório outro arquivo chamado RelCadUser.jasper, o qual vamos colocar em nossa aplicação. Passo seguinte, clicar em próximo. Figura 9 - Nome e Localização 4. No passo 3 Query, vamos selecionar a nossa conexão que foi definida anteriormente e no campo da janela que aparece, Query SQL, digitamos nossa query. Levando em consideração que o resultado dessa consulta deve conter os dados que preencherão o relatório, o SQL deve ser bem estruturado. Ou ainda podemos clicar em Design query para montarmos o código SQL. Neste caso vamos digitar a consulta SELECT * FROM ALUNO e em seguida clicarmos no botão próximo. Linguagem de Programação Página 8
9 Figura 10 - Query SQL 6. Após clicarmos em próximo vamos visualizar a tela Fields que visualizaremos todas as colunas da tabela Aluno de nosso banco, e seus respectivos tipos, que é o resultado da nossa Query SQL SELECT * FROM ALUNO. Selecionamos todos os campos para que seja visível em nosso relatório. Obs.: Em nosso exemplo não iremos inserir o SQL no código XML. Realizaremos a conexão com o banco e a consulta em nossa classe Java, passando o objeto ResultSet gerado para o JasperReports. Linguagem de Programação Página 9
10 Figura 11 - Visualizando os nomes das colunas contidas no resultado da consulta. 7. Não precisamos utilizar nenhum paramento da tela Group by..., então podemos clicar em próximo e para seguir para a tela final e clicar em finalizar para aparecer a tela de Designer do nosso relatório. Figura 12 - Tela de Design do ireport Agora precisamos utilizar alguns componentes da Paleta no Report Elementos para criar o relatório, como Titulo, identificação dos campos, numero de pagina, data e hora. Para obter os registros do banco de dados vamos a Report Inspector do nosso arquivo e selecionamos os nossos Fildes e arrastamos para dentro do design. Para fazer a compilação desse relatório devemos clicar em Preview. A função desse batão é para compilar e visualizar o relatório que estmos fazendo. Linguagem de Programação Página 10
11 O nosso relatório de exemplo devera ficar da seguinte forma: Figura 13 - Relatório Pronto após configuração Obs.: Podemos agora realizar um teste, clicando no botão Preview. 3. Gerando relatório a partir de uma classe Vimos até o momento como configurar e utilizar o ireport para montar o layout de nosso relatório, e também visualizá-lo para fins de teste. Nesta seção, veremos na prática como gerar um relatório em formato pdf a partir de uma classe simples. A classe Relatorio será apresentada e descrita posteriormente. Supõe-se que você já utilizou o ireport para criar o design do relatório e definir os campos a serem preenchidos, que estas informações foram salvas em um arquivo XML, e que este foi compilado neste mesmo ambiente, gerando um arquivo.jasper. Lembrando, devemos importar as seguintes libs que encontra-se dentro da pasta onde o jasper esta instalado em C:\Arquivos de Programa\Jaspersoft\iReport \ireport\modules\ext os seguintes arquivos abaixo: Linguagem de Programação Página 11
12 Devemos colocar o arquivo.jasper gerado na pasta do projeto quem que a classe Relatorio esta, ou apontar aonde o arquivo RelCadUser.jasper esta. Este último arquivo (.jasper) será utilizado pela classe a seguir: import java.sql.connection; import java.sql.drivermanager; import java.sql.statement; import java.util.hashmap; import net.sf.jasperreports.engine.jrexception; import net.sf.jasperreports.engine.jasperexportmanager; import net.sf.jasperreports.engine.jasperfillmanager; import net.sf.jasperreports.engine.jasperprint; import net.sf.jasperreports.view.jasperviewer; public class Relatorio2 { /* Realza conexao com o banco de dados */ private static Connection getconnection() throws Exception { String driver = "com.mysql.jdbc.driver"; String database = "colegio"; String server = "localhost"; String port = "3306"; String user = "root"; String password = ""; String url = "jdbc:mysql://"+server+":"+port+"/"+database; Class.forName(driver); Connection con = DriverManager.getConnection(url, user, password); return con; } /* Gera Relatorio e visualiza-o */ public void gerarelatorio() throws JRException, Exception { JasperPrint relat; Connection con = getconnection(); Statement stm = con.createstatement(); String query = "select * from aluno"; stm.executequery(query); /* HashMap de parametros utilizados no relatório. Sempre instanciados */ HashMap parameters = new HashMap(); /*recebe o relatório para mostrar na aplicação*/ relat = JasperFillManager.fillReport("RelatorioCadastro.jasper", parameters, con); /* Exporta para o formato PDF */ JasperExportManager.exportReportToPdfFile("RelatorioCadastro.jrprint"); } /* Visualiza o relatório em formato PDF */ JasperViewer.viewReport(relat, false); } public static void main(string[] args) throws JRException, Exception { new Relatorio().geraRelatorio(); } Linguagem de Programação Página 12
Geração de Relatório com JasperReports e ireport
Geração de Relatório com JasperReports e ireport Carlos Feliz Paixão Este documento descreve a instalação, configuração e utilização de duas ferramentas open-source para a geração de relatórios em Java:
Prof. Fernando Freitas Esp. em Gestão e Docência Universitária/UNIFIMES nando@fimes.edu.br
Prof. Fernando Freitas Esp. em Gestão e Docência Universitária/UNIFIMES nando@fimes.edu.br Aplicações normalmente precisam de algum tipo de relatório. Em Java existem alguns frameworks que podem ser utilizados
Jasper ireport Ferramenta para desenvolvimento e geração de relatórios utilizando Java
Jasper ireport Ferramenta para desenvolvimento e geração de relatórios utilizando Java TJAVIREP Setembro/2005 Apostila desenvolvida especialmente para a Target Informática Ltda. Sua cópia ou reprodução
SILVIO COSTA MOREIRA UTILIZAÇÃO DAS FERRAMENTAS JASPERREPORTS E IREPORT PARA A GERAÇÃO DE RELATÓRIO EM APLICAÇÕES JAVA
SILVIO COSTA MOREIRA UTILIZAÇÃO DAS FERRAMENTAS JASPERREPORTS E IREPORT PARA A GERAÇÃO DE RELATÓRIO EM APLICAÇÕES JAVA Palmas 2005 i SILVIO COSTA MOREIRA UTILIZAÇÃO DAS FERRAMENTAS JASPERREPORTS E IREPORT
Introdução a relatórios Crosstab com ireport/jasperreports
Introdução a relatórios Crosstab com ireport/jasperreports 1. Introdução O objetivo deste tutorial é mostrar como montar um relatório crosstab, também conhecido como relatório de referência cruzada, usando
Demoiselle Report Guide. Demoiselle Report. Marlon Carvalho. Rodrigo Hjort. Robson Ximenes
Demoiselle Report Guide Demoiselle Report Marlon Carvalho Rodrigo Hjort Robson Ximenes Demoiselle Report... v 1. Configuração
Microsoft Visual Studio 2010 C# Volume II
Microsoft Visual Studio 2010 C# Volume II Apostila desenvolvida pelos Professores Ricardo Santos de Jesus e Rovilson de Freitas, para as Disciplinas de Desenvolvimento de Software I e II, nas Etecs de
VENDAS DETALHE. Com as tabelas preenchidas abra execute agora o ireport, pressione CRTL+N ou vá ao menu File>> New.
Para desenvolver este exemplo, será necessário termos uma estrutura de tabelas como mostrado abaixo ou a estrutura que você desejar, desde que possa ser utilizada como Master/Detail. Esta estrutura foi
Tutorial de IREPORT Ir à página 1, 2 Próximo - >>
www.insite.com.br Comentários - Anúncios Google Índice do fórum Lista de Usuários Busca MPs Login Registre-se Tutorial de IREPORT Ir à página 1, 2 Próximo - >> Índice do fórum ->[Tutoriais] - Java Diversos
Upload e Download de Arquivos. Ao programador Morfik, cabe implementar em sua aplicação os mecanismos gerenciem todo o processo acima.
Upload e Download de Arquivos Considerações gerais. As aplicações Web 2 tem como uma de suas características principais, o fato de permitirem aos usuários, que eles mesmo criem conteúdo, sem depender de
IFSC. Controle de Fluxo de Pessoas Usando RFId Tutoriais de Instalação
IFSC Controle de Fluxo de Pessoas Usando RFId Tutoriais de Instalação Instituto Federal de Educação, Ciência e Tecnologia de Santa Catarina Campus São José Curso Superior de Tecnologia com Ênfase em Sistemas
Manual da Ferramenta Metadata Editor
4 de março de 2010 Sumário 1 Introdução 3 2 Objetivos 3 3 Visão Geral 3 3.1 Instalação............................. 3 3.2 Legenda.............................. 4 3.3 Configuração Inicial........................
Com criar relatório no Report Services do Microsoft SQL Server 2008 R2 integrado com o
Com criar relatório no Report Services do Microsoft SQL Server 2008 R2 integrado com o SisMoura Objetivo Configurar o Reporting Services Como criar relatórios Como publicar relatórios Como acessar os relatórios
MySQL Query Browser. Professor Victor Sotero SGD
MySQL Query Browser Professor Victor Sotero SGD 1 DEFINIÇÃO O MySQL Query Browser é uma ferramenta gráfica fornecida pela MySQL AB para criar, executar e otimizar solicitações SQL em um ambiente gráfico.
Exibir relatórios gerados pelo Jasper Report em Flex
Exibir relatórios gerados pelo Jasper Report em Flex Autor: Roberto Lourenço de Oliveira Júnior Email: robertojr at comp dot ufla dot br Página pessoal: http://alunos.dcc.ufla.br/~robertojr O Jasper Report
Criar uma aplicação JPA2 com EclipseLink e H2
Criar uma aplicação JPA2 com EclipseLink e H2 1) Criar uma aplicação Java no NetBeans. File > New Project > Java, Java Application > Project name: JPA2 Finish. 2) Acrescentar ao Projeto NetBeans a biblioteca