Olá Pessoal,
Neste post, irei mostrar um exemplo de como fazer um simples relatório em Java para aplicações web, para a geração do relatório usaremos o Jasper Reports que é um Framework open-source, para a criação do layout usaremos o Framework iReport, para testarmos a aplicação, criamos um Servlet, que será executado no servidor JBoss4 usando o Eclipse.
Para baixar o JasperReports: http://jasperforge.org/projects/jasperreports
Para baixar o iReport: http://jasperforge.org/projects/ireport
Ao final do post o projeto será disponibilizado para download com todas bibliotecas usadas e os arquivos do relatório.
1. Passo: Estrutura do projeto:
2. Passo: Vamos criar a estrutura do relatório do iReport, crie um relatório com o nome clientes, com o seguinte arquivo xml:
<?xml version="1.0" encoding="UTF-8"?><jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="clientes" language="groovy" pageWidth="612" pageHeight="792" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <property name="ireport.zoom" value="1.0"/> <property name="ireport.x" value="0"/> <property name="ireport.y" value="0"/> <style name="efeitoZebra">  <conditionalStyle>   <conditionExpression><![CDATA[new Boolean(($V{COLUMN_COUNT}.intValue() % 2) != 0)]]></conditionExpression>   <style mode="Opaque" backcolor="#BAB8B8"/>  </conditionalStyle> </style> <parameter name="clientesLista" class="java.util.List"/> <parameter name="titulo" class="java.lang.String"/> <parameter name="total" class="java.lang.String"/> <field name="nome" class="java.lang.String"/> <field name="endereco" class="java.lang.String"/> <field name="email" class="java.lang.String"/> <field name="cidade" class="java.lang.String"/> <background>  <band splitType="Stretch"/> </background> <title>  <band height="38" splitType="Stretch">   <textField>    <reportElement x="109" y="0" width="349" height="35"/>    <textElement lineSpacing="1_1_2">     <font size="20" isBold="true"/>    </textElement>    <textFieldExpression class="java.lang.String"><![CDATA[$P{titulo}]]></textFieldExpression>   </textField>  </band> </title> <pageHeader>  <band height="17" splitType="Stretch"/> </pageHeader> <columnHeader>  <band height="34" splitType="Stretch">   <staticText>    <reportElement x="0" y="14" width="137" height="20" forecolor="#010101" backcolor="#3B56EC"/>    <textElement>     <font size="12" isBold="true" isItalic="true"/>    </textElement>    <text><![CDATA[Nome]]></text>   </staticText>   <staticText>    <reportElement x="137" y="14" width="149" height="20" forecolor="#010101" backcolor="#3B56EC"/>    <textElement>     <font size="12" isBold="true" isItalic="true"/>    </textElement>    <text><![CDATA[Endereço]]></text>   </staticText>   <staticText>    <reportElement x="286" y="14" width="153" height="20" forecolor="#010101" backcolor="#3B56EC"/>    <textElement>     <font size="12" isBold="true" isItalic="true"/>    </textElement>    <text><![CDATA[E-mail]]></text>   </staticText>   <staticText>    <reportElement x="439" y="14" width="133" height="20" forecolor="#010101" backcolor="#3B56EC"/>    <textElement>     <font size="12" isBold="true" isItalic="true"/>    </textElement>    <text><![CDATA[Cidade]]></text>   </staticText>  </band> </columnHeader> <detail>  <band height="22" splitType="Stretch">   <textField>    <reportElement style="efeitoZebra" x="137" y="0" width="149" height="20"/>    <textElement/>    <textFieldExpression class="java.lang.String"><![CDATA[$F{endereco}]]></textFieldExpression>   </textField>   <textField>    <reportElement style="efeitoZebra" x="439" y="0" width="133" height="20"/>    <textElement/>    <textFieldExpression class="java.lang.String"><![CDATA[$F{cidade}]]></textFieldExpression>   </textField>   <line>    <reportElement x="0" y="20" width="572" height="1"/>   </line>   <textField>    <reportElement style="efeitoZebra" x="0" y="0" width="137" height="20"/>    <textElement/>    <textFieldExpression class="java.lang.String"><![CDATA[$F{nome}]]></textFieldExpression>   </textField>   <textField>    <reportElement style="efeitoZebra" x="286" y="0" width="153" height="20"/>    <textElement/>    <textFieldExpression class="java.lang.String"><![CDATA[$F{email}]]></textFieldExpression>   </textField>  </band> </detail> <columnFooter>  <band height="20" splitType="Stretch">   <textField>    <reportElement x="391" y="0" width="181" height="20"/>    <textElement>     <font size="12" isBold="true"/>    </textElement>    <textFieldExpression class="java.lang.String"><![CDATA[$P{total}]]></textFieldExpression>   </textField>  </band> </columnFooter> <pageFooter>  <band height="54" splitType="Stretch">   <textField>    <reportElement x="225" y="17" width="80" height="20"/>    <textElement textAlignment="Right"/>    <textFieldExpression class="java.lang.String"><![CDATA["Página "+$V{PAGE_NUMBER}+" de"]]></textFieldExpression>   </textField>   <textField evaluationTime="Report">    <reportElement x="305" y="17" width="40" height="20"/>    <textElement/>    <textFieldExpression class="java.lang.String"><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>   </textField>  </band> </pageFooter> <summary>  <band height="42" splitType="Stretch"/> </summary></jasperReport>clientes.jrxml
3. Passo: Vamos criar um Servlet, chamado RelatorioServlet, o foco do post é mostrar como fazer relatório em Java, para isto, deixarei toda lógica no Servlet, deixando o projeto com uma baixa coesão, fique a vontade para fazer o projeto com a separação das camadas. Crie também uma JavaBean chamado Cliente, para carregar as informações dos Clientes, criaremos um List de Clientes no próprio Servlet. O exemplo terá uma opção que visualizará o Relatório, usando o método estático viewReport da Classe JasperViewer, a outra opção será o pdf do Relatório usando o método estático printReportToPdfFile da Classe JasperPrintManager.
package modelo;
public class Cliente {  private String nome; private String endereco; private String email; private String cidade;    public Cliente() {  super(); } public Cliente(String nome, String endereco, String email, String cidade) {  super();  this.nome = nome;  this.endereco = endereco;  this.email = email;  this.cidade = cidade; } public String getNome() {  return nome; } public void setNome(String nome) {  this.nome = nome; } public String getEndereco() {  return endereco; } public void setEndereco(String endereco) {  this.endereco = endereco; } public String getEmail() {  return email; } public void setEmail(String email) {  this.email = email; } public String getCidade() {  return cidade; } public void setCidade(String cidade) {  this.cidade = cidade; }
}Cliente.java
package relatorio;
import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;
import modelo.Cliente;import net.sf.jasperreports.engine.JRException;import net.sf.jasperreports.engine.JasperFillManager;import net.sf.jasperreports.engine.JasperPrint;import net.sf.jasperreports.engine.JasperPrintManager;import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;import net.sf.jasperreports.view.JasperViewer;
public class RelatorioServlet extends HttpServlet { private static final long serialVersionUID = 1L;         public RelatorioServlet() {        super();          }        public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     List clientesLista = new ArrayList();    clientesLista.add(new Cliente("Jabes Felipe", "Copacabana, 54", "jabesfelipe@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Camila Ribeiro", "Ipanema,324", "camilarib@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Jaque Silva", "Lapa, 44", "jaquesilva@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Bruna Lira", "Centro, 32", "brunalira@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Amanda Alves", "Lapa, 342", "amandaa@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Priscila Ratina", "Barra Tijuca, 86", "priscilaratina@gmail.com", "Rio de Janeiro"));  clientesLista.add(new Cliente("Carolina Marques", "Copacabana, 234", "carolinamarques@gmail.com", "Rio de Janeiro"));    try {      String acao = request.getParameter("acao") == null ? "" : request.getParameter("acao");      String caminhoJasper = getServletContext().getRealPath("/WEB-INF/classes/relatorio/") + "/";   String caminho = getServletContext().getRealPath("/");      JRBeanCollectionDataSource jrDT = new JRBeanCollectionDataSource(clientesLista);   Map parametros = new HashMap();   parametros.put("titulo", "Relatórios de Clientes");   parametros.put(clientesLista, jrDT);   parametros.put("total", "Total de Clientes: " + clientesLista.size());   JasperPrint jasperPrint = JasperFillManager.fillReport(caminhoJasper + "clientes.jasper", parametros, jrDT);      if("visualizar".equals(acao)) {    JasperViewer.viewReport(jasperPrint, false);   } else if("pdf".equals(acao)) {    JasperPrintManager.printReportToPdfFile(jasperPrint, caminho + "/RelatorioCliente.pdf");    response.sendRedirect("RelatorioCliente.pdf");   } else {    response.sendRedirect("index.jsp");   }       } catch (JRException e) {      e.printStackTrace();  }
    }        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {     processRequest(request, response);    }     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  processRequest(request, response); }
}RelatorioServlet.java
3. Passo: Para testar, crie um index.jsp, como o do exemplo abaixo:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Relatório em Java</title><script type="text/javascript"> function visualizarRelatorio() {    enviar("visualizar");   }
 function gerarRelatorioPDF() {    enviar("pdf"); }
 function enviar(acao) {  document.forms[0].acao.value = acao;  document.forms[0].target = "_blank";  document.forms[0].action = "./RelatorioServlet";  document.forms[0].submit(); }</script></head><body><h1>Relatório de Clientes</h1><form action="./RelatorioServlet" method="post" onsubmit="return false;"> <input type="hidden" name="acao" />  <input type="submit" value="Visualizar Relatorio" onclick="javascript:visualizarRelatorio();"> <input type="submit" value="Gerar Relatório PDF" onclick="javascript:gerarRelatorioPDF();"> </form></body></html>index.jsp
Exemplo: Index
Vizualizando o Relatório:
PDF do Relatório:
Bom galera, este foi um exemplo de como criar relatórios em Java, usando o JasperReport e o iReport,
Para quem quiser baixar o exemplo, clique aqui.
Qualquer dúvida, crítica ou sugestão, fico à disposição.
 16:16
16:16
 Jabes Felipe
Jabes Felipe
 




 


 
 
 
 
