Prezados estou tentando imprimir um relatorio mais ele não gera ou não "aparece"
observo o log no Eclipse e vejo o seguinte
20:06:49,226 DEBUG DefaultExtensionsRegistry:232 - Instantiating extensions registry for simple.font.families using factory class net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
20:06:49,953 DEBUG JRBaseFiller:379 - Fill 16726035: created for rcpapel
20:06:49,993 DEBUG JRBaseFiller:851 - Fill 16726035: filling report
20:06:50,118 DEBUG JRBaseFiller:1699 - Fill 16726035: adding page 1
20:06:50,125 DEBUG JRVerticalFiller:389 - Fill 16726035: page header
20:06:50,297 DEBUG JRVerticalFiller:714 - Fill 16726035: detail
20:06:50,305 DEBUG JRVerticalFiller:714 - Fill 16726035: detail
20:06:50,313 DEBUG JRVerticalFiller:714 - Fill 16726035: detail
20:06:50,313 DEBUG JRVerticalFiller:1025 - Fill 16726035: summary
20:06:50,329 DEBUG JRVerticalFiller:999 - Fill 16726035: page footer
20:06:50,329 DEBUG JRBaseFiller:913 - Fill 16726035: ended
dai não percebo mensagem de erro, mais o relatorio que teria então tres registros
de uma tabela de Papeis ( Role ) não é gerado.
Alguem poderia dar uma dica do que esta ocorrendo, ja tentei muitos tutoriais, procurei
por respostas aqui no grupo semanas atras, li muito, tentei mudanças no codigo que gera
o relatorio mais não obtive sucesso.
Abaixo coloco alguns detalhes de minha aplicação em web
JSF 2, Spring 3 para IOC, EclipseLink JPA 2 Banco Postgre 9
Servidor Tomcat 7
Estou criando uma lista com todos os registros da entidade Papel
no Ireport o relatorio foi feito colocando apenas os campos ou seja não fiz o relatorio
usando uma query
Então Gerva o relatorio eu criei no Ireport lá eu não fiz uma consulta e preenchi os campos no designer
eu simplesmente sabendo quais os atributos de minha classe Papel.java
(id, paPapel, paDescricao) criei o relatorio
peguei o arquivo jasper e o jrxml copiei para a pasta web-inf\reports no eclipse
os dados para o relatorio vem de uma lista ( uma consulta no banco )
o codigo do programa esta abaixo
@ManagedBean(name="relatorioPapeis")
@SessionScoped
public class RelatorioPapeis {
private Papel papel;
private List<Papel> papelLista;
@ManagedProperty(value = "#{papelService}")
private PapelService papelService ;
public Papel getPapel() {
return papel;
}
public void setPapel(Papel papel) {
this.papel = papel;
}
public List<Papel> getPapelLista() {
return papelService.findAll();
}
public void setPapelLista(List<Papel> papelLista) {
this.papelLista = papelLista;
}
public PapelService getPapelService() {
return papelService;
}
public void setPapelService(PapelService papelService) {
this.papelService = papelService;
}
public void imprimir(ActionEvent event) {
FacesContext facesContext = FacesContext.getCurrentInstance();
ServletContext servletContext = (ServletContext)facesContext.getExternalContext().getContext();
String pathRel = servletContext.getRealPath("WEB-INF/reports/rcpapel.jasper");
String fileName = "ListaDePapeis.pdf";
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
papelLista = papelService.findAll();
String[] fields = new String[] { "id", "paPapel", "paDescricao"};
QueryResultDataSource jrds = new QueryResultDataSource(papelLista, fields);
// A linha abaixo estava antes, na tentativa de dar certo eu substitui pela linha acima
//JRDataSource jrds = new JRBeanCollectionDataSource(papelLista);
try {
JasperPrint print = JasperFillManager.fillReport(pathRel, null, jrds);
byte[] bytes = JasperExportManager.exportReportToPdf(print);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
facesContext.responseComplete();
} catch (Exception e) {
new Exception("Não foi possível listar. Motivo: " + e.getMessage());
}
}
}
rlira, recentemente tive alguns problemas com geração de relatorios. e esse tutorial aqui me ajudou muito.
Ele é bem basico e completo. POr isso gostei bastante.
osakakitano tudo bem? cara valeu ai so a dica
mais li este post ele realmente é bom, esta dividido em varias partes, a ultima
ele mostra como trabalhar o relatorio na web ( q é o meu caso ) mais, não sei
se é o JSF, algo a ver com o protocolo Http, cara ontem revisei até os Jar´s do
jasper e tá tudo Ok.
Caro , não tem problema, tô começando (1 ano de java com projeto pessoal) , cheio de duvidas rsrsrsrs, pense num cara
chato é o cara cheio de duvidas rsrsrsrs, mais tô buscando solução e qdo a tiver publico ela aki
Prezados, hoje ainda sem conseguir uma solução para o meu problema com o relatorio na Web, vi que posso
utilizar o JasperViewer, então comentei a parte do codigo que mostra ( mostraria ) o relatorio no navegador e
então ao testar o relatorio abriu isto quer dizer que o relatorio esta Ok, o programa que chama o relatorio também
mais, e ai qual é o problema pelo qual o relatorio não é mostrado no navegador? o SO ( Windows 7), o Navagador?
o Mozilla e o IE o JSF? mais o que? alguem já passou algo parecido?
Então apos tanto tempo ( havia até deixado de lado a questão do relatorio no meu aplicativo ), mais hoje consegui fazer funcionar
como eu uso no projeto o primefaces e estava chamando o relatorio atraves de um botão foi apenas inserir a propriedade
ajax = “false” que o mesmo foi gerado no navegador.
Bem não sei explicar tecnicamente a resolução se alguem quizer comentar agradeço, e agradeço tambem ao Flavio foi atraves
da mensagem dele que consegui resolver.
Boa tarde galera tive o mesmo problema, meu relatorio gerava o erro (Instantiating extensions registry for simple.font.families using factory class net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory )
depois de dois dias procurando consegui encontrar o erro (depois de fazer uma oração a DEUS), tinha um campo do tipo text no banco de dados com mais de 15.000 caracteres, com isso o ireport nao conseguia gerar o relatório lançava essa exceção e as vezes estourava a memória.