Relatorio do iReport do abre no servidor

29/09/2011

0

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);
Cristiano Assis

Cristiano Assis

Responder

Posts

29/09/2011

Davi Costa

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:

//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
Responder

21/10/2011

Dyego Carmo

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.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar