Pessoal, boa noite! Estou com um sério problema.
Estou utilizando o código abaixo para gerar relatórios web dinamicamente. Até ai tudo bem, meu ambiente de desenvolvimento
é windows xp. Porêm quando montei a minha estrutura no ambiente de produção ( linux ) detectei o seguinte problema: “HeadlessException” em todos os casos. Consegui posteriormente contornar este problema setando a opção headless no meu programa - ISTO PARA A GERAÇÃO DE RELATÓRIOS EM PDF.
Porêm, não sei o que acontece, mas a minha geração em impressão direta ( enviando o relatório diretamente para a impressão ) não funciona em linux. Alguem poderia me indicar uma solução.
Dica: Estou pensando em instalar um servidor CUPS com SAMBA, mas acho que, mesmo que isso funcione não será a melhor solução pois todas as impressoras da empresa serão listadas e o usuário ficará certamente perdido.
Outro problema é que se eu setar a opção headless no meu código, mesmo no windows, esta opção gera um erro de “headlessException” quando envio o relatório diretamente para impressão ( o oposto do linux ). Estranho não ???
Alguem poderia tambem me indicar um caminho para este impasse ?
<%@ page language="java" %>
<%@ include file="cabecalhoRelatorio.jsp" %>
<html>
<%
//COMANDO NECESSARIO PARA QUE A EXIBIÇÃO DO RELATORIO EM PDF
//OCORRA DE FORMA CORRETA PARA O CLIENTE
System.setProperty("java.awt.headless", "true");
Locale brasil = new Locale("pt","BR");
Locale.setDefault(brasil);
String erro = "";
listaObjetos = (List)session.getAttribute("listaObjetos");
parametros = (HashMap)session.getAttribute("parametros");
nomeRelatorio = (String)session.getAttribute("nomeRelatorio");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaObjetos);
//o nome do relatorio deve conter o nome do pacote ao qual o relatorio pertence
//Ex.: nomerelatorio = contabilidade/balancete4Colunas.jasper
File reportFile = new File( application.getRealPath("/relatorios/"+nomeRelatorio) );
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
JasperPrint impressao = null;
try{
byte[] bytes = JasperRunManager.runReportToPdf(jasperReport, parametros, ds);
response.reset();
response.resetBuffer();
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(bytes, 0, bytes.length);
ouputStream.flush();
ouputStream.close();
} catch(Exception e){
erro = e.getMessage();
out.println(e);
out.println(e.getMessage());
out.println(e.getCause());
}
session.removeAttribute("listaObjetos");
session.removeAttribute("parametros");
session.removeAttribute("nomeRelatorio");
System.setProperty("java.awt.headless", "false");
%>
</html>
<%@ page language="java" %>
<html>
<%@ include file="cabecalhoRelatorio.jsp" %>
<%
//RELATÓRIO PARA IMPRESSAO DIRETA
System.setProperty("java.awt.headless", "false");
listaObjetos = (List)session.getAttribute("listaObjetos");
parametros = (HashMap)session.getAttribute("parametros");
nomeRelatorio = (String)session.getAttribute("nomeRelatorio");
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaObjetos);
File reportFile = new File( application.getRealPath("/relatorios/"+nomeRelatorio) );
File path = new File(getServletContext().getRealPath("./"));
JasperReport jasperReport = (JasperReport)JRLoader.loadObject(reportFile.getPath());
JasperPrint impressao = null;
try{
impressao = JasperFillManager.fillReport(jasperReport, parametros, ds);
JasperPrintManager.printPages(impressao,0, impressao.getPages().size() -1 , true);
} catch(Exception e){
out.println(e);
out.println(e.getMessage());
out.println(e.getCause());
}
session.removeAttribute("listaObjetos");
session.removeAttribute("parametros");
session.removeAttribute("nomeRelatorio");
%>
<script>window.close();</script>
</html>