Olá pessoal,
Estou com um problema ao imprimir um relatorio PDF. Ao escrever no output ele não abre a tela do PDF com o relatorio, simplesmente passa pelo write e close e não faz nada e nem gera nenhum erro. Ja procurei em varios lugares e todos fazem do mesmo jeito ou bem parecido com o que estou fazendo. Mas não sei pq não imprime.
Não estranhem o jeito de pegar o ServletContext e o response, pois como uso JSF junto com SWF não sei pq não consigo usar o FacesContext.getCurrentInstance(), então uso da forma q esta no codigo.
Segue o metodo q faz a impressão:
Alguem tem alguma ideia pra me ajudar
Vlw
public void gerarRelatorio(RequestContext context) {
WebApplicationContext web = ContextLoader
.getCurrentWebApplicationContext();
ServletContext servletContext = web.getServletContext();
String pathRel = servletContext
.getRealPath("/reports/RelProducaoEnsaiosTransformacao.jasper");
HttpServletResponse response = (HttpServletResponse) context
.getExternalContext().getNativeResponse();
try {
if (dadosConsulta != null && dadosConsulta.size() > 0) {
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
"attachment; filename=RelProducaoEnsaiosTransformacao.pdf");
Map<String, String> parameters = new HashMap<String, String>();
// recebe por parametro uma lista da propia classe jah populada
JRBeanCollectionDataSource jrds = new JRBeanCollectionDataSource(
dadosConsulta);
JasperPrint print = JasperFillManager.fillReport(pathRel,
parameters, jrds);
print.setLocaleCode("pt_BR");
byte[] bytes = JasperExportManager.exportReportToPdf(print);
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
} else {
// implementar
}
} catch (Exception e) {
e.printStackTrace();
}
}