Introdução ao JasperReport
Instalação do Ambiente
O Ambiente
•
IDE inspirado no Eclipse
Conhecendo o Jaspersoft Studio
•
Interface baseada no eclipse
Um projeto poderá conter vários relatórios
Conhecendo o Jaspersoft Studio
•
Criando o primeiro relatório
Clique com o Jasper Report Clique com o botão direito do mouse e escolha: New > Jasper Report
Conhecendo o Jaspersoft Studio
1. Escolha a opção Blank e clique em “Next”
Conhecendo o Jaspersoft Studio
4. Escolha a conexão
com o banco de
dados
5. Escolha a Tabela
6. Selecione os
campos do relatório
( próximo passo)
Digite o Finish Digite o SQL e clique em FinishConhecendo o Jaspersoft Studio
O relatório criado tem as seguintes seções (bandas):
Como funciona as
Conhecendo o Jaspersoft Studio
Toda a parte visual é construída a partir do XML que representa o relatório:
Clique na aba Source para Ver o código fonte.
Conhecendo o Jaspersoft Studio
Uma nova bandapode ser incluída clicando com o botão
direito e escolhendo a opção: “Add Band”
Para excluir uma banda, basta selecioná-la e apertar “Delete”. OBS: Com exceção da banda
Detail, podemos ter apenas uma banda de cada tipo!
Conhecendo o Jaspersoft Studio
Podemos inserir
elementos nas
bandas
Todo elemento tem
suas
Elemento Static Text
•
Texto ou informação estática no relatório
•
As principais propriedades são “Text “e “Font”
Exemplo:
Na banda de título foi inserido um Static Text com as seguintes
propriedades: Text
Font (size e bold) Aligment
Preview do relatório
Selecione a aba Preview
Elemento Text Field
•
Texto ou informação composta por expressões
•
As principais propriedades são “Expression“e “Blank when null”
Exemplo:
Na banda de Page header foi inserido um Text Field com a seguinte
propriedades: Expression =
Elemento Text Field
Exemplo:
Na banda de detail foi inserido Text Fields com a propriedade Expression apontando para os campos do banco de dados
Acesssando um BD
CREATE TABLE `pessoa` ( `codigo` int(10) unsigned NOT NULL auto_increment, `nome` varchar(255) NOT NULL,
`idade` int(10) unsigned NOT NULL, `mae` varchar(255) NOT NULL,
`pai` varchar(255) default NULL, `classe` char(1) NOT NULL,
`Renda` decimal(12,2) NOT NULL, `nascimento` date NOT NULL,
`ativo` tinyint(1) unsigned NOT NULL default '1',
Acesssando um BD
CREATE TABLE `endereco` (`codigo` int(10) unsigned NOT NULL auto_increment, `codPessoa` int(10) unsigned NOT NULL,
`endereco` varchar(45) NOT NULL, `bairro` varchar(45) NOT NULL, `estado` varchar(2) NOT NULL,
`numero` int(10) unsigned NOT NULL,
PRIMARY KEY (`codigo`), KEY `FK_Endereco_Pessoa` (`codPessoa`), CONSTRAINT
`FK_Endereco_Pessoa` FOREIGN KEY (`codPessoa`) REFERENCES `pessoa` (`codigo`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
Acesssando um BD
CREATE TABLE `contacorrente` (`codigo` int(10) unsigned NOT NULL auto_increment, `codPessoa` int(10) unsigned NOT NULL,
`data` date NOT NULL,
`valor` decimal(12,2) default NULL, PRIMARY KEY (`codigo`),
KEY `FK_ContaCorrente_Pessoa` (`codPessoa`), CONSTRAINT `FK_ContaCorrente_Pessoa` FOREIGN KEY (`codPessoa`) REFERENCES `pessoa` (`codigo`)) ENGINE=InnoDB
Primeiro relatório
1. Clique o botão direito do mouse e escolha a opção “New > Jasper
Report”;
2. Escolha a opção “Blank A4” nos templates;
3. Informe o nome do relatório: “RelatorioPessoas.jrxml”
4. Configure o Data source:
Primeiro relatório
5. Configure o data adapter
Caminho do “jar” do MySQL
Caminho do “jar” do MySQL
Primeiro relatório
6. Configure a tabela de acesso do data source (clique em next);
7. Selecione todos os campos (clique em next);
8. Neste relatório não iremos agrupar registros (clique em next);
9. Finalizar a configuração.
Primeiro relatório
10. Você pode configurar a página clicando com o botão direito do
mouse fora das bandas e escolhendo a configuração “Page
Format”.
Primeiro Relatório
Static Text
Primeiro Relatório
11. Insira os seguintes Static text e Text Fields nas bandas mostradas
abaixo:
Primeiro Relatório
12. Para os Text Fields com datas e valores monetários podemos
inserir máscaras ou padrões de texto:
Primeiro Relatório
Dica: pode-se manipular um tipo data de várias formas, por exemplo,
pegar somente o ano ou a hora através dos métodos disponibilizados:
Primeiro Relatório
13. Podemos traduzir os valores true e false modificando a
propriedade “expression” do campo ativo:
Primeiro Relatório
14. Podemos filtrar os registros da banda detalhe utilizando a
propriedade “Print when expression”:
Primeiro Relatório
15. Podemos criar parâmetro de entrada :
3) Configure a propriedade “Print When expression” da banda detail
Primeiro Relatório
16. Podemos inserir imagens com o componente Image. Por exemplo,
a figura abaixo foi inserida na banda de sumário
Informei o caminho absoluto: “c:\pessoas.jpg”
Primeiro Relatório
17. Iremos inserir imagens diferentes para indicar se a pessoa é maior
ou menor de idade.
18. Insira duas imagens na pasta do projeto (workspace)
19. Crie duas novas colunas na banda detail: “Idade” e “Imagem”
20. Configure a expression da imagem da seguinte forma:
Se for comparar string use a função EQUALS
Primeiro Relatório
21. Podemos inserir bordas em qualquer elemento dentro das bandas.
Por exemplo, para colocar bordar no campo “Ativo”:
2) Selecione o lado da borda que será configurado, ou use os botões abaixo; 3) Informe a espessura da borda. 1) Selecione o
text field a ser alterado;
Primeiro Relatório
22. Podemos inserir linhas no relatório inserido o componente “Line”
da palheta de elementos básicos
Inserido um componente “line” no final da banda Detail para separar cada linha
Primeiro Relatório
Primeiro Relatório - variáveis
•
Criando a variável TotalDePessoas
Primeiro Relatório - variáveis
•
Criando a variável SomaDeIdades
$F{ativo} == true ? $F{idade} : 0
Primeiro Relatório - variáveis
•
Arraste as variáveis para a banda sumário e veja o resultado no preview
OBS: como é criado um Text Field, podemos fazer todas as
Segundo Relatório – mestre/detalhe
1. Copie e cole o relatório existente renomeado-o para PessoaEndereco
2. Clique em uma parte em branco do relatório (fora das bandas)
3. Procure nas propriedades do relatório o botão “Edit query, filter and sort order”
4. Verifique se o data adapter (data source) manteve a configuração com o BD
Segundo Relatório – mestre/detalhe
1. Aumente a largura da banda de detalhe (Height = 52 px)
2. Na banda de detalhe insira um componente chamado “Subreport”
3. Configure esse novo componente seguindo os passos a seguir:
Segundo Relatório – mestre/detalhe
4. Adicione todos os campos
5. Na tela de agrupamento apenas clique em “next”
6. Execute os passos abaixo e clique em “finish”
Segundo Relatório – mestre/detalhe
Segundo Relatório – mestre/detalhe
7. Nas propriedades do relatório, clique no botão “Edit query, filter and sort options”
8. Modifique a query inserindo o parâmetro criado nos passos anteriores
Segundo Relatório – mestre/detalhe
9. Volte no relatório master (RelatorioPessoas.jrxml) e reposicione o Subreport para
ocupar toda a largura da banda detail:
Segundo Relatório – mestre/detalhe
10. Como o detalhe está selecionado, altere também o “Data Source Expression”,
conforme figura abaixo:
Segundo Relatório – mestre/detalhe
11. Volte no relatório detail (PessoasEnderecoDetalhe.jrxml) e deixe apenas as bandas
“Column Header” e “Detail”.
12. Insira os campos do detalhes e os configure como mostra a imagem abaixo:
13. Compile esse relatório para refletir essas alterações no Master.
Podemos remover as margens clicando com o botão direito do mouse e
Segundo Relatório – mestre/detalhe
Exercício:
Crie outro Subreport logo abaixo do primeiro. Esse novo SubReport deve mostrar as
contas-corrente das pessoas.
Dica: Para que os sub-relatório não se sobreponham, informe o valor “true” para a
propriedade “Remove Line When Blank” e para esse último sub-relatório informe o
valor “float” para a propriedade “Position Type”.
Chamando o relatório no Java
1. Crie um projeto Mavem e insira as seguintes dependências no pom.xml:
2. Copie o arquivo do relatório “RelatorioPessoas.jasper” para a mesma
pasta (pacote) da classe com o método main:
.... <dependencies> <dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.2.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.35</version> </dependency> ...
-Copie o .jasper também para a pasta target dos projetos no Netbeans; -Veja se as imagens estão acessíveis.
Chamando o relatório no Java
3. Crie uma classe com o método main
import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.util.LinkedHashMap; import java.util.Map; import net.sf.jasperreports.engine.JRExporter; import net.sf.jasperreports.engine.JRExporterParameter; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.export.JRPdfExporter; //continua no próximo slide
Chamando o relatório no Java
public static void main(String[] args) throws Exception{ System.out.println("Conectando ao banco de dados..."); Class.forName("com.mysql.jdbc.Driver");
Connection mySQLConnection =
DriverManager.getConnection("jdbc:mysql://localhost:3306/jasper01","root", "root"); InputStream relatorio =
CarregaJasper.class.getResourceAsStream(“RelatorioPessoas.jasper"); Map<String,Object> parameters = new LinkedHashMap<String,Object>(); parameters.put("ParameterInativos", Boolean.TRUE);
System.out.println("Gerando relatório...");
JasperPrint jp = JasperFillManager.fillReport(relatorio, parameters,mySQLConnection); JRExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT,jp);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, "meuRelPessoas.pdf");
System.out.println("Gerando PDF..."); exporter.exportReport();
System.out.println("Feito!"); } Ao invés de exporter Podemos vizualizar:JasperViewer viewer = new JasperViewer(jp, false); viewer.show();
Compilando o relatório no Java
public static void main(String[] args) throws Exception{ //conexão com banco de dados omitido...
System.out.println(“Compilando o realtorio..."); InputStream relatorioSource =
CompilarJasper.class.getResourceAsStream("RelatorioPessoas.jrxml"); ByteArrayOutputStream relatorioOutputCompiled = new ByteArrayOutputStream();
JasperCompileManager.compileReportToStream(relatorioSource, relatorioOutputCompiled);
byte[] compiledReportData= relatorioOutputCompiled.toByteArray();
relatorioOutputCompiled.close();
Map<String,Object> parameters = new LinkedHashMap<String,Object>(); parameters.put("ParameterInativos", Boolean.TRUE);
System.out.println("Gerando realtorio...");
JasperPrint jp = JasperFillManager.fillReport(new
ByteArrayInputStream(compiledReportData), parameters,mySQLConnection);
//exportando e gerando PDF omitidos... }
Insira o arquivo .jrxml no projeto e no target do
Compilando o relatório no Java com
seus sub relatórios
public static void main(String[] args) throws Exception{ //conexão com banco de dados...
InputStream theReport = compileReport();
Map<String,Object> parameters = new LinkedHashMap<String,Object>(); System.out.println("Gerando realatório...");
JasperPrint jp = JasperFillManager.fillReport(theReport, parameters,mySQLConnection); //exportando e gerando PDF omitidos...
}
Esse método gera todos os detalhes antes de
Compilando o relatório no Java com
seus sub relatórios
public static InputStream compileReport() throws Exception{ System.out.println("Compilando Conta Corrente...");
InputStream isPCC =
PessoasEEnderecosReport.class.getResourceAsStream("PessoasContaCorrente.jrxml"); ByteArrayOutputStream relatorioCCOutputCompiled = new ByteArrayOutputStream(); JasperCompileManager.compileReportToStream(isPCC, relatorioCCOutputCompiled); byte[] compiledCCReportData = relatorioCCOutputCompiled.toByteArray();
FileOutputStream filePCC = new
FileOutputStream("PessoasEEnderecos_ContaCorrente.jasper"); filePCC.write(compiledCCReportData);
filePCC.close();
Compilando o relatório no Java com
seus sub relatórios
public static InputStream compileReport() throws Exception{ System.out.println("Compilando Endereco...");
InputStream isPD =
PessoasEnderecosReport.class.getResourceAsStream("PessoaEnderecoDetalhe.jrxml"); ByteArrayOutputStream relatorioPDOutputCompiled = new ByteArrayOutputStream();
JasperCompileManager.compileReportToStream(isPD, relatorioPDOutputCompiled); byte[] compiledPDReportData = relatorioPDOutputCompiled.toByteArray();
FileOutputStream filePD = new FileOutputStream("PessoasEEnderecos_Detalhe.jasper"); filePD.write(compiledPDReportData);
filePD.close();
Compilando o relatório no Java com
seus sub relatórios
public static InputStream compileReport() throws Exception{ System.out.println("Compilando Relatório principal...");
InputStream finalFile =
PessoasEEnderecosReport.class.getResourceAsStream("PessoasEEnderecos.jrxml"); ByteArrayOutputStream relatorioFinalOutputCompiled = new ByteArrayOutputStream(); JasperCompileManager.compileReportToStream(finalFile, relatorioFinalOutputCompiled); byte[] compiledFinalReportData = relatorioFinalOutputCompiled.toByteArray();
return new ByteArrayInputStream(compiledFinalReportData); }