JasperReport e arquivo PDF

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);
            }

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:

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();
            }

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:

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!

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:

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

Opa, Funcionou!
Muito obrigado, mrblack!
Valew!

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

[quote=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: [/quote]

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+