DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy Java Magazine
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!

Gerando Relatórios com JasperReports - Revista easy Java Magazine 19

Neste artigo será mostrado um passo a passo para a criação de um relatório JasperReports, utilizando a ferramenta iReport que irá nos auxiliar no processo de desenvolvimento do template do relatório.





Easy Java Magazine 19

[Artigo disponível no Leitor Digital DevMedia. Clique aqui para acessá-lo]

> Clique aqui para ler todos os artigos da Easy Java Magazine 19


A grande maioria dos sistemas computacionais é criada para que dados sejam inseridos, possibilitando que estes sejam transformados em informações úteis. Com estas informações em mãos, é possível realizar analises e tomada de decisões estratégicas para uma empresa, por exemplo.

Uma das formas mais utilizadas para obtermos tais informações é o bom e velho relatório. Um relatório pode conter grandes quantidades de informações de forma detalhada e organizada, facilitando a leitura das mesmas.

Neste contexto, o JasperReports nos fornece funcionalidades que permitem criar relatórios complexos de forma estruturada, a partir da elaboração de um template. Este template é um arquivo XML com a extensão .jrxml. É neste arquivo que é especificada a estrutura do relatório, ou seja, é nele onde informamos os dados que irão compor o relatório, em que posição e de que forma serão exibidos, formando assim um layout.
A partir da definição do template e com o auxílio do framework JasperReports, conseguimos gerar nossos relatórios e exportá-los para diversos formatos, como: HTML, PDF e DOC.


JasperReports
O JasperReports é um framework open source inteiramente escrito em Java, tendo sido criado e mantido pela organização JasperForge. Ele é um dos mecanismos mais populares para a geração de relatórios na plataforma Java.

Através do JasperReports e sua poderosa API, é possível gerar e exportar relatórios altamente dinâmicos para aplicações Java. Tudo isso é feito de forma descomplicada, intuitiva e escrevendo poucas linhas de código.


Adicionando a biblioteca do JasperReports ao projeto
A biblioteca do JasperReports pode ser obtida diretamente do site, realizando o download do arquivo, ou através de uma ferramenta de gerenciamento e automação de projetos, como o Apache Maven. Até a elaboração deste artigo, a versão mais recente do framework era a 4.5.1, versão esta que iremos adotar em nosso exemplo.

Se a escolha for realizar manualmente o download, o pacote contendo as bibliotecas do JasperReports pode ser obtido através do site oficial do projeto (veja a seção Links). Logo após o download, os JARs devem ser extraídos e incluídos no CLASSPATH da aplicação.
Caso opte pelo Maven, a biblioteca deve ser declarada na seção de dependências do pom.xml do projeto, como mostrado a seguir:


net.sf.jasperreports
jasperreports
4.5.1



Etapas do processo de desenvolvimento de um relatório JasperReports
Antes de um relatório ficar pronto para ser visualizado ou impresso, este deve passar por algumas etapas de desenvolvimento.

A primeira etapa é a criação do template. Ela consiste basicamente em criar um arquivo do tipo XML, fazendo uso das tags e atributos definidos no arquivo jasperreports.dtd. O arquivo criado deve possuir a extensão .jrxml, e nele incluímos os campos a serem preenchidos dinamicamente por uma fonte de dados. Além disso, também podemos definir no template outros componentes, como textos fixos, imagens, cálculos, parâmetros, totalizadores, etc.

Na sequência, é preciso realizar a compilação do arquivo de template, criado anteriormente. Este passo é realizado pela API do JasperReports, sendo possível ser feito automaticamente via ferramenta, como iReport, ou pela própria aplicação (veremos ambas as formas de compilação mais adiante).

Após a compilação, um arquivo com a extensão .jasper é gerado. Este arquivo é um arquivo de classe Java, que representa um objeto da classe JasperReport, o qual será utilizado em conjunto com uma fonte de dados.

A fonte de dados, também conhecida como datasource, é usada para popular o relatório, compondo, assim, as informações que irão constituí-lo. Estas informações podem ser importadas através de fontes de dados distintas, como é o caso de arquivos XML, CSV, de forma programática através de coleções ou arrays de JavaBeans, ou até mesmo de uma conexão com o banco de dados. Ao preencher o relatório, criamos então um novo arquivo, agora com a extensão .jrprint. Este também é um arquivo Java, que implementa a interface JarperPrint.
"
A exibição deste artigo foi interrompida.

  Este é um post disponível para assinantes MVP
Este post também está disponível para assinantes da Easy Java Magazine
ou para quem possui Créditos DevMedia.  Clique aqui para saber mais!


Marcos Alexandre Vidolin De Lima
Bacharel em Ciência da Computação. Atua como desenvolvedor de aplicações Java EE. Possui as certificações SCJP 1.5 e OCWCD 1.5. É amante de novas tecnologias e nas horas vagas mantém o seu blog pessoal. www.marcosvidolin.wordpress.com, twitter: @marcosvidolin
O que você achou deste post?

    11 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Emerson Avelino Pereira
Não funcionou, segui passo a passo erro: net.sf.jasperreports.engine.JRException: java.net.MalformedURLException
[há +1 mês] - Responder

 

