Especificar Caminho para o relatorio [RESOLVIDO]

31 respostas
D

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

P

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

Fico no aguardo…

D

estão na pasta src

P

É um pojeto WEB?

D

desktop, feito no netbeans

P

Tenta:

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

ou

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

D

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
M

[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 ?

D

Não adiantou, continua o mesmo erro

7

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…

R

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.

D

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

R

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

D

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!

R

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

D

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

R

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.

D

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

R

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

D

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)
R

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

M

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]

D

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

R

Aqui tudo oq vc precisa

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

Ronaldo.

D

Origada vou olhar

M

Tutorial JasperReports - IReports

Document Views

D

Obrigada deu certo

D

posta ai… pra gente ver como ficou

D
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);
        }
    }
}
R
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;
      }
R

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());

        }

    }
}
K
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