Resolvido: IReport em Aplicação Desktop

6 respostas
fabio.argenton

Pessoal, boa noite!

Pelo amor de Deus alguém poderia compartilhar algum tutorial completo de como gerar relatórios do inicio ao fim no IReport e NetBeans para desktop.

Meu BD: MySQL
Relatório: IReport
IDE: NetBeans
Desenvolvimento p/ Desktop

O relatório consegui montar e está perfeito inclusive com parâmetros, meu problema agora é como eu faço para chamar esse relatório através de um botão em um JFrame, quero clicar no botão “Imprimir” no qual deverá abrir o relatório pegando como parâmetro o registro aberto na tela (Cód).

Estou usando o conceito de camadas:
bean - Camada onde fica os get and seter de cada tabela
dao - Camada responsável pelos insert, updat, etc… (CRUD)
db - Camada onde tenho a conexão ao MySQL
report - Camada onde tem o relatório gerado pelo IReport
util - Camada onde tenho alguns métodos uteis
view - Cama onde contém as telas

Me ajuda ae pessoal.

6 Respostas

soloplayer

Bom dia tudo bem, eu fiz há alguns anos utilizando este tutorial, bem simples de fazer, segue.

fabio.argenton

Obrigado soloplayer, mas ainda não me atende, como disse preciso de um tutorial completo do inicio a fim desde criar até chamar ele num botão da aplicação Java.

Ziguifrid

Eu faço assim.

Botão que chama a classe para criar o relatório.

try {

            Folha_de_Chamada f = new Folha_de_Chamada();
            
  
                f.mostrar_folha_de_chamada(professor, local_aula, modalidade, semana, horario, faixa_etaria, sexo, nivel);                

        } catch (Exception e) {
            System.out.println("botão imprimir "+e.getMessage());
        }

A classe

public class Folha_de_Chamada {

 
    
    Connection con=null;
    String sql = null;    
    ResultSet rs;    
    Process proc;
    
    
    List<CadastrarAlunoAula> jtableAA = new ArrayList<>();        
    
String professor, local_aula, modalidade, semana, hora, faixa_etaria, sexo, nivel;  

public Folha_de_Chamada(){
      con = Validar.Conexao.conectar(); 
}    

public void mostrar_folha_de_chamada(String professor, String local_aula, String modalidade, String semana, 
        String hora, String faixa_etaria, String sexo, String nivel) throws IOException{

    try {

        
 sql = "SELECT aluno.idade_aluno, cadastrar_aluno_aula.matricula_cadastrar_aluno_aula, cadastrar_aluno_aula.aluno_cadastrar_aluno_aula, "
         + "aluno.exame_medico_proximo_aluno, aluno.telresidencial1_aluno, "
         + "aluno.telcelular9_aluno, "
         + "cadastrar_aluno_aula.professor_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.local_aula_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.modalidade_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.semana_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.hora_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.idade_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.sexo_cadastrar_aluno_aula, "
         + "cadastrar_aluno_aula.nivel_cadastrar_aluno_aula "
         + "FROM `cadastrar_aluno_aula` "
         + "Inner join aluno on cadastrar_aluno_aula.matricula_cadastrar_aluno_aula = aluno.matricula_aluno "  
         + "where "
         + "professor_cadastrar_aluno_aula ='"+professor+"' and "
         + "local_aula_cadastrar_aluno_aula ='"+local_aula+"' and "
         + "modalidade_cadastrar_aluno_aula ='"+modalidade+"' and "
         + "semana_cadastrar_aluno_aula ='"+semana+"' and "
         + "hora_cadastrar_aluno_aula ='"+hora+"' and "
         + "idade_cadastrar_aluno_aula ='"+faixa_etaria+"' and "
         + "sexo_cadastrar_aluno_aula ='"+sexo+"' and "
         + "nivel_cadastrar_aluno_aula ='"+nivel+"' order by aluno_cadastrar_aluno_aula asc";       
 
PreparedStatement ps = con.prepareStatement(sql);
rs = ps.executeQuery();
        
        JRResultSetDataSource jrRS = new 
JRResultSetDataSource(rs) ;
        
        JasperReport report = JasperCompileManager.compileReport(System.getProperty("user.dir")+""
                + "/src/FolhaChamada/FC1.jrxml");    
   
       
        Map parametro = new HashMap();
        parametro.put("professor_aula", professor);
        parametro.put("local_aula_aula", local_aula);
        parametro.put("modalidade_aula", modalidade);
        parametro.put("semana_aula", semana);
        parametro.put("hora_aula", hora);
        parametro.put("faixa_etaria_aula", faixa_etaria);
        parametro.put("sexo_aula", sexo);
        parametro.put("nivel_aula", nivel);
        
        JasperPrint print = JasperFillManager.fillReport(report, parametro, jrRS);
        
        JasperViewer view = new JasperViewer(print, false);
        

        String home_path=System.getProperty("user.home"); 

        JasperExportManager.exportReportToPdfFile(print,home_path+"/FolhaDeChamada.pdf"); 
        view.setTitle("Folha de Chamada");
        view.setExtendedState(Frame.MAXIMIZED_BOTH);
        view.setVisible(true);
        

//}//fim do if result

    } catch (SQLException | JRException e) {
        System.out.println("e "+e.getMessage());
    }   
}//fim da folha chamada

}
fabio.argenton

