Erro iReport + NetBeans - relatório em branco

13 respostas
A

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

A

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

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

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!

A

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

L

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

A

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

A

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

C

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.

A

vlw amigo…

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

  • tenho certeza q to fazendo POG… rsrs
L

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!

A

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”
V

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?

J

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