iReport, Detail nao imprime mais (relatorios para web jsf)[Resolvido por gambiarra]

18 respostas
rbroz85

Bom dia amigos...

sei que esse assunto esta bem batido. mas infeslimente nao estou conseguindo resolver sozinhu... e nem com o google... peço encarecidamente a ajuda dos senhores.

entao, mudei de sistema operacial para o ubuntu, peguei todas as minhas coisas (apps. relatorios), baixei o netbeans. o novo ireport_nb, tudo funcionando legal... quando tive a necessidade de editar um relatorio... editei ele... compilei o .jasper e ele nao imprime mais o conteudo do Detail.
OBS.: minha fonte de dados vem sempre da aplicação , usando o JRBeanCollectionDataSource

Sera que esqueci de setar alguma coisa no antes da compilaçao do jasper no ireport ?

está meu codigo certo ?

public String haveOneImgFornePdf(){
        
        String path = new UtilFaces().getServletContext().getRealPath("/WEB-INF/classes/Reports")+"/";
        
        Fornecedor fornecedor = fornecedorBean.getFornecedor();
        List<Fornecedor> list = new ArrayList<Fornecedor>();
        list.add(fornecedor);

        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
        Map<String, String> parameters = new HashMap<String, String>();

        parameters.put("SUBREPORT_DIR", path);
        String arquivo = path+"report1_forne.jasper";

        File reportFile = new File(arquivo);
        byte[] bytes = null;
        try{
            bytes = JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, ds);
        }catch(JRException e){
            e.printStackTrace();
        }
        writeBytes(bytes,true,fornecedor.getFornecedor());
        return "";
    }
private void writeBytes(byte[] bytes,boolean isDownload,String fileName){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
        if (bytes != null && bytes.length > 0) {
            ServletOutputStream ouputStream = null;
            try {
                response.setContentType("application/pdf");
                response.setContentLength(bytes.length);
                if(isDownload)
                    response.setHeader("Content-disposition", "attachment;filename="+fileName+".pdf");

                ouputStream = response.getOutputStream();
                ouputStream.write(bytes, 0, bytes.length);
                ouputStream.flush();
                ouputStream.close();

                facesContext.responseComplete();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
         }
    }

Obrigado Gente. abs

18 Respostas

rbroz85

Boa tarde amigos,

percebi que compilando com o novo ireport_nb 3.6.1 um relatorio já existente feito no ireport antigo, o mesmo para de funcionar !

os parametros sao passados corretamentes, mas simplesmente nao imprime nada na banda Detail da lista que eu enviei.

alguem saberia me dizer o que posso estar fazendo de errado ??? porfavor ?

obrigado

rbroz85

caramba, serio mesmo? ninguem ? :frowning:

TheKill

Sorry não fiz testes de uso de iReport em linux,

Mas você está setando todos os Jars necessários?

E se nao colar o printError fica complicadissimo né?! hehe

Att. Jonas

rbroz85

oh amigo obrigado pela atençao ! fico feliz…
sim ja colei todos os jars necessarios

como disse antes… funcionada perfeitamente no windows. e detalhe (esta rodando no servidor ubuntu) tudo funcionando

agora que mudei meu ambiente de desenvolvimento que deu pau no ireport e nao funciona…

e o novo ireport… me ferrou tudo !

thekill… infelismente para minha tristeza a sua de querer me ajudar… o sistema nao apresenta nenhuma msg de erro !.. vai como se tudo tivesse normal !

se vc ou alguem, pudesse testar meu codigo em uma aplicaçao real. e me dizer o resultado… iria me ajudar muito !!!

obrigado brow

TheKill

Testar para você nao dá…

Mas faça testes… tire print do SQL… confere se está passando as informações corretamente…

Faça teste no iReport passando os dados no proprio iReport…

Para ver se o erro é no Java ou iReport ^^

Att. Jonas

ManoJava

Tive esse mesmo problema, e resolvi setando corretamente os jars correspondentes a nova versão do ireports.

Att.

rbroz85

bem tenho certeza que meu java ta fucionando… pois ja funcionou antes…
como mudou de versao, eu nao sei mais…

opa… serio mesmo ? pode ser uma solução dos meus problemas.
vou fazer o seguinte… vou copiar todas as libs da pasta:
/usr/local/iReport-nb-3.6.1/ireport/modules/ext
pra minha aplicação rs

obrigado ai…

funcionando ou nao… eu volto aqui ! obg

rbroz85

nao deu em nada… .coloquei todas as bibliotecas necessarias (a relaçao que esta no site do ireport)

e ainda imprime em branco o Detail

sinceramente nao sei oq fazer

ManoJava

Ja experimentou colocar alguma coisa em outra banda e ver se imprime, tipo no sumario ou no title, se imprimir não é problema de biblioteca, manda ai pra mim que eu testo pra vc, to usando o ireport agora, quem sabe descubro o que esta acontecendo!!

Att.

rbroz85

ManoJava:
Ja experimentou colocar alguma coisa em outra banda e ver se imprime, tipo no sumario ou no title, se imprimir não é problema de biblioteca, manda ai pra mim que eu testo pra vc, to usando o ireport agora, quem sabe descubro o que esta acontecendo!!

Att.

alem de de nao imprimir a banda Detail … relatorios com imagens da nisso:
com.lowagie.text.Image.plainWidth()F (diz que nao pode encotrar)

me fala ai seu email… que vou te mandar

abs

ManoJava

ja baixei aqui, vou dar uma olhada e mais tarde te aviso se conseguir alguma coisa!
ok.

Att.

rbroz85

vlw meu querido… mt obrigado

ManoJava

Testei seu relatório aqui, e tava dando um erro em LocalidLocal e DonoidDono, removi esses dois campos, e mudei o DataSource para EmptyDataSource e consegui visualizar o relatório em PDF , como não tinha dados seus campos de fornecedor sairam como null, mas ta imprimindo corretamente em detail, veja esses dois campos mencionados acima e veja se o DataSource esta correto, depois vc me fala. volto as 17:00hs.

Att.

rbroz85

ahh entao… esses caras sao outros objetos… como so mandei 1 pra vc… removendo eles nao vai ter problema nao !

concerteza é alguma cagada que estou fazendo na hora de mandar imrprimir pela aplicação… meu codigo talvez !

so achei estranho… pq com o codigo imprime normalmente os relatorios antigos… depois que compilei com o novo ireport começou a dar isso !

a chamada do meu rel esta assim:

JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint print = JasperFillManager.fillReport(“caminho.jasper”, parameters, ds);

ByteArrayOutputStream baos = new ByteArrayOutputStream();

JRExporter exporter = new JRPdfExporter();

exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);

exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);

Byte[] bytes = baos.toByteArray();

ai pego esses bytes e escrevo eles no response

esta errado esses passos ?

no ireport como ficaria o datasource ? empty ?

abraçao

rbroz85

bem… em uma luta desesperadora… finalmente nao concegui !!! rs

algo estranho aconteceu que nao consigo explicar.

criei um novo projeto no netBeans, JSF. criei uma classe comum… Pessoa… e um relatorio com o ireport integrado no proprio netBeans…

ao clicar o botao na aplicação… ja desanimado… abriu o download do pdf… pela minha surpresa, funcinou !!! mostrou os 5 dados… Pessoa1, pessoa 2 …

legal…fiquei feliz…

logo… peguei o relatorio.jasper… e a classe Pessoa… e coloquei no meu projeto !
implementei ele… igualzinhu no projeto de teste que eu fiz…

quando fui executar… pronto ! macumba ! nao funcinou… nao mostrou nada na aba Detail !

sera que vou ter que refazer o projeto aki da empresa todo… so por causa de 1 relatorio ???

nesse teste pude constatar que… o problema que eu pensei que era… nao é ! o ireport esta funcionando perfeitamente.
o algoritimo que executa o relatorio nao é o problema… pois é o mesmo que usei no novo projetoTeste que executou com sucesso!

amigos… peço encarecidamente… alguem saberia… ou teria alguma ideia ? alguma reza pra isso ?

obrigado atençao de todos

ManoJava

No teste que fiz com algum DataSource selecionado ele mostrava “this report contain no pages” com DataSource Empty ele imprimiu corretamente e inclusive no detail, pode ser uma solução ou também pode ser que o caminho do DataSource esteja incorreto, de qualquer forma acho que é por ai a solução.
Espero ter contribuido para a resolução do seu problema amigo.

Att.

rbroz85

caro amigo manoJava,
obrigado pela sua atençao e suporte ao meu problema. fico muito grato. e espero poder um dia lhe ajudar tmb !

vou tentar descobri pq minha aplicação nao esta rodando o relatorio.
pois contatei que o problema nao é do algoritimo de imprimir relatorio nem do ireport e nem das libs ! so me restou a minha aplicação!!

voltarei assim que puder com a solução do problema de minha aplicação.

para quem quizer o algoritimo de impressao de pdf em web… so deixar recado aqui !

Obrigado a todos !

rbroz85

Bem amigos.

infelismente nao consegui entender o problema do meu relatorio nao funcionar no meu projeto.
e o mesmo funcionou em um projeto novo. (projeto netbeans)

lembrando que. o projeto antigo fiz no netbeans (windows xp) e o novo (no linux )
e o projeto antigo foi testado no linux.

solução:
criei um novo projeto no linux peguei todas as classes, paginas, xmls, tudo !!!

compilei, executei e o maldito do relatorio funcionou !


agora… pergunta que nao quer calar:

porque o relatorio compilado pelo ireport no linux nao funcionou no projeto web feito no windows ?

obrigado a todos

Criado 4 de novembro de 2009
Ultima resposta 6 de nov. de 2009
Respostas 18
Participantes 3