Valeu pela ajuda pessoal, ainda não encontrei “O” tutorial, mas juntando um pouco aqui, vendo umas vídeos aulas ali, quebrando a cabeça aqui consegui finalizar, segue meu código para chamada do relatório:

//Metodo para chamar o Formulário RDI
    public void rdiReport() throws JRException {
        
        String relat = "C:\\Users\\Fabio Argenton\\Desktop\\Nova RDI - Java\\RDI\\src\\br\\com\\rdi\\report\\rdiReport.jasper";//Caminho do relatório
        HashMap parametros = new HashMap();
        Connection conn = ConnectionMySQL.getConnection();//Tenho uma classe conexão
        
        //Passando o parâmetro para o relatório
        parametros.put("rdi", Integer.parseInt(txtRDI.getText()));//Passando o valor de um JtextField para o relatório como parâmetro
        
        //Executa o relatório
        JasperPrint impressao = null;
        try {
            impressao = JasperFillManager.fillReport(relat, parametros, conn);
        } catch (JRException ex) {
            Logger.getLogger(formRdi.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        //Exibe o relatório
        JasperViewer viewer = new JasperViewer(impressao, false);
        viewer.setTitle("RDI - Relatório de Divergência de Inventário");
        viewer.setExtendedState(Frame.MAXIMIZED_BOTH);
        viewer.setVisible(true);
    }

Agora vem outra dúvida, estou rodando na minha máquina, porem este aplicativo irá rodar em várias máquinas então o que eu faço com o caminho do relatório?
Reparem que estou passando o meu caminho: “C:\Users\Fabio Argenton\Desktop\Nova RDI - Java\RDI\src\br\com\rdi\report\rdiReport.jasper” mas quando eu instalar em outra máquina de outro usuário vai dar pau ai, será que vocês podem me ajudar.

Ziguifrid

Deixa alguma máquina com ip fixo e coloca o caminho.

JasperReport report = JasperCompileManager.compileReport("//192.168.0.2/Alunos/FolhaChamada/FC1.jrxml");
fabio.argenton

Solução:

//Metodo para Ireport
    public void rdiReport() throws JRException {

        String relat = "./src/br/com/rdi/report/rdiReport.jasper";
        String logo = "./src/br/com/rdi/imagem/LogoDHL.jpg";
        HashMap parametros = new HashMap();
        Connection conn = ConnectionMySQL.getConnection();

        //Passando o parâmetro para o relatório
        parametros.put("rdi", Integer.parseInt(txtRDI.getText()));
        parametros.put("logo", logo);

        //Executa o relatório
        JasperPrint impressao = null;
        try {
            impressao = JasperFillManager.fillReport(relat, parametros, conn);
        } catch (JRException ex) {
            Logger.getLogger(formRdi.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Exibe o relatório
        JasperViewer viewer = new JasperViewer(impressao, false);
        //viewer.setTitle("RDI - Relatório de Divergência de Inventário");
        viewer.setExtendedState(Frame.MAXIMIZED_BOTH);
        viewer.setVisible(true);
    }

//Botao imprimir (chamando o metodo)
private void btnImprimirActionPerformed(java.awt.event.ActionEvent evt) {                                            
        try {
            rdiReport();
        } catch (JRException ex) {
            Logger.getLogger(formRdi.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Agora é que vem a solução, quando voce gera o .jar, navegue até a pasta onde encontra-se seu projeto e copie a pasta onde tem os ireport e cole na pasta de distribuição do seu .jar, caso esteja usando imagens, mesmo procedimento copie a pasta e cole na pasta de distribuição.

Criado 26 de setembro de 2013
Ultima resposta 2 de nov. de 2013
Respostas 6
Participantes 3