Especificar Caminho para o relatorio [RESOLVIDO]

31 respostas
Daianne

Criei um relatorio no ireport, mas não sei como especificar o caminho

public void gerarRelatorioAlunos(String layout) throws JRException, ClassNotFoundException, SQLException {
        JasperDesign desenho = JRXmlLoader.load( layout );
        JasperReport relatorio = JasperCompileManager.compileReport( desenho );
        Connection con=conexao.pegarConexao();
       Statement stm = con.createStatement();
       String query = "select * from aluno";
       ResultSet rs = stm.executeQuery( query );
       JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

       Map parametros = new HashMap();
       JasperPrint impressao = JasperFillManager.fillReport( relatorio , parametros, jrRS );
       JasperViewer viewer = new JasperViewer( impressao , true );
       viewer.show();

    }

este metodo gera o relatorio

este é para exibir

public static void main(String[] args) {
        try {
            new GerarRelatorios().gerarRelatorioAlunos("RelatorioAlunos.jasper");
            
        } catch (JRException ex) {
            ex.printStackTrace();
        } catch (ClassNotFoundException ex) {
             ex.printStackTrace();
        } catch (SQLException ex) {
           ex.printStackTrace();

        }

    }

Alguem poderia me ajudar?

31 Respostas

Paezani

Os arquivos .jasper estão na asta raiz de seu projeto?
Senão estverem, tente colocar…

Fico no aguardo…

Daianne

estão na pasta src

Paezani

É um pojeto WEB?

Daianne

desktop, feito no netbeans

Paezani

Tenta:

new GerarRelatorios().gerarRelatorioAlunos("…/RelatorioAlunos.jasper");

ou

new GerarRelatorios().gerarRelatorioAlunos(“src/RelatorioAlunos.jasper”);

Daianne

aparece este erro

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: src\RelatorioAlunos.jasper (O sistema não pode encontrar o arquivo especificado)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:172)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
        at autoescola.modelo.GerarRelatorios.gerarRelatorioAlunos(GerarRelatorios.java:56)
        at autoescola.modelo.GerarRelatorios.main(GerarRelatorios.java:93)
Caused by: java.io.FileNotFoundException: src\RelatorioAlunos.jasper (O sistema não pode encontrar o arquivo especificado)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:167)
        ... 3 more
Metaleiro

[color=darkblue]Sei que o seu projeto é Desktop, mas é melhor por enquanto você nem colocar na src, coloca realmente na raiz do projeto, exemplo seu projeto ProjectIReport, coloca nessa pasta e roda como \jasper.jrxml, dai acredito que funcione, de qualquer forma tem esse tópico para ajudar : [/color]

[RESOLVIDO] Jasper erro java.io.FileNotFoundException ?

Daianne

Não adiantou, continua o mesmo erro

71C4700

o caminho de seu relatorio depende da forma com que voce ira capturar os inputStream pra gera-lo.

Imagine que a classe que gera o relatorio esta na mesma pasta do seu arquivo .jrxml,pra encontra-lo,poderia captura o arquivo e gerar o InputStream,:

String path = "Relatorio.jrxml"; inputStream input = this.getResourceAsStream(path); JasperDesign desenho = JRXmlLoader.load(input, map,ClasseJRDataSource );

Quando chegar em casa procuro um exemplo melhor e posto aqui…
Att…

rrigoni

Se o arquivo .jasper estiver juntamente com a classe no mesmo pacote use como indicado acime.

this.getClass().getResourceAsStream("path");

caso esteja no src do seu projeto utilize assim:

this.getClass().getClassLoader().getResourceAsStream("path");

Ronaldo.

Daianne

meu codigo ta assim

