Relatorio do iReport do abre no servidor
Olá Pessoal,
Estou com problema para desenvolver relatorio no iReport, pois quando publico a aplicação os relatorios abrem somente no servidor...rs. Segue abaixo a minha chamada.
// PreparedStatement pstmt = DB.
conn = ConectaBanco.getConexao();
InputStream reportStream = this.getServletContext().getResourceAsStream("/WEB-INF/protected/relatorios/admProjetos/HoraApontadas.jasper");
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery(query);
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
HashMap map = new HashMap();
JasperReport rel = (JasperReport)JRLoader.loadObject(reportStream);
impressao = JasperFillManager.fillReport(rel, map, jrRS);
JasperViewer visualizador = new JasperViewer(impressao, false);
visualizador.setVisible(true);
Estou com problema para desenvolver relatorio no iReport, pois quando publico a aplicação os relatorios abrem somente no servidor...rs. Segue abaixo a minha chamada.
// PreparedStatement pstmt = DB.
conn = ConectaBanco.getConexao();
InputStream reportStream = this.getServletContext().getResourceAsStream("/WEB-INF/protected/relatorios/admProjetos/HoraApontadas.jasper");
Statement stm = conn.createStatement();
ResultSet rs = stm.executeQuery(query);
JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
HashMap map = new HashMap();
JasperReport rel = (JasperReport)JRLoader.loadObject(reportStream);
impressao = JasperFillManager.fillReport(rel, map, jrRS);
JasperViewer visualizador = new JasperViewer(impressao, false);
visualizador.setVisible(true);
Cristiano Assis
Curtidas 0
Respostas
Davi Costa
29/09/2011
Vc vai precisar de um HttpServletResponse para instanciar um ServletOutputStream.. segue abaixo um exemplo de chamadausando jsf, se vc não usar jsf é só adaptar para sua implementação:
Espero ter ajudado um pouco
att Davi
//executa o relatório através de um Connection
public static void executarRelatorio(String caminhoRelatorio, Map<String, Object> parametros, String nomeRel, Connection conn, TipoFormatoRelatorio tipoFormatoRelatorio) throws Exception{
FacesContext context = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
//pega o caminho do arquivo .jasper da aplicação
InputStream reportStream = context.getExternalContext().getResourceAsStream(caminhoRelatorio);
response.setHeader(Pragma, no-cache);
try {
ServletOutputStream servletOutputStream = response.getOutputStream();
//envia parametros para o relatório
if (parametros == null){
parametros = new HashMap<String, Object>();
}
//envia a resposta com o MIME Type
if(tipoFormatoRelatorio.equals(TipoFormatoRelatorio.ACROBAT_PDF)){
response.setHeader(Content-Disposition, attachment; filename=+ nomeRel +.pdf);
response.setContentType(application/pdf);
//envia para o navegador o PDF gerado
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parametros, conn);
}else if(tipoFormatoRelatorio.equals(TipoFormatoRelatorio.PLANILHA)){
response.setHeader(Content-Disposition, attachment; filename=+ nomeRel +.xls);
response.setContentType(application/x-download);
JasperReport relatorio = (JasperReport) JRLoader.loadObject(reportStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(relatorio,
parametros,
conn);
JRExporter exporter = new JRXlsExporter();
byte[] output;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, baos);
exporter.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND, Boolean.FALSE);
if(exporter instanceof JRXlsExporter){
exporter.setParameter(JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET, Boolean.TRUE);
exporter.setParameter(JRXlsExporterParameter.SHEET_NAMES, new String[]);
}
exporter.exportReport();
output = baos.toByteArray();
servletOutputStream.write(output);
}
servletOutputStream.flush();
servletOutputStream.close();
} catch (JRException e) {
e.printStackTrace();
context.responseComplete();
throw new ReportException(ERRO_MENSAGEM_REPORT);
} catch (IOException e) {
e.printStackTrace();
context.responseComplete();
throw new ReportException(ERRO_MENSAGEM_REPORT);
}catch(Exception e){
e.printStackTrace();
context.responseComplete();
throw new Exception(e.getMessage());
}
context.responseComplete();
}
public enum TipoFormatoRelatorio {
ACROBAT_PDF(Acrobat PDF),
TEXTO(Texto),
PLANILHA(Planilha),
PAGINA_HTML(Página HTML);
protected String nomeRelatorio = null;
private TipoFormatoRelatorio(String nomeRelatorio) {
this.nomeRelatorio = nomeRelatorio;
}
}
Espero ter ajudado um pouco
att Davi
GOSTEI 0
Dyego Carmo
29/09/2011
Voce vai precisar usar a APPLET do jasper para abrir no cliente , ou enviar um PDF (que costuma abrir automaticamente caso o acrobat reader esteja instalado)
Acho a opcao de enviar o pdf mais rapida e pratica.
Acho a opcao de enviar o pdf mais rapida e pratica.
GOSTEI 0