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.

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:

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.


Leia também:
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados