paribe
Abril 17, 2009, 10:38am
#1
Olá,
estou usando conforme abaixo o JasperViewer só roda no servidor
alguém teria um exemplo de usar no client ???
se alguém puder me ajudar agradeceria…
abs
JasperReport relatoriosJasper = (JasperReport)JRLoader.loadObject(jasperURL);
JasperPrint jasperPrint = JasperFillManager.fillReport(relatoriosJasper, parameters, con);
JasperViewer jrViewer = new JasperViewer(jasperPrint, false);
jrViewer.setTitle("WYZ");
jrViewer.setDefaultCloseOperation(jrViewer.DISPOSE_ON_CLOSE);
jrViewer.show();
Esse mesmo código roda perfeitamente se estiver sendo executado no cliente (no caso de ser um client Swing, claro). Copy and paste. Nesse caso você poderia preencher o JRDataSource com dados vindos do servidor por exemplo.
Abraços.
paribe
Abril 17, 2009, 11:19am
#3
mas porque com esse codigo eu rodo em outra
máquina :
entro na aplicação e pesso o relatório e tela do JasperViewer aparece na tela do servidor , por que isso ???
abs
Esse cliente que vc está usando é uma jsp, o que é?
paribe
Abril 17, 2009, 11:33am
#5
sim a saida é um jsp …
mas mostra no servidor porque será ???
vou postar o codigo novamente pois está sendo executado dentro action do struts …
String host = "http://" + request.getServerName() + ":" + request.getServerPort();
// inicio trata imagem
try{
locationImage = request.getContextPath()+ "/files/rel.jpg";
}catch(Exception ex){
locationImage = null;
}
parameters.put("imagem_dir", host+locationImage);
// fim trata imagem
session = (Session) dbmanager.getDelegate();
con = session.connection();
String jasper = request.getContextPath()+ "/report/report/"+nomeRelatorio;
host = "http://" + request.getServerName() + ":" + request.getServerPort();
URL jasperURL = new URL(host + jasper);
JasperReport relatoriosJasper = (JasperReport)JRLoader.loadObject(jasperURL);
JasperPrint jasperPrint = JasperFillManager.fillReport(relatoriosJasper, parameters, con);
JasperViewer jrViewer = new JasperViewer(jasperPrint, false);
jrViewer.setTitle("XXX");
jrViewer.show();
jrViewer.setDefaultCloseOperation(jrViewer.DISPOSE_ON_CLOSE);
} catch (Throwable ex) {
retorno = INPUT;
this.getClass().getCanonicalName(), "checkReport()");
}finally{
if(dbmanager!=null)
dbmanager.close();
}
this.dtoReport.setAcao("PARAMETRO");
this.dtoReport.setId(this.dtoReport.getId());
return retorno;
Substitua essa parte do seu código:
JasperViewer jrViewer = new JasperViewer(jasperPrint, false);
jrViewer.setTitle("XXX");
jrViewer.show();
jrViewer.setDefaultCloseOperation(jrViewer.DISPOSE_ON_CLOSE);
Por essa:
byte[] buffer = JasperExportManager.exportReportToPdf(jasperPrint);
if(buffer != null) {
response.setContentType("application/pdf");
response.setDateHeader("Expires", 0);
response.setContentLength(buffer.length);
response.setHeader("Content-Disposition", "inline; filename=\"\"");
OutputStream os = response.getOutputStream();
os.write(buffer, 0, buffer.length);
os.flush();
os.close();
}
Assim vai funcionar.
Agora para você esclarecer essas dúvidas é melhor se eprofundar um pouco no estudo da arquitura de aplicações Cliente X Servidor . Estuda a apostila da Caelum FJ-21.
Abraços.
paribe
Abril 17, 2009, 1:15pm
#7
Obrigado pelo retorno.
Eu tinha feito dessa forma o usuário quer uma solução onde não precise do software Adobe e dessa forma
que você passou para abrir na pagina jsp precisa do software.
Por isso fui pra solução de usar JasperViewer e cai na hora de apresenta a tela dele só sai no servidor ???
Essa é minha duvida ???