Apresentacao de relatorio Jasper em PDF a partir de JSP

11 respostas
IVANNETO7

Bom dia Galera…
Estou tentado apresentar um relatório a partir de codigo em um JSP.
O relatorio teve seu layout desenvolvido no Ireport. No jsp eu preencho com o resultdo da consulta no BD e gostaria desse relatorio em PDF no browser( IE8 ).
Se alguem tiver algum exemplo ja ajuda!!

(PS: Nao sei se isso eh possível!)

Obrigado!

11 Respostas

G

Vc pode usar o itext pra “exportar” sua lista para pdf…

IVANNETO7

Obrigado pela dica, porem não desejo exportar o PDF e sim exibi-lo do browser.
Nao sei, como faço isso!

IVANNETO7

Nao sei se ajuda, mas o codigo abaixo esta feito em um jsp, e tambem nao sei se eh a melhor maneira de fazer,mas…

<body>
        <%
        try{
            String dataInicial = request.getParameter("data_inicial");
            String dataFinal = request.getParameter("data_final");
            String funcionario = request.getParameter("funcionario");

            dataInicial = DataString.converteApresentacaoToBD(dataInicial);
            dataFinal = DataString.converteApresentacaoToBD(dataFinal);


            String sql = "SELECT she.DAT_SHE, u.NOM_USUARIO, s.NOM_SETOR, she.TMP_INICIO, she.TMP_TERMINO, she.TMP_TOTAL, she.DSC_ATIVIDADE "+
                         "FROM she she INNER JOIN usuarios u ON she.COD_EXECUTANTE = u.COD_USUARIO "+
                         "INNER JOIN setor s ON u.COD_SETOR = s.COD_SETOR "+
                         "WHERE she.COD_USUARIO = "+funcionario+" AND she.DAT_CADASTRO BETWEEN '"+dataInicial+"' AND '"+dataFinal+"' "+
                         "ORDER BY she.DAT_SHE;";
            runner.setSql(sql);

            //objeto necessario com ou sem parametros
            Map parametros = new HashMap();
            
            byte [] byteArray = null;

            JRResultSetDataSource jrds = new JRResultSetDataSource(runner.doQuery());

            //carrega o arquivo .jrxml gerado no Ireport
            JasperPrint printer = JasperFillManager.fillReport("jrxmls/rel_listagem_horas_extras.jasper", parametros, jrds);// ele sempre retorna fileNotfound
                                                                                                                                // e quando tento pegar
                                                                                                                                // o caminho relativo 
            System.out.println("Leu arquivo");                                                                   // com o context da outra exception. 
            

        }catch(Exception e){

Se alguem puder me ajudar, estou com problemas na leitura do arquivo .jasper!

g4j

IVANNETO7:

Se alguem puder me ajudar, estou com problemas …

e quais seriam?

ManoJava

Boa tarde

Ja tentou ler o .jrxml ao inves de .jasper ??

Att

IVANNETO7

Ja tentei sim, mas estava pesquisando e em varios lugares o pessoal tava lendo direto o jasper.
O primeiro problema que estou tendo eh na leitura do arquivo que apresenta, quando na forma acima, FileNotFoundException.
E quando uso o caminho relativo apresenta esse negocio ai:

27/01/2010 15:49:58 org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet jsp threw exception java.lang.ClassNotFoundException: org.apache.commons.logging.Log at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Class.java:2291) at java.lang.Class.getDeclaredField(Class.java:1880) at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1610) at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:52) at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:425) at java.security.AccessController.doPrivileged(Native Method) at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413) at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310) at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:92) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:515) at org.apache.jsp.relatorios.listagemHoras.SGH_005fgeraListagemHoras_jsp._jspService(SGH_005fgeraListagemHoras_jsp.java:129) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) at java.lang.Thread.run(Thread.java:619)

Mero_Aprendiz

Você colocou a commons-logging no seu classpath?

[]'s
JL

IVANNETO7

Nao sei se eh a mesma coisa, mas no classpath setei a pasta de libs do tomcat!

IVANNETO7

Alguem possui um exemplo de como ler o arquivo com o caminho relativo em JSP para gerar o relatorio em PDF e exibir no Browser??

novato22

Bom, meu amigo

Vou postar como foi que eu fiz para mostrar o meu relatório numa página web. Primeiro eu criei o seguinte Servlet:

public class Relatorio extends HttpServlet {

	protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
                /* meu arquivo relatorio está dentro de uma pasta chamado 'relatorio' dentro da pasta WebContent*/
                String path = getServletContext().getRealPath("/relatorio/");
		
		String relJasper = path + "\\relatorio.jasper";
		
		Map parameters = new HashedMap();
		
                /*recupera parâmetro que será utilizado para gerar o relatório*/
		parameters.put("chave", request.getParameter("chave"));
		
		JasperPrint report = null;
		
		try {
                        /*são passados o caminho do jasper, os parâmetros e a conexão com o banco*/
			report = JasperFillManager.fillReport(relJasper, parameters, DBconf.getConnection());
			
                        response.setContentType("application/pdf");
			
			byte x1[] = JasperExportManager.exportReportToPdf(report);
			
			response.getOutputStream().write(x1);
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);	
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
}

*não esqueça de configurar o servlet no web.xml

No jsp chamei ele deste jeito:

<a href="relatorio?chave=55655" target="page" onClick="window.open('','page','toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=yes,width=800,height=600,left=50,top=50,titlebar=yes')">
										<img src="imagens/botao_relatorio.PNG" style="border: 0" title="Gerar Relatorio">
									</a>

será aberta uma janela com o relatório gerado.

Espero que isto lhe seja útil!!!

IVANNETO7

Bom dia Galera…
O erro ainda persiste.
Nao consigo exibir o relatorio pdf no navegador.
Se alguem puder me ajudar com a configuracao do servlet agradeço, pois acho que o problema deve estar la.

Abs.

Criado 27 de janeiro de 2010
Ultima resposta 24 de mar. de 2010
Respostas 11
Participantes 6