[autor] Marcos Alexandre Vidolin De Lima
Olá Emerson
blz?

cara em que momento que o erro é gerado (qual parte do código)? Me parece que o arquivo ".jasper" não é encontrado.
Confira a localização/nome do arquivo e cheque se esta batendo com o path que inseriu no código. =]

[]'s
[há +1 mês] - Responder
 

Emerson Avelino Pereira
Olá Marcos, estava verificando realmente isso que vc falou, o path, porque fiz a partir do seu exemplo, mas no NetBeans, ainda não encontrei o erro, qualquer dica.

O Erro esta apontando para essa linha
JasperReport jasperReport = JasperCompileManager.compileReport(jasperTemplate);

Um abraço...
[há +1 mês] - Responder
 

Emerson Avelino Pereira
o caminho do meu relatório é esse:

String path = "/WEB-INF/reports/ValidadeAlvarasPorServico.jrxml";
InputStream jasperTemplate = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(path);
[há +1 mês] - Responder
 

[autor] Marcos Alexandre Vidolin De Lima
Faz assim... só para teste coloca o caminho completo do arquivo, "c:\diretorio\meu_arquivo.jrxml" no código.
[há +1 mês] - Responder
 

Emerson Avelino Pereira
tentei desses doi modos:

String path = "C:/reports/arquivos/ValidadeAlvarasPorServico.jrxml";

String path = "C:/Users/eap/Documents/NetBeansProjects/RelatoriosSetrans/reports/arquivos/ValidadeAlvarasPorServico.jrxml";
[há +1 mês] - Responder
 

Emerson Avelino Pereira
E nada: net.sf.jasperreports.engine.JRException: java.net.MalformedURLException
[há +1 mês] - Responder
 

[autor] Marcos Alexandre Vidolin De Lima
Você consegue compilar e visualizar este relatório direto do iReport? Se o path esta correto então não era para ter problemas, a menos que tenha algo errado com o XML gerado.
Tente atualizar o arquivo modificando algo no seu template em seguida salve e tente rodar pela aplicação, se o problema persistir, faça o seguinte teste: compile pelo iReport e pule a faze de compilação feita pela aplicação.
Vamos tentar mapear onde esta o problema.

[]'s
[há +1 mês] - Responder
 

Emerson Avelino Pereira
Fiz o que vc falou,pela aplicação continua o erro, mas consigo vizualizar o relatório pelo preview do ireport, normalmente.

Estou usando as Libs: iText-2.1.7.jar, commons-beanutils-1.8.2.jar,commons-collections-3.2.1.jar, commons-digester-2.1.jar, commons-javaflow-20060411.jar, jasperreports-javaflow-3.7.2.jar, commons-logging-1.1.jar, jasperreports-4.7.0.jar, jasperreports-fonts-4.5.0.jar, mysql-connector-java-5.1.7-bin.jar

Segue o código da classe Run Report:

package br.com.relatorio;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;

@ManagedBean
@RequestScoped
public class RunReport implements Serializable {

private String nomeServico;

public String printReport() throws JRException, IOException {


// String path = "C:/Users/eap/Documents/NetBeansProjects/Relatorios/reports/arquivos/ValidadeAlvarasPorServico.jrxml";
String path = "/WEB-INF/reports/arquivos/ValidadeAlvarasPorServico.jrxml";

InputStream jasperTemplate = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(path);


JasperReport jasperReport = JasperCompileManager.compileReport(jasperTemplate);
Map parametros = new HashMap();
parametros.put("servico", this.nomeServico);


Connection conexao = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conexao = DriverManager.getConnection("jdbc:mysql://localhost/banco", "root", "");
} catch (Exception e) {
// TODO: handle exception
}


JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport,parametros, conexao);

// Obtem a resposta.
HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

ServletOutputStream outputStream = response.getOutputStream();

response.setContentType("application/pdf");
response.setHeader("Content-Disposition","attachment; filename=\"relatorio.pdf\"");

// Exportar o relatorio para PDF.
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);

outputStream.flush();
outputStream.close();
FacesContext.getCurrentInstance().renderResponse();
FacesContext.getCurrentInstance().responseComplete();

return null;
}

public String getNomeServico(){
return nomeServico;
}

public void setNomeServico(String nomeServico){
this.nomeServico = nomeServico;
}
}


Meu relatório.xhtml:
<h:body>
<h:form>
<h:outputText value="Listagem de arquivos"
style="font-size: 40px; font-weight:bold;" />
<br/>
<fieldset title="Filtro do Serviço:">
<h:panelGrid columns="2">
<h:outputText value="Tipo de Serviço:" />
<h:inputText value="#{runReport.nomeServico}" />
</h:panelGrid>
</fieldset>
<br />
<h:commandButton value="Gerar relatorio" action="#{runReport.printReport}" />
</h:form>
</h:body>a
[há +1 mês] - Responder
 

Diogo Souza
Oi, a lib "jdt-compiler.jar" não seria necessária neste caso?
[há +1 mês] - Responder
 

Anubis Rossetto
Acredito estar faltando as bibliotecas que o JasperReport utiliza.
[há +1 mês] - Responder
 
Cursos relacionados
Publicidade
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2013 - Todos os Direitos Reservados a web-03