Como chamar o Relatório do iReport num Frame no NetBeans

14 respostas
L

Boa tar de amigos,

Criei um relatório no iReport e agora preciso que quando o usuário clique no gerar relatório seja apresentado o relatório do iReport(doc, ou xls, ou pdf ou etc…), alguém tem alguma idéia que eu possa usar?

Grande Abç

Logan

14 Respostas

O

Boas loganwlogan.

Como não deste mais pormenores vou supor que o teu relatorio é um simples relatório, sem ligação a bases de dados.

Então, no teu frame, chamas uma classe, por exemplo, que irá tratar do relatório.

//supondo que o teu ficheiro teste.jasper esteja dentro da tiua aplicação URL arquivo = getClass().getResource("teste.jasper"); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo); //aqui, como não vais passar parâmetros para dentro do relatório, e porque estou a assumir que não tenhas ligação com base de dados, os dois ultimos parametros são nulos JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null,null); //isto mostra.te o viewer, penso que é a melhor maneira, pois assim a pessoa escolhe o formato em que quer gravar, e o sitio onde gravar JasperViewer jrviewer = new JasperViewer(jasperPrint, false); jrviewer.setVisible(true);

Bem, não sei se era isto, senão manda mais pormenores.
Boa sorte ai :slight_smile:

L

Valeu Pela ajuda, funcionou direitinho!!!

[]´s

Logan

M

tentei fazer como o exemplo acima porem deu erro na 5º linha... "reference to fillreport is ambiguous..."

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

import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;

/**
 *
 * @author Administrador
 */
public class StatusCliente {

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

        Class.forName(driver);
        Connection con = DriverManager.getConnection(url, user, password);
        return con;
    }

    public static void main(String[] args) throws JRException, Exception {
        new StatusCliente().geraRelatorio();
    }

    private void geraRelatorio() throws JRException {
        //supondo que o teu ficheiro teste.jasper esteja dentro da tiua aplicação
        URL arquivo = getClass().getResource("C:\\Documents and Settings\\Administrador\\Meus documentos\\projetos\\distribuidora\\src\\relatorio\\status\\StatusCliente.jasper");
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo);
        //aqui, como não vais passar parâmetros para dentro do relatório, e porque estou a assumir que não tenhas ligação com base de dados, os dois ultimos parametros são nulos
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, null);
        //isto mostra.te o viewer, penso que é a melhor maneira, pois assim a pessoa escolhe o formato em que quer gravar, e o sitio onde gravar
        JasperViewer jrviewer = new JasperViewer(jasperPrint, false);
        jrviewer.setVisible(true);
    }
}
C
maxwellmargotti:
tentei fazer como o exemplo acima porem deu erro na 5º linha... "reference to fillreport is ambiguous..."
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package relatorio.status;

import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.*;

/**
 *
 * @author Administrador
 */
public class StatusCliente {

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

        Class.forName(driver);
        Connection con = DriverManager.getConnection(url, user, password);
        return con;
    }

    public static void main(String[] args) throws JRException, Exception {
        new StatusCliente().geraRelatorio();
    }

    private void geraRelatorio() throws JRException {
        //supondo que o teu ficheiro teste.jasper esteja dentro da tiua aplicação
        URL arquivo = getClass().getResource("C:\\Documents and Settings\\Administrador\\Meus documentos\\projetos\\distribuidora\\src\\relatorio\\status\\StatusCliente.jasper");
        JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo);
        //aqui, como não vais passar parâmetros para dentro do relatório, e porque estou a assumir que não tenhas ligação com base de dados, os dois ultimos parametros são nulos
        JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, null);
        //isto mostra.te o viewer, penso que é a melhor maneira, pois assim a pessoa escolhe o formato em que quer gravar, e o sitio onde gravar
        JasperViewer jrviewer = new JasperViewer(jasperPrint, false);
        jrviewer.setVisible(true);
    }
}

Kra, passei pelo mesmo problema, mas consegui solucionar.
É o seguinte:
Existem vários métodos fillReport() e como seus parâmetros são objetos, se vc passar null o java não vai conseguir identificar a qual dos métodos vc está se referindo.
Então basta instanciar um dos objetos e passá-lo, mesmo q não vá ser usado, por exemplo.

URL arquivo = getClass().getResource("..\\RelFormulas.jasper");

        HashMap map = new HashMap();
        try {
            JasperReport jr = (JasperReport) JRLoader.loadObject(arquivo);
            JasperPrint jp = JasperFillManager.fillReport(jr, map,ConnectionFactory.conn);
            JasperViewer jv = new JasperViewer(jp, false);

            jv.setVisible(true);

Nesse caso eu não uso o ojeto map, mas passo por parâmetro simplesmente para identificar o método fillReport() correto.
Espero ter ajudado!

Abraço.

W
Bom dia estou tendo problemas com os

import net.sf.jasperreports.engine.<em>;

import net.sf.jasperreports.engine.util.JRLoader;

import net.sf.jasperreports.view.</em>;

não achei esses pacotes no ireport

S

Olá amigo

adicione o jar que está nesta pasta:

jasperreports-3.7.2.jar

iReport-3.7.2/ireport/modules/ext

Dependendo da versão que esteja utilizando.

Silvio Guedes

W

Muito obrigado Silvio agora funiconou certinho

W

Boa Noite.
Coloquei esse Codigo e está dando o seguinte erro:

"reference to fillReport is Ambiguou, both method fillReport(net.sf.jasperreport.engine.JasperReport.java.util.Map.java.sql.Connection) in net.sf.jasperreports.engine.JasperFillManager and method fillReport(net.sf.jasperreport.engine.JasperReport.java.util.Map,net.sf.jasperreport.engineJRDataSource) in net.sf.jasperreport.engine.JasperFillManager match

//supondo que o teu ficheiro teste.jasper esteja dentro da tiua aplicação

URL arquivo = getClass().getResource(C:\Documents and Settings\Administrador\Meus documentos\projetos\distribuidora\src\relatorio\status\StatusCliente.jasper);

JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo);

//aqui, como não vais passar parâmetros para dentro do relatório, e porque estou a assumir que não tenhas ligação com base de dados, os dois ultimos parametros são nulos

JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, null);

//isto mostra.te o viewer, penso que é a melhor maneira, pois assim a pessoa escolhe o formato em que quer gravar, e o sitio onde gravar

JasperViewer jrviewer = new JasperViewer(jasperPrint, false);

jrviewer.setVisible(true);
P
ERRO - O Ant está mal-configurado e não pode ser executado.

java.lang.IllegalStateException: Wrong class loader is finding Ant: sun.misc.Launcher$ExtClassLoader@757aef

at org.apache.tools.ant.module.bridge.AntBridge.createAntInstance(AntBridge.java:291)

at org.apache.tools.ant.module.bridge.AntBridge.getAntInstance(AntBridge.java:267)

at org.apache.tools.ant.module.bridge.AntBridge.getInterface(AntBridge.java:256)

at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:497)

at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:151)

alguem sabe dizer ao que se refere o codigo é esse:

package relatorio;

import java.util.HashMap;

import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JRResultSetDataSource;

import net.sf.jasperreports.engine.JasperFillManager;

import net.sf.jasperreports.engine.JasperPrint;

import net.sf.jasperreports.view.JasperViewer;

import utilitarios.conexao;

public class relat {

conexao con = new conexao();
public relat() {

try

{

con.conecta();

con.executeSQL(“SELECT * from cidade”);

JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset);

JasperPrint jasperPrint = JasperFillManager.fillReport(

“relatorios/report1.jasper”, new HashMap(), jrRS);

JasperViewer.viewReport(jasperPrint);

} catch (Exception erro){

JOptionPane.showMessageDialog(null,“deu erro =”+erro);

}

}
public static void main (String args[])

{

new relat();

}

}

estou perdida se alguem puder ajudar

S

Olá

use as tag’s para formatar seu código fonte:

package relatorio; 

import java.util.HashMap; 
import javax.swing.JOptionPane; 
import net.sf.jasperreports.engine.JRResultSetDataSource; 
import net.sf.jasperreports.engine.JasperFillManager; 
import net.sf.jasperreports.engine.JasperPrint; 
import net.sf.jasperreports.view.JasperViewer; 
import utilitarios.conexao; 



public class relat { 


conexao con = new conexao(); 


public relat() { 
try 
{ 
con.conecta(); 
con.executeSQL("SELECT * from cidade"); 
JRResultSetDataSource jrRS = new JRResultSetDataSource(con.resultset); 
JasperPrint jasperPrint = JasperFillManager.fillReport( 
"relatorios/report1.jasper", new HashMap(), jrRS); 
JasperViewer.viewReport(jasperPrint); 
} catch (Exception erro){ 
JOptionPane.showMessageDialog(null,"deu erro ="+erro); 
} 
} 

public static void main (String args[]) 
{ 
new relat(); 
} 
}

Silvio Guedes

D

Ora viva…

Alquem poderia postar o ficheiro utilitario.conexao ???

Tenho ‘partido muita pedra’ para tentar efectuar o preview de um report.
Penso que só me falta este ficheiro.

Brigadão
Peter

F

alguém sabe me dizer como salvar direto o arquivo em PDF, sem abrir o viewer?

já usei o jasper na web, usando ZK, mas aqui os métodos são diferentes

grato

F

Respondendo minha própria pergunta, procurei na documentação do ireport e achei a solução pra mim:

quero salvar direto o arquivo, pois vou enviar o pdf direto por email

no meu projeto utilizei as seguintes libs:
commons-collections.jar
commons-digester-1.7.jar
commons-logging.jar
groovy.jar
itext.jar
jasperreports-3.7.4.jar

a propósito, esse tópico ja fez uns aniversários né :lol:

abraço pessoal

D

ondreia:
Boas loganwlogan.

Como não deste mais pormenores vou supor que o teu relatorio é um simples relatório, sem ligação a bases de dados.

Então, no teu frame, chamas uma classe, por exemplo, que irá tratar do relatório.

//supondo que o teu ficheiro teste.jasper esteja dentro da tiua aplicação URL arquivo = getClass().getResource("teste.jasper"); JasperReport jasperReport = (JasperReport) JRLoader.loadObject(arquivo); //aqui, como não vais passar parâmetros para dentro do relatório, e porque estou a assumir que não tenhas ligação com base de dados, os dois ultimos parametros são nulos JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null,null); //isto mostra.te o viewer, penso que é a melhor maneira, pois assim a pessoa escolhe o formato em que quer gravar, e o sitio onde gravar JasperViewer jrviewer = new JasperViewer(jasperPrint, false); jrviewer.setVisible(true);

Bem, não sei se era isto, senão manda mais pormenores.
Boa sorte ai :slight_smile:

Muito boa resposta, porém segue um artigo para fazer isso mais orientado a objeto.

Criado 18 de novembro de 2006
Ultima resposta 20 de fev. de 2012
Respostas 14
Participantes 10