public JasperPrint gerarRelatorioAlunos() throws Exception{
         JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "RelatorioAlunos.jasper";
          InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,con);
         }catch (JRException e){
             e.printStackTrace();
         }
         return rel;

    }

  public static void main(String[] args) {
        try {
            new GerarRelatorios().gerarRelatorioAlunos();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}

mas não aparece o relatorio, e não mostra o erro, e o meu arquivo.jasper esta na pasta src

rrigoni

Você possue o jasperprint mas precisa do JasperViewer para visualizar.

tenta assim

public JasperPrint gerarRelatorioAlunos() throws Exception{
         JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "RelatorioAlunos.jasper";
          InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,con);
            JasperViewer.viewReport(rel,false); 
         }catch (JRException e){
             e.printStackTrace();
         }
         return rel;

    }

  public static void main(String[] args) {
        try {
            new GerarRelatorios().gerarRelatorioAlunos();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}

Se precisar exportar o relatório direto para algum arquivo em PDF XLS ou algum outro formato olhe a classe JasperExportManager.exportReportToxxxxFie().

Ronaldo

Daianne

Obrigada, apareceu, :lol:
Mais uma perguntinha, eu posso usar esse método para que o usuario insira as informações no relatorio?
O que teria de mudar?
abraços!

rrigoni

Explique esta parte " Que o usuário insira as informações no relatório" seriam alguma personalização?
Se for algum dado em expec´ifico para cada usuário vc pode soliticar esta informação antes de gerar o relatório, e passar como parâmetro no map.
Explique melhor oq precisa para que possamos ajudar.

Ronaldo

Daianne

É um relatorio de alunos, e quero que o usuario,
possa inserir os dados do aluno, como o nome, por exemplo.

rrigoni

Ok,
Mas estes dados não vem da sua base de dados?
Não, não será possível inserir dados sem gerar o relatorio novamente, tendo em vista que o datasource é carregado antes do preenchimento do relatório.
Sugiro então vc exportar este relatório para xls e assim o usuário preencher os dados restantes.

Ronaldo.

Daianne

Ta gerando o relatorio normalmente, mas não mostra os alunos cadastrados, vc sabe porque?

rrigoni

Você configurou uma query que retorna dados na criação do seu .jasper?
Execute esta query diretamente em banco, pois os dados do relatório é preenchido com o datasource.

Ronaldo

Daianne

Fiz dessa forma mas não ta dando certo

public JasperPrint gerarRelatorioAlunosExibir() throws Exception{
         JasperPrint rel=null;

         try{
             Connection con=conexao.pegarConexao();
             Statement stm = con.createStatement();
             String path = "RelatorioAlunos.jasper";
             String query = "select * from aluno";
             ResultSet rs = stm.executeQuery( query );
             JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

           HashMap map= new HashMap();
          
          InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,jrRS);
         JasperViewer.viewReport(rel,false);
         }catch (JRException e){
             e.printStackTrace();
         }
         return rel;
net.sf.jasperreports.engine.JRException: Unknown column name : aluno_codigo
        at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:359)
        at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:116)
        at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:787)
        at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:751)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1422)
        at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:801)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:582)
        at autoescola.modelo.GerarRelatorios.gerarRelatorioAlunosExibir(GerarRelatorios.java:127)
        at autoescola.modelo.GerarRelatorios.main(GerarRelatorios.java:98)
rrigoni

Na sua query quando vc gera o relatorio pelo Ireport, repare que os nomes do resultset nome_aluno deve ser os mesmos nomes q em seu relatório.
Recomento vc usar um wizard do ireport pra entender.

Ronaldo

Metaleiro

Daianne:
Fiz dessa forma mas não ta dando certo

net.sf.jasperreports.engine.JRException: Unknown column name : aluno_codigo at net.sf.jasperreports.engine.JRResultSetDataSource.getColumnIndex(JRResultSetDataSource.java:359) at net.sf.jasperreports.engine.JRResultSetDataSource.getFieldValue(JRResultSetDataSource.java:116) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:787) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:751) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1422) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:879) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:801) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:582) at autoescola.modelo.GerarRelatorios.gerarRelatorioAlunosExibir(GerarRelatorios.java:127) at autoescola.modelo.GerarRelatorios.main(GerarRelatorios.java:98)

[color=darkblue]Ou não está retornando o campo aluno_codigo por não tê-lo em sua base ou ele pode estar com outro nome, mas de qualquer forma tem que ver se o campo Field no .jasper está com esse nome e esse campo está obtendo retorno [/color]

Daianne

Não to conseguindo, Alguém poderia me mostrar um exemplo?

rrigoni

Aqui tudo oq vc precisa

http://jasperreports.sourceforge.net/guide/index.html

Ronaldo.

Daianne

Origada vou olhar

Metaleiro

Tutorial JasperReports - IReports

Document Views

Daianne

Obrigada deu certo

dudu_sps

posta ai… pra gente ver como ficou

