Erro iReport + NetBeans - relatório em branco

13 respostas
alandiniz

Já procurei esse erro aqui no GUJ e tem vários tópicos, porém em nenhum deles consegui resolver meu problema.

1- uso NetBeans com o plug-in do iReport. iReport-3.7.6-plugin
2- no netbeans eu tenho um relatório com apenas um Static Text, só pra teste…
3- no netbeans eu tenho essa classe com o método:

import java.io.IOException;
import java.io.InputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JasperRunManager;

/**
 *
 * @author Alan
 */
@ManagedBean
public class RelatorioBean {

    public void relatorioUsuario() {

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

        //pega o arquivo .jasper
        
        InputStream reportStream = context.getExternalContext().getResourceAsStream("relatorios/usuarios.jasper");
        int a = 0;
        try {
            a = reportStream.read();
        } catch (IOException ex) {
            ex.printStackTrace();
        } finally {
//só pra ve se ta lendo o relatório
            System.out.println("tamanho:" + a);
        }
        
        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");

        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null);
    //        servletOutputStream.flush();
        } catch (Exception e){
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }
}

4- quando eu chamo esse método ai, aparece o erro:

tamanho:172
erro:
net.sf.jasperreports.engine.JRException: Error loading object from InputStream

5- no jsf, xhtml, aparece o download do arquivo, mais ele vem com 0kb
6- em anexo ta uma print das libs do projeto… não foi preciso usar as libs do ireport, acredito que ja veio com o plug-in…

alguem sabe oq to fazendo de errado?
se é meu código, ou problema com lib?


13 Respostas

alandiniz

huaehw sempre assim, quando eu vejo que não tem + solução, depois de ontem o dia intero e a noite intera mexendo nisso, resolvi posta aqui agora...
e consegui resolve parcialmente....

ele ta gerando agora um relatorio em branco com 1KB

se alguem souber oq to faezendo de errado posta ai por favor...

segue a modificação no método:

public void relatorioUsuario() {

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();

        //pega o arquivo .jasper
        
        InputStream reportStream = context.getExternalContext().getResourceAsStream("relatorios/usuarios.jasper");
        
        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");

        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null);
    //        servletOutputStream.flush();
        } catch (Exception e){
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }
alandiniz

e ai alguem tem idéia doq seja?

estou com um relatório com apenas um static text, pra teste... e ta saindo em branco o pdf :(

meu método ta assim:

public void relatorioUsuario() {

        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) 
                context.getExternalContext().getResponse();

        //pega o arquivo .jasper
        InputStream reportStream =
                context.getExternalContext().getResourceAsStream("/relatorios/usuarios.jasper");

        //envia a resposta com o MIME Type PDF
        response.setContentType("application/pdf");

        //força a abertura do download no navegador
        response.setHeader("Content-disposition", "attachment;filename=relatorio.pdf");
        try (ServletOutputStream servletOutputStream = response.getOutputStream()) {
            JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, new JRBeanCollectionDataSource(null, false));
            servletOutputStream.flush();
        } catch (Exception e) {
            System.out.println("erro: ");
            System.out.println(e);
        }
        context.responseComplete();
    }
leoramos

Seu dataSource está vazio. Muito provavelmente teu relatório está com a propriedade “When No Data” setada para “Blank Page”.
O Jasper precisa de um dataSource preenchido; caso contrário, o máximo que você pode fazer é imprimir tudo, exceto o detail.
Abraço!

alandiniz

cara deu certo :smiley:
vc eh um gênio hauauha
vlw :smiley:

agora ta pelo menos vindo como “null”, tpow só falta passa os parâmetros :smiley:

agora eh tetinha :smiley:

vlw em :smiley:

antigamente tava vindo a página toda em branco… sem nada… nem os risco que coloquei pra testa hauhaha

leoramos

aheuieahiuehauiae
Deu pra rir com a tua resposta aqui! haha
Valeu, cara, boa sorte ae! Qualquer coisa, só postar.
Abraço!

alandiniz

hauwehu vlw mesmo, agora ta aparecendo pelo menos o titulo

  • os campos estão vindo “null”

uma pergunta, eu tenho q passa uma conexão pro relatorio?

pq assim, quando eu clico em “preview” no relatório, aparece os dados certim…
… porém quando eu chamo ele no meu xhtml, ele vem como “null” os dados…
eu tenho q passar uma conexão?

pq na verdade, eu não vo precisa passa parâmetro algum…

basicamente esse “relatório”, na verdade, só vai pega uma tabela (entidade) e faze um select * from tabela

alandiniz

pelo q eu pesquisei na internet ta faltando eu passa a conexão do banco… seria isso mesmo??

o ruim é que eu só to axando pra desktop (swing) e ta meio estranho… e com dao… to usando hibernate, será que tem um jeito mais fácil do que passar a string do banco, login, senha e talz, td denovo?

ahh pelo q vi eh aki
eu tenho q passa uma connection

JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, null, con);

eu só nao sei como fazer essa linha:
usando o método correto do hibernate

Connection con = (Connection) new Persistencia().getEntityManagerFactory();

CharlesAlves

alandiniz já vi que você é iniciante no jasperReport, dá uma olhada nesse tutorial aqui, ele é muito bom também trabalha com o plugin do Ireport no Netbeans e explica passo a passo como criar os relatórios. Ele foi de grande ajuda quando iniciei na criação de relatórios.

alandiniz

vlw amigo…

consegui fazer funcionar… passei a Connection e funciono :smiley:

  • tenho certeza q to fazendo POG… rsrs
leoramos

Alan, o negócio é que tua query está fixa dentro do layout; então ele vai mesmo precisar de uma conexão pra poder funcionar.
Se tu tá usando hibernate, uma boa opção é fazer a busca com ele e usar um JRBeanCollectionDataSource. E não tem nada de POG nisso, fica frio! hehe
Abraço!

alandiniz

eh intão, eu achei que os dados da configuração ficava no relatório… mais nao fica nao rsrs…
ai eu passei a conexão deu certo…

  • agora ta filé, ja da pra apresenta o TCC com um “relatório” q faz “select * from entidade”
Victor_Almeida

leoramos:
Seu dataSource está vazio. Muito provavelmente teu relatório está com a propriedade “When No Data” setada para “Blank Page”.
O Jasper precisa de um dataSource preenchido; caso contrário, o máximo que você pode fazer é imprimir tudo, exceto o detail.
Abraço!

Fala leoramos,

poderia me dizer onde eu configuro essa propriedade?

Jose_Deus

O que devo fazer para priencher o dataSoucer

Criado 30 de outubro de 2011
Ultima resposta 28 de nov. de 2017
Respostas 13
Participantes 5