JfreeChart & iReport – Parte II
Veremos neste tutorial como a ferramenta JFreeChart pode ser usada juntamente com iReport / JasperReports para se criar relatórios mais completos usando também recursos de criação de gráficos.
Você não gostou da qualidade deste conteúdo?
(opcional) Você gostaria de comentar o que não lhe agradou?
Criando o Modelo no iReport
Agora vamos criar um modelo no iReport para receber:
1 – Os dados que geraram o gráfico apresentados em forma de listagem;
2 – A imagem do gráfico;
Vamos Criar 3 fields para receber os valores que darão origem ao gráfico. Repare que tem os mesmos nomes da entidade ModeloGraficoItem.
Figura 4 – criação do Fields no iReport.
Nesta mesma tela, na aba Parameters vamos criar o parâmetro que irá receber a imagem. Observe que este parâmetro deve ser do tipo java.lang.Object:
Figura 5 – criação do parâmetro imagem.
Para mostrar a imagem do gráfico vamos criar um campo na Banda Sumary com a ferramenta ImageTools que receberá um objeto imagem por parâmetro:
Figura 6 – Propriedades do campo ImageTools.
A montagem final do Modelo ficou assim (salvo com o nome de ModeloGrafico):
Figura 7 – ModeloGrafico.jrxml.
Criando o Servlet
O código a seguir é de um Servlet que tem como única função:
· Receber os valores gerados pela classe ComposicaoDadosItemGrafico;
· Chamar a classe GeradorGrafico para criar um gráfico a partir dos da dados recebidos;
· Chamar o ModeloGrafico.jasper exibindo o relatório em formato PDF em uma janela do browser.
Para criar a imagem do gráfico vamos usar a classe BufferedImage que será o objeto adicionado ao parâmetro. Como os métodos da classe GeradorGrafico são estáticos a chamada é feita da seguinte forma:
BufferedImage imagem = GeradorGrafico.gerarGraficoLinha3D("Titulo", "Mes", "Quantidade", array);
A classe HashMap de java.util é usada para passar os parâmetros para o relatório:
HashMap parametros = new HashMap();
parametros.put("imagem", imagem);
Repare o nome do parâmetro: é o mesmo nome do objeto criado com a ferramenta ImageTools.
public class ServletRelatorioGrafico extends HttpServlet {
//Initialize global variables
public void init() throws ServletException {
}
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
//Clean up resources
public void destroy() {
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
try {
ComposicaoDadosItemGrafico composicao = new ComposicaoDadosItemGrafico();
ArrayList array = composicao.getArray();
//BufferedImage imagem = GeradorGrafico.gerarGraficoBarraVertical3D("Titulo", "Mes", "Quantidade", array);
//BufferedImage imagem = GeradorGrafico.gerarGraficoBarraVertical("Titulo", "Mes", "Quantidade", array);
//BufferedImage imagem = GeradorGrafico.gerarGraficoLinha("Titulo", "Mes", "Quantidade", array);
BufferedImage imagem = GeradorGrafico.gerarGraficoLinha3D("Titulo", "Mes", "Quantidade", array);
// A String pathJasper garda o caminho para o relatório compilado ModeloGrafico.jasper localizado na subpasta
//relatorio/grafico
String pathJasper = getServletContext().getRealPath("/relatorio/grafico") + "/TesteGrafico.jasper";
HashMap parametros = new HashMap();
parametros.put("imagem", imagem);
JRDataSource jrDataSourse = new JRBeanArrayDataSource(array.toArray());
JasperPrint impressao = JasperFillManager.fillReport(pathJasper, parametros, jrDataSourse);
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Um formulário simples em HTML dever ser criado para fazer a chamada ao Servlet.
A saída da Aplicação é mostrada abaixo:
Figura 8 – Gráfico de Linha com efeito 3D.
Figura 9 – gráfico de linha.
Figura 10 – gráfico de barras.
Figura 11- gráfico de barras com efeito 3D.
Conclusão
Vimos neste tutorial que a ferramenta JFreeChart pode ser usada juntamente com iReport / JasperReports para se criar relatórios mais completos usando também recursos de criação de gráficos.
Espero que tenha gostado do tutorial e tirado o máximo proveito dele.
Leia também
Christiano Rodarte Vale (christianovale@gmail.com), 26 anos, formado em Ciência da Computação pela UNIFOR-MG, trabalho como Desenvolvedor de Componentes Web em uma empresa (iTrade – Tecnologia de Informação) que desenvolve soluções para o setor de Agro-Negócio (www.itradeti.com.br).
3 COMENTÁRIOS
* mes
* produto
* quantidadeString (o que não bate com o nome do atributo de ModeloGraficoItem)



