JasperReport e arquivo PDF

9 respostas
C

Bom dia galera, Estou tentando exibir um relatorio ireport em formato PDF em uma pagina web.
Basicamente, eu envio para o iReport um ArrayList com os objetos para o relatorio , o JasperReport gera o relatorio.

O codigo abaixo se encontra no Servlet que fiz para fazer esta funçao, mas, neste código o relatorio esta sendo exibido no JasperViewer, e eu quer exibi-lo em uma pagina web em formato PDF.
Alguem sabe comom posso fazer?
Obrigado!

try {
            Map parametros = new HashMap();
            JRDataSource jr = new JRBeanArrayDataSource(array.toArray());

                // Aqui ele cria o relatório
                JasperPrint impressao = JasperFillManager.fillReport("c:/TesteArrayList.jasper", parametros,jr);
                
                JasperViewer jrviewer = new JasperViewer(impressao,false);
                jrviewer.show();
                
            

            } catch (Exception e) {
                res.getWriter().println("Erro ao gerar o relatório: " + e);
            }

9 Respostas

M

christianovale, segue um exemplo

try {
   // carrega o relatório compilado
   InputStream stream = getServletContext().getResourceAsStream("caminho_do_arquivo_ponto_jasper");
   JasperReport relatorio = JasperManager.loadReport(stream);
   
   // estabelece uma conexão JDBC (seria melhor usar DataSources J2EE)
   Class.forName(driver);
   Connection con = DriverManager.getConnection(url, login, passwd);
	    
   Statement stm = con.createStatement();
   ResultSet rs = stm.executeQuery(consultaSQL);

   // implementação da interface JRDataSource para DataSource ResultSet 
   JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
   Map parametros = new HashMap();		 
			    
   // executa o relatório
   JasperPrint impressao = JasperManager.fillReport(relatorio, parametros, jrRS);		    		    

   JasperManager.printReportToPdfStream(impressao, response.getOutputStream());
   con.close();
} catch (Exception e) {
   throw new ServletException(e);
}

coloque esse codigo dentro de um servlet…
obs: esse código ta usando metodos que ja são deprecated, mas funciona direitinho, qualquer coisa, só perguntar…
:wink:

C

Cara, não deu certo.
A linha (JasperReport relatorio = JasperManager.loadReport(stream):wink: dispara uma nullPointerException.
O que mais pode estar acontecendo?

try {

                JRDataSource jr = new JRBeanArrayDataSource(array.toArray());
                 
                // Aqui ele cria o relatório
                //JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/TesteArrayList.jasper", parametros,jr);
                //------------      
                // carrega o relatório compilado
                InputStream stream = getServletContext().getResourceAsStream("c:/TesteArrayList.jasper");
                JasperReport relatorio = JasperManager.loadReport(stream);
                JasperPrint impressao = JasperManager.fillReport(relatorio, parametros, jr);		    		    

                JasperManager.printReportToPdfStream(impressao, res.getOutputStream());


                //------------
                /*JasperViewer jrviewer = new JasperViewer(impressao,false);
                jrviewer.show();*/

            } catch (Exception e) {
                res.getWriter().println("Erro ao gerar o relatório: " + e);
                e.printStackTrace();
            }
M

christianovale,

muito provavelmente na linha abaixo,

InputStream stream = getServletContext().getResourceAsStream("c:/TesteArrayList.jasper");
o metodo getResourceAsStream não está achando esse path que você informou, para corrigir isso, se estiver usando o tomcat, coloque o jasper dentro da pasta em que você está fazendo deploy, e informe o caminho relativo desta pasta no metodo getResourceAsStream, por exemplo, se eu .jasper estiver na raiz da sua pasta da sua app, simplesmente informe o nome deste .jasper…

na minha aplicacao eu utilizo deste jeito, qq coisa posta aí q ajudamos…
:wink:

C
Bem, parece que estamos evoluindo mas, ainda esta dando um erro que não consigo consertar:

agora é na linha:

JasperManager.printReportToPdfStream(impressao, res.getOutputStream());

que está disparando:

java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException

net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfStream(JasperExportManager.java:162)

net.sf.jasperreports.engine.JasperManager.printReportToPdfStream(JasperManager.java:336)

projetoteste.exibeRelatorio.doGet(exibeRelatorio.java:62)

javax.servlet.http.HttpServlet.service(HttpServlet.java:689)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

O que pode estar acontecendo agora?

JRDataSource jr = new JRBeanArrayDataSource(array.toArray());

                 // carrega o relatório compilado
                 InputStream stream = getServletContext().getResourceAsStream("TesteArrayList.jasper");
                 JasperReport relatorio = JasperManager.loadReport(stream);
                 JasperPrint impressao = JasperManager.fillReport(relatorio, parametros, jr);

                 JasperManager.printReportToPdfStream(impressao, res.getOutputStream());

Desculpe, mas, como sou novato com relaçao a iReport estou apanhando ainda. So não consegui ainda foi gerar o relatorio em pdf mas, em todos os outros formatos funcionaram.

Obrigado!

M

cara, da uma olhada pra ver se vc tem o jar do iText na sua lib do tomcat…
essa classe aí, que ta faltando, faz parte do iText…

tip: para resolver os problemas de class not found mais facilmente, use esse site aqui, http://www.jarfinder.com/, é super bom…

:wink:

C

Ok, mas, estou tentando achar o download do arquivo itext.jar mas não está achando. O nome é este mesmo?

C

Opa, Funcionou!
Muito obrigado, mrblack!
Valew!

F
Para evitar o uso de método deprecated, troque a linha #1 pela linha #2.

#1

JasperManager.printReportToPdfStream(jasperPrint, out);

#2

JasperExportManager.exportReportToPdfStream(jasperPrint, out);
R

mrblack:
christianovale,

muito provavelmente na linha abaixo,

InputStream stream = getServletContext().getResourceAsStream("c:/TesteArrayList.jasper");
o metodo getResourceAsStream não está achando esse path que você informou, para corrigir isso, se estiver usando o tomcat, coloque o jasper dentro da pasta em que você está fazendo deploy, e informe o caminho relativo desta pasta no metodo getResourceAsStream, por exemplo, se eu .jasper estiver na raiz da sua pasta da sua app, simplesmente informe o nome deste .jasper…

na minha aplicacao eu utilizo deste jeito, qq coisa posta aí q ajudamos…
:wink:

Fiz um Servlet relatorio parecido com q vc sugeriu ai
tem como vc me dar uma ajuda ???
o font e esse:

try {

            // carrega o relatório compilado  
            InputStream endStream = getServletContext().getResourceAsStream(
                    "E:/ProjetosWeb/EtiquetasWeb/xxxxxx/relatorios/etiquetaDestinatarios.jasper");

            // recebe end do relatorio
            JasperReport jr = JasperCompileManager.compileReport(endStream);

            // preenche o relatorio com os dados do BC(ou no)
            JasperPrint jp = JasperFillManager.fillReport(jr, parametros, new JRBeanCollectionDataSource(Vetiq));
            JasperExportManager.exportReportToPdfStream(jp, response.getOutputStream());

            // gera a visualizacao(preview) do relatorio
            JasperViewer.viewReport(jp);

            response.sendRedirect("imprimirEtiqueta.jsp");

        } catch (JRException JREex) {
            System.out.println("Afffffffff ta dando bug nesse Relatorio !!!!!!!!!!!!");
            JREex.printStackTrace();
        }
    }

so que gera o seguinte erro na linha

net.sf.jasperreports.engine.JRException: java.net.MalformedURLException

at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:247)

at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:226)

at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214)

at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:204)

at com.sindicatorural.controle.servlets.ImprimirEtiqueta.doPost(ImprimirEtiqueta.java:81)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

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:175)

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:286)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)

at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)

at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)

at java.lang.Thread.run(Thread.java:619)

Caused by: java.net.MalformedURLException

at java.net.URL.(URL.java:601)

at java.net.URL.(URL.java:464)

at java.net.URL.(URL.java:413)

at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:650)

at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:771)

at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)

at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)

at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)

at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)

at org.apache.commons.digester.Digester.parse(Digester.java:1647)

at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:239)

se possivel me ajudar fico Agradecido
T+

Criado 13 de abril de 2006
Ultima resposta 31 de jul. de 2008
Respostas 9
Participantes 4