Trabalho com o Oracle Reports ( Que é um saco ) e cansei de sofrer. Resolvi montar um relatório no JasperReports/iReports. Então para isto, fiz o download do IReports e desenvolvi um relatório simples. Ele acessa uma pequena tabela do banco e mostra as informações perfeitamente no preview do iReports. Após compilado tenho um arquivo .jasper gerado
Agora começam os problemas. Preciso de um servlet que faça a geração deste relatório no browser em HTML e também em PDF. Para isso criei um projeto Web e adicionei o jasperreports.jar em minhas bibliotecas do netbeans e nele comecei as minhas tentativas que até agora não tiveram sucesso.
Nas minhas pesquisas encontrei alguns códigos que passam um objeto Connection para esta geração. Nesta hora fiquei confuso, pois imaginei que no arquivo .jasper as configurações da conexão da estavam OK.
Alguém tem algo semelhante e pode me ajudar ? O que preciso fazer ?
Tenho uma certa experiência em java e por isso acredito que não vou dar tanto trabalho
Para tentar melhorar as informações do post, vejam abaixo:
1 - O Ambiente / Projeto do NetBeans segue na figura NetBeans 001.
2 - O Servlet responsavel por abrir o relatorio.jasper é este: Lembrando que ainda não entendo o porque da conexão, já que no relatório a conexão já foi criada.
Na verdade, a conexão que você configura no ambiente é só para o DataSource de testes. A query configurada fica dentro do relatório, mas a conexão não.
Quando você vai colocar para rodar seu relatório na aplicação, você precisa passar a conexão entendeu?
Não analisei seu código de escrita dos dados do pdf no OutputStream pq acho que seu problema é outro.
Acho que alguma excessão deve estar sendo lançada. Seria legal vc passar o stacktrace da excessão para a genet dar uma olhada.
Apenas oi .jar do jasperreports não é o suficiente. Recomendo que você inseria TODOS os .jar que vem na distribuição (são váários).
Se algum deles entrar em conflito com os que você já tem no projeto (duas versões por exemplo), mantenha a versão mais nova.
[]´s
P
Priuli
lblanco, não conheço muito jasper,ireport, mais vô tentar ajuar com o pouco que eu sei.
Assim o Jasper tem algumas maneirar de obter as informações para o relatorio, uma delas é o proprio jasper conectar no banco e obter as informações, as outras o programa que irá usar o jasper terá que passar as informações para o jasper…
Eu não sei se o jasper gera o relatorio em HTML. nunca usei… mais deve ter algum geito
Exemplo de um relatorio que eu fiz a um tempo…
//neste relatorio o jasper recebe as informações e não conecta no banco..List<RelatorioVO>lista=dao.list();HashMap<String,Object>parameters=newHashMap...JRBeanCollectionDataSourcejrDs=newJRBeanCollectionDataSource(lista);//posso passar um resultset no lugar do List ex: JRResultSetDataSource jrDs = new JRResultSetDataSource(dao.getRelatorioInResultSet());JasperPrintjasperPrint=JasperFillManager.fillReport(this.getClass().getResourceAsStream("/pacote/relatorio.jasper",parameters,jrDs);JRAbstractExporterexporter=newJRPdfExporter();//pdf//JRAbstractExporter exporter = new JRXhtmlExporter();//xhtml nunca usei...exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING,"UTF-8");exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_FILE,file);exporter.exportReport();
L
lblanco
Opa, obrigado galera !!!
Coloquei estas libs, mas o problema persiste. Antes de fazer funcionar , gostaria de entender.
O davidbuzatto ja me explicou questão da conexão, Agora resta saber porque o pdf nao gera
Então Lucas, faz o seguinte, primeiro edita o título do seu tópico. Escrever em caixa alta é feio, parece que você está gritando.
Quanto às dependências, no pacote do jasper (no completo), vem todos os .jar que são necessários (são vááários).
Seu iReport provavelmente é da mesma versão do jasper que você está usando não é?
Dentro da instalação do iReport tem os .jars tbm.
[]´s
D
davidbuzatto
Ah, qual iReport vc ta usando? A versão standalone ou o plugin do NetBeans?
L
lblanco
Prontinho, já alterei o título do post conforme você alertou.
Estou usando a versão standalone 3.7.5, acabei de baixar. Inclui mais libs e agora o erro é:
Bom, vou tentando por aqui.
Obrigado pelas dicas por enquanto.
D
davidbuzatto
Então Lucas, adiciona todos.
Dentro da instalação do iReport, dá uma olhada, deve ter uma pasta chama ext dentro da pasta modules e uma chamada libs.
Vc tem que copiar TODOS os .jar das duas pastas (ext e libs) e colocar no seu projeto.
É provável que seu relatório não vá usar todas elas, mas copie todas por precaução.
Como falei, se houver algum conflito (mesmo .jar de versões diferentes) opte pelo de versão mais nova (versão maior).
Remova as que você tem certeza que não vai usar (hibernate por exemplo).
Se vc testar depois que removeu algum .jar e não der certo, volte ele.
[]´s
F
fbrissi
Esta versão nova do JasperReports utiliza uma classe que não era utilizada em outras versões. Este exception é de uma classe que está faltando. Você encontra esta classe num jar que está onde vocês descompactou seu IReports. Procure o arquivo groovy-all-1.5.5.jar no caminho abaixo.
O Relatório agora é emitido em PDF no browser. Bom, agora preciso que ele seja gerado direto para a impressão sem abrir.
Vou iniciar as pesquisas e continuo neste tópico. Quando terminar vou fazer um tutorial e colocar aqui.
Abraços
R
raf4ever
Para salvar sem imprimir na tela basta mudar o header content-disposition de ‘inline’ para ‘attachment’
D
davidbuzatto
lblanco:
Pessoal,
Retirei a linha:
PrintWriter out = response.getWriter();
E Funcionou !!!
Era isso que eu tinha falado
Que bom que deu certo.