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…
Cara, não deu certo.
A linha (JasperReport relatorio = JasperManager.loadReport(stream) 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…
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…
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…
[/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+