Resolvido: IReport em Aplicação Desktop

6 respostas
F

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

S

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

F

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.

Z

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

}
F

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.

Z

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

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

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