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.

Criação do Fields no iReport
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:

Criação do parâmetro imagem
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:

Propriedades do campo ImageTools
Figura 6 – Propriedades do campo ImageTools.

A montagem final do Modelo ficou assim (salvo com o nome de ModeloGrafico):

ModeloGrafico.jrxml
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:

Gráfico de Linha com efeito 3D
Figura 8 – Gráfico de Linha com efeito 3D.
Gráfico de linha
Figura 9 – Gráfico de linha.
Gráfico de barras
Figura 10 – Gráfico de barras.
Gráfico de barras com efeito 3D
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: