Relatório em tempo de execução - iReport [RESOLVIDO]

9 respostas
fredsilva.sistemas

Olá galera!
Tô querendo implementar um relatório, mas não tenho idéia de como fazê-lo.
É o seguinte:
Tenho um JFrame que tem os itens de um pedido contidos em um JTable e o código deste pedido contido em um JTextField, gostaria de passar para o relatório no iReport este código e para um sub relatório os itens que estão na JTable.

OBS: Uso o iReport 3.5.2 e o NetBeans 6.5

O que devo fazer na aplicação e no iReport???

Agradeço a ajuda!
T+

9 Respostas

C

Boa tarde

Então, tem uma apostila bem legal de jasper nesse site http://www.integrator.com.br entre e faça o seu cadastro, no setor de downloads tem duas apostilas que fala sobre como desenvolver relatórios com ireport, e também explica como fazer sua aplicação java (web ou desktop) chamar o relatorio feito em jasper.

Falou.

thiagocg

Olá, fredsilva.sistemas!!
Bom cara, se eu entendi bem o que vc precisa não vejo o porque de utilizar um subrelatorio, sendo que vc pode passar os dados sobre o pedido como parametros e a lista de itens em um List setando ele no relatorio atraves do JRBeanCollectionDataSource.

Segue um link onde tem um tutorial muito bom sobre como utilizar o JrBeanCollectionDataSource e mais dicas sobre ireport!

http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/

[]'s

fredsilva.sistemas

thiagocg:
Olá, fredsilva.sistemas!!
Bom cara, se eu entendi bem o que vc precisa não vejo o porque de utilizar um subrelatorio, sendo que vc pode passar os dados sobre o pedido como parametros e a lista de itens em um List setando ele no relatorio atraves do JRBeanCollectionDataSource.

Segue um link onde tem um tutorial muito bom sobre como utilizar o JrBeanCollectionDataSource e mais dicas sobre ireport!

http://www.furutani.com.br/2009/02/usando-o-jrbeancollectiondatasource/

[]'s

Tô testando o exemplo do tutorial, mas tá dando o seguinte erro:

xception in thread main java.lang.NullPointerException

at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)

at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)

at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)

at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)

at java.io.ObjectInputStream.(ObjectInputStream.java:280)

at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.(ContextClassLoaderObjectInputStream.java:57)

at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:197)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:607)

at admin.model.Inicio.exibirRelatorio(Inicio.java:39)

at admin.model.Inicio.main(Inicio.java:91)

Java Result: 1

O código da Classe:

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;

public class Inicio {

    public void exibirRelatorio() {
        // Caminho do .jasper do relatorio
        String caminhoRelJasper = "Livros.jasper";

        // Lista com beans
        List listaLivros = getLivros();

        // Stream com o .jasper
        InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
        
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);

        // Parametros do relatorios
        Map parametros = new HashMap();

        JasperPrint impressao = null;
        try {
            impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
            JasperViewer viewer = new JasperViewer(impressao, true);
            viewer.setVisible(true);

        } catch (JRException e) {
            System.out.println(e.getMessage());
        }

    }

    public List getLivros() {
        List listaLivros = new ArrayList();
        Livro livro = new Livro();

        livro.setTitulo("Use a cabeça! Padrões de Projeto ? Design Patterns");
        livro.setAutor("Freeman, Eric / Freeman, Elisabeth");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Alta Books");
        livro
                .setDescricao("Como você sabe que não quer reinventar a roda (ou, "
                        + "pior, um pneu furado), "
                        + "então você busca padrões de projetos");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Entendendo e Dominando o Linux");
        livro.setAutor("Morimoto, Carlos");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Digerati");
        livro
                .setDescricao("Como o nome diz, este livro é uma obra destinada a "
                        + "todos aqueles que "
                        + "pretendem conhecer na prática e em detalhes os "
                        + "principais recursos oferecidos pelo Linux");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Guia de Certificação em Java ? Exame CX-310-035");
        livro.setAutor("Pereira, Rafael");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Ciência Moderna");
        livro.setDescricao("Este Guia de Certificação em Java é um livro "
                + "fundamental para preparar os"
                + " candidatos ao exame de programador Java da Sun, "
                + "a primeira e mais "
                + "requisitada certificação desta tecnologia.");
        listaLivros.add(livro);

        return listaLivros;
    }

    public static void main(String[] args) {
        new Inicio().exibirRelatorio();
    }
}

Alguém sabe o que está errado?
T+

thiagocg

Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?

fredsilva.sistemas

thiagocg:
Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?

Valeu thiagocg!
Vou acetar isso aqui e depois posto o resultado.
T+

fredsilva.sistemas

thiagocg:
Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?

E thiagocg, coloquei o relatório dentro do projeto e ainda assim não deu certo!
Acho que pode ser alguma coisa quanto aos parâmetros do iReport, pois eu adicionei os TextFields, mas não entendi como ele vai comunicar com a minha aplicação! :frowning:

Se alguém tiver alguma idéia! Eu tô precisando disso para finalizar o meu sistema aqui!
Obrigado a todos!
T+

wamarra

Ola fre!!!

de uma olhada nesse tutorial. Pode lhe ajudar:

http://www.guj.com.br/article.show.logic?id=151

espero q ajude

[]'s

fredsilva.sistemas

Olá Galera!
Neste tutorial que o Wesley Marra passou tem um exemplo bem fácil de fazer passando como parâmetro um ResultSet.
Por enquanto ele resolve o meu problema, mas se alguém tiver formas melhores de fazer. Posta aí!
Mais uma vez agradeço a todos pela ajuda!
T+

fredsilva.sistemas

thiagocg:
Vc debugou? Ta dando erro nessa linha né?

InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);

Se for isso, é pq ele não esta achando o caminho onde vc salvou o seu .jasper, eu sempre crio uma pasta no projeto onde ficam todos os relatorios, dai sempre passo no caminho essa minha pasta.

Sera esse seu problema?

Consegui resolver aqui Thiago! Ele não conseguia achar o relatório porque estava com problema nas seguites linhas:

impressao = JasperFillManager.fillReport(relJasper, parametros, ds);   
JasperViewer viewer = new JasperViewer(impressao, true);

então eu substitui por:

String jasperPrint = JasperFillManager.fillReportToFile( "Livros.jasper", parametros, ds );
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);

E acrescentei:

viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);

Ficando assim:

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
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.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.view.JasperViewer;

public class Inicio {

    public void exibirRelatorio() {
        // Caminho do .jasper do relatorio
        String caminhoRelJasper = "Livros.jasper";

        // Lista com beans
        List listaLivros = getLivros();

        // Stream com o .jasper
        InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
        
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);

        // Parametros do relatorios
        Map parametros = new HashMap();

        JasperPrint impressao = null;
        try {

            String jasperPrint = JasperFillManager.fillReportToFile( "Livros.jasper", parametros, ds );
            JasperViewer viewer = new JasperViewer(jasperPrint, false, false);// O segundo false serve para que a janela do relatório fique: DISPOSE_ON_CLOSE
            viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
            viewer.setVisible(true);

        } catch (JRException e) {
            System.out.println(e.getMessage());
        }

    }

    public List getLivros() {
        List listaLivros = new ArrayList();
        Livro livro = new Livro();

        livro.setTitulo("Use a cabeça! Padrões de Projeto ? Design Patterns");
        livro.setAutor("Freeman, Eric / Freeman, Elisabeth");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Alta Books");
        livro
                .setDescricao("Como você sabe que não quer reinventar a roda (ou, "
                        + "pior, um pneu furado), "
                        + "então você busca padrões de projetos");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Entendendo e Dominando o Linux");
        livro.setAutor("Morimoto, Carlos");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Digerati");
        livro
                .setDescricao("Como o nome diz, este livro é uma obra destinada a "
                        + "todos aqueles que "
                        + "pretendem conhecer na prática e em detalhes os "
                        + "principais recursos oferecidos pelo Linux");
        listaLivros.add(livro);

        livro = new Livro();
        livro.setTitulo("Guia de Certificação em Java ? Exame CX-310-035");
        livro.setAutor("Pereira, Rafael");
        livro.setIsbn("[telefone removido]");
        livro.setEditora("Ciência Moderna");
        livro.setDescricao("Este Guia de Certificação em Java é um livro "
                + "fundamental para preparar os"
                + " candidatos ao exame de programador Java da Sun, "
                + "a primeira e mais "
                + "requisitada certificação desta tecnologia.");
        listaLivros.add(livro);

        return listaLivros;
    }

    public static void main(String[] args) {
        new Inicio().exibirRelatorio();
    }
}

Valeu pela força!
T+

Criado 17 de agosto de 2009
Ultima resposta 21 de ago. de 2009
Respostas 9
Participantes 4