Daianne
public class GerarRelatorios extends Exception{

    public GerarRelatorios() {}

    public JasperPrint gerarRelatorioAlunos() throws Exception{
         JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "/Relatorios/Alunos.jasper"; 
          InputStream input = this.getClass().getResourceAsStream(path); 
           rel=JasperFillManager.fillReport(input,map,con);
          JasperViewer.viewReport(rel,false);   
         }catch (JRException e){
             e.printStackTrace();
         }
       return rel;
     }

  
      public JasperPrint gerarRelatorioDeTurmas() throws Exception{
          JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "/Relatorios/Turmas.jasper";
          InputStream input = this.getClass().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,con);
         JasperViewer.viewReport(rel,false);
         }catch (JRException e){
             e.printStackTrace();
         }
        return rel;
       }

      public JasperPrint gerarRelatorioAlunosExibir() throws Exception{
         JasperPrint rel=null;

         try{
             Connection con=conexao.pegarConexao();
             Statement stm = con.createStatement();
             String path = "Alunos.jasper";
             String query = "Select * FROM aluno WHERE aluno=$P{aluno}";
             ResultSet rs = stm.executeQuery( query );
             JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

           HashMap map= new HashMap();
          
          InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,jrRS);
         JasperViewer.viewReport(rel,false);
         }catch (JRException e){
             e.printStackTrace();
         }
         return rel;
      }

      public JasperPrint gerarRelatoriosAlunosPorCodigo(int codigo) throws Exception{
        JasperPrint rel=null;
        try{
            Connection con=conexao.pegarConexao();
           String path =  "src/Relatorios/Alunos.jasper";
            InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
            String query = "select * from aluno where codigo="+codigo;
            Statement s=conexao.pegarConexao().createStatement();
            ResultSet rs=s.executeQuery(query);
            JRResultSetDataSource tst= new JRResultSetDataSource(rs);
            HashMap map= new HashMap();
            map.put("QUERY",con);
            rel=JasperFillManager.fillReport(input,map,tst);
             JasperViewer.viewReport(rel,false);   

        }catch (JRException e){
            e.printStackTrace();
        }
        return rel;
      }

     public String writingFile(StringBuffer strBuff, String path) throws IOException {
         String fName = System.currentTimeMillis() + ".csv";
           try {
             BufferedWriter out = new BufferedWriter(new FileWriter(path + fName));
             out.write(strBuff.toString());
             out.close();
         } catch (IOException e) {
         }
         return fName;
     }

    public static void main(String[] args) {
        try {
            new GerarRelatorios().gerarRelatorioAlunos();
        } catch (Exception ex) {
            Logger.getLogger(GerarRelatorios.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
ronaldosilva937
Olá tenho um problema pra executar um relatório, ele chama o Jasper Viewer mas não mostra o relatório exibe este erro net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Livros.jasper se alguém poder me dar uma ajuda ou me passa alguns tutoriais.
public JasperPrint gerarReportExample02() throws SQLException, ClassNotFoundException{

          JasperPrint rel = null;
       try{
              Connection con = getConnection();
               Map map = new HashMap();
               /* String path = "Livros.jasper";
                File file = new File(path);
                file = file.getAbsoluteFile( );
                String arquivoJasper = file.getPath( );*/

                 String jasper = "Livros.jasper";
                // JasperReport jasper = (JasperReport) JRLoader.loadObject(getClass().getResource("Livros.jasper"));

                //    String path ="Livros.jasper";
                //    InputStream jasper = this.getClass().getClassLoader().getResourceAsStream(path);

                 rel = JasperFillManager.fillReport(jasper, map, con);

          }catch(JRException e){
              e.printStackTrace();

          }
          return rel;
      }
ronaldosilva937

Problema solucionado.
Havia dois tipos de problema não estava conseguindo encontrar o arquivo e o outro erra as versões das libs, a estrutura
do relatório é gerada com ireport 3.7.2

Libs uitlizadas foram:

commons-javaflow-20060411
commons-beanutils-1.8.2
commons-digester-1.7
commons-collections-3.2.1
commons-logging-1.1
iText-5.0.2
groovy-all-1.5.5
jasperreports-3.7.2

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ireportexample02;



import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

/**
 *
 * @author ronaldosil
 */
public class ReportEaxample02 {

   private static  Connection getConnection() throws SQLException, ClassNotFoundException{
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/relatorios";
        String user = "root";
        String pwd = "unifeg";

       Class.forName(driver);
       Connection con = DriverManager.getConnection(url, user, pwd);
       return con;
    }
    public void gerarReportExample02() throws SQLException, ClassNotFoundException{

          Connection con = getConnection();

       Map parameters = new HashMap();

       //Arquivo .jasper foi colocado no mesmo pacote da class
        String path = ("src/ireportexample02/Livros.jasper");
        File file = new File(path);
        file = file.getAbsoluteFile();
        String repStr2 = file.getPath();

        try{

           JasperFillManager.fillReportToFile(repStr2,parameters,con);
            JasperPrint jasperPrint = JasperFillManager.fillReport(repStr2, parameters,con);
            JasperViewer viewer = new JasperViewer(jasperPrint,false);
            viewer.setVisible(true);
       }
        catch(JRException jex){
            System.out.print("JasperException"+jex.getMessage());
        }
        catch(Exception ex){
             System.out.print("-"+ex.getMessage());

        }

    }
}
Kleber-rr
Daianne:
public class GerarRelatorios extends Exception{

    public GerarRelatorios() {}

    public JasperPrint gerarRelatorioAlunos() throws Exception{
         JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "/Relatorios/Alunos.jasper"; 
          InputStream input = this.getClass().getResourceAsStream(path); 
           rel=JasperFillManager.fillReport(input,map,con);
          JasperViewer.viewReport(rel,false);   
         }catch (JRException e){
             e.printStackTrace();
         }
       return rel;
     }

  
      public JasperPrint gerarRelatorioDeTurmas() throws Exception{
          JasperPrint rel=null;

         try{
           Connection con=conexao.pegarConexao();
           HashMap map= new HashMap();
           String path = "/Relatorios/Turmas.jasper";
          InputStream input = this.getClass().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,con);
         JasperViewer.viewReport(rel,false);
         }catch (JRException e){
             e.printStackTrace();
         }
        return rel;
       }

      public JasperPrint gerarRelatorioAlunosExibir() throws Exception{
         JasperPrint rel=null;

         try{
             Connection con=conexao.pegarConexao();
             Statement stm = con.createStatement();
             String path = "Alunos.jasper";
             String query = "Select * FROM aluno WHERE aluno=$P{aluno}";
             ResultSet rs = stm.executeQuery( query );
             JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

           HashMap map= new HashMap();
          
          InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
           rel=JasperFillManager.fillReport(input,map,jrRS);
         JasperViewer.viewReport(rel,false);
         }catch (JRException e){
             e.printStackTrace();
         }
         return rel;
      }

      public JasperPrint gerarRelatoriosAlunosPorCodigo(int codigo) throws Exception{
        JasperPrint rel=null;
        try{
            Connection con=conexao.pegarConexao();
           String path =  "src/Relatorios/Alunos.jasper";
            InputStream input = this.getClass().getClassLoader().getResourceAsStream(path);
            String query = "select * from aluno where codigo="+codigo;
            Statement s=conexao.pegarConexao().createStatement();
            ResultSet rs=s.executeQuery(query);
            JRResultSetDataSource tst= new JRResultSetDataSource(rs);
            HashMap map= new HashMap();
            map.put("QUERY",con);
            rel=JasperFillManager.fillReport(input,map,tst);
             JasperViewer.viewReport(rel,false);   

        }catch (JRException e){
            e.printStackTrace();
        }
        return rel;
      }

     public String writingFile(StringBuffer strBuff, String path) throws IOException {
         String fName = System.currentTimeMillis() + ".csv";
           try {
             BufferedWriter out = new BufferedWriter(new FileWriter(path + fName));
             out.write(strBuff.toString());
             out.close();
         } catch (IOException e) {
         }
         return fName;
     }

    public static void main(String[] args) {
        try {
            new GerarRelatorios().gerarRelatorioAlunos();
        } catch (Exception ex) {
            Logger.getLogger(GerarRelatorios.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

Oi Daianne, td bem?
Como ficou na tua jsp?? a chamada do teu método:gerarRelatoriosAlunosPorCodigo(int codigo)???
Aguardo.

Criado 9 de julho de 2009
Ultima resposta 6 de jul. de 2010
Respostas 31
Participantes 8