Estou fazendo um projeto web no NetBeans.
Já consegui integrar o IReport no NetBeans mas quando tento chamar o report para imprimir eu não consigo.
Alguem pode me dar uma ajuda??? Um exemplo de código??? Aonde meu arquivo .jasper deve ficar???
Estou fazendo um projeto web no NetBeans.
Já consegui integrar o IReport no NetBeans mas quando tento chamar o report para imprimir eu não consigo.
Alguem pode me dar uma ajuda??? Um exemplo de código??? Aonde meu arquivo .jasper deve ficar???
é meio antigo, mas pode te ajudar…
http://www.furutani.eti.br/tutoriais/Mini-Tutorial_Relatorios_Java_JasperReports_e_iReport.pdf
nada… mais alguem ???
Esse e o meu código:
public void geraRelatorio( ) throws JRException, Exception
{
ConexaoDB conex = new ConexaoDB();
conex.iniciarConexao("jdbc:sqlserver://TECNOARTE-SRV01:1433;databasename=ADMDB");
String query = "SELECT * FROM Asa_Atendimento";
PreparedStatement comando1=conex.getCon().prepareStatement(query);
String relanome = "D:/SGV/RegistroDeAtendimento.jasper";
ResultSet rs1=comando1.executeQuery();
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs1 );
Map parameters = new HashMap();
// parameters.put("COLUNA", valor);
JasperPrint jasperPrint = JasperFillManager.fillReport(relanome, parameters,conex.getCon());
JasperViewer.viewReport(jasperPrint);
JasperFillManager.fillReportToFile( relanome, parameters, jrRS );
JasperExportManager.exportReportToPdfFile( "RegistroDeAtendimento.jrprint" );
JasperViewer.viewReport( "RegistroDeAtendimento.pdf", false );
conex.fecharConexao();
}
Gustavo,
Eu to com o mesmo problema já tentei varias soluções e não consigo colocar pra funcionar. O maior problema é a mudança das bibliotecas do Jasper que foi depreciada. Os tutoriais que são disponibilizados na net são todos antigos.
Estou no mesmo problema caso consiga algo peço que me de uma luz que já venho a aproximadamente a uma semana tentando colocar isso pra funcionar.
Grato!
mais alguem?
Poste a exceção p/ gente dar uma olhada
3/11/2008 17:22:24 com.sun.faces.lifecycle.LifecycleImpl phase
WARNING: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@187aa9e) threw exception
com.sun.rave.web.ui.appbase.ApplicationException: #{Atendimento_brw.btnImprime_action}: java.lang.NoClassDefFoundError: org/apache/commons/javaflow/bytecode/Continuable
at com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.cleanup(ViewHandlerImpl.java:594)
at com.sun.rave.web.ui.appbase.faces.ViewHandlerImpl.renderView(ViewHandlerImpl.java:311)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.render(PartialTraversalLifecycle.java:106)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.sun.webui.jsf.util.UploadFilter.doFilter(UploadFilter.java:267)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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: javax.faces.FacesException: #{Atendimento_brw.btnImprime_action}: java.lang.NoClassDefFoundError: org/apache/commons/javaflow/bytecode/Continuable
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:107)
at com.sun.rave.web.ui.appbase.faces.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
at javax.faces.component.UICommand.broadcast(UICommand.java:383)
at com.sun.webui.jsf.component.WebuiCommand.broadcast(WebuiCommand.java:160)
at com.sun.webui.jsf.component.TableRowGroupBase.broadcast(TableRowGroupBase.java:1402)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
… 18 more
Caused by: javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/apache/commons/javaflow/bytecode/Continuable
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:91)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:91)
… 29 more
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/javaflow/bytecode/Continuable
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:1819)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:872)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1327)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)
at sgv.Atendimento_brw.geraRelatorio(Atendimento_brw.java:181)
at sgv.Atendimento_brw.btnImprime_action(Atendimento_brw.java:160)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:152)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:77)
… 30 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.javaflow.bytecode.Continuable
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1360)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1206)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
… 50 more
Escrevi a seguinte classe. Acredito que vc não terá problemas:
Relatorio.java
[code]
import br.com.sistema.DAO.Conexao; // Essa classe só tem 2 métodos (abrirConexao() e fecharConexao())
import java.io.File;
import java.sql.Connection;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import net.sf.jasperreports.engine.export.JRRtfExporter;
public class Relatorio{
private String arquivoJasper;
private String pathArquivoJasper;
private HashMap parametros;
private JasperPrint jasperprint;
public Relatorio(String arquivoJasper, String pathArquivoJasper, HashMap parametros){
this.pathArquivoJasper = pathArquivoJasper;
this.arquivoJasper = arquivoJasper;
this.parametros = parametros;
try{
this.jasperprint = geraTmp();
} catch(JRException e){
this.jasperprint = null;
}
}
public JasperPrint geraTmp() throws JRException{
Conexao objConn = new Conexao();
Connection conn = objConn.abrirConexao();
try{
JasperPrint jasperPrint = JasperFillManager.fillReport(this.pathArquivoJasper + File.separator + this.arquivoJasper, this.parametros, conn);
return jasperPrint;
}
catch(JRException e){
throw e;
}
finally{
objConn.fecharConexao(conn);
}
}
public boolean exporta(String tipo, String pathSaida, String arqSaida) throws JRException {
try{
if("pdf".equalsIgnoreCase(tipo) ){
JRPdfExporter exporterPDF = new JRPdfExporter();
exporterPDF.setParameter(JRExporterParameter.JASPER_PRINT, this.jasperprint);
exporterPDF.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, pathSaida + File.separator + arqSaida + ".pdf");
exporterPDF.exportReport();
}
else if("rtf".equalsIgnoreCase(tipo) ){
JRRtfExporter exporterRTF = new JRRtfExporter();
exporterRTF.setParameter(JRExporterParameter.JASPER_PRINT, this.jasperprint);
exporterRTF.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, pathSaida + File.separator + arqSaida + ".rtf");
exporterRTF.exportReport();
}
return true;
}
catch(Exception e){
return false;
}
}
}[/code]
Para utilizar, basicamente vc tem que instanciar um objeto Relatorio, passando o nome do arquivo .jasper, o diretorio, e os parametros.
Com isso, o relatório é “preenchido”.
Daí vc só tem q exportá-lo para algum formato, passando o tipo, o diretório, e o nome do arquivo (sem a extenção).
// Prepara os parametros
HashMap parametros = new HashMap();
parametros.put("MAX_REGISTROS_POR_PAGINA", 100);
parametros.put("ZEBRADO", 0);
// Ao instanciar a linha abaixo, o relatório é executado e "preenchido" com as informações do banco.
Relatorio relatorio = new Relatorio("meuRelatorio.jasper", "c:", parametros);
// Exporta o relatório preenchido para o formato desejado:
relatorio.exporta("pdf", "c:", "meuRelatorio_data_hora"); // Vc tem duas opções: pdf ou rtf, mas dá pra implementar outras opções facilmente.
Segue abaixo uma JSP que eu fiz as pressas… só pra vc ter um exemplo “quase” real…rs:
<%@page pageEncoding="Cp1252" contentType="text/html; charset=Cp1252" %>
<%@page import="java.util.*, java.text.*, br.com.sistema.rotinas.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Cp1252"/>
<title>Relatório:</title>
</head>
<body>
<%
//Pega Parâmetros
String relatorio = "ListagemEstoque";
String arquivoJasper = relatorio + ".jasper";
String tipo = "pdf"
SimpleDateFormat data = new SimpleDateFormat("dd_MM_yyyy_H_m_s");
Calendar cal = Calendar.getInstance();
String dataHora = data.format(cal.getTime());
String relatorioSaida = relatorio + "_" + dataHora;
//Define diretório de entrada ".jasper" e o diretório de saida
String dir_origem = application.getRealPath("/relatorios_jasper");
String dir_saida = application.getRealPath("/tmp");
HashMap map = new HashMap();
//Gera Relatório
Relatorio rep = new Relatorio(relatorio + ".jasper", dir_origem, map);
rep.exporta(tipo, dir_saida, relatorioSaida);
%>
Abrir: <a href="tmp/<%= relatorioSaida + "." + tipo %>">Clique aqui</a>
</body>
</html>
Qualquer dúvida, volte a perguntar.
Espero ter ajudado!!
Tem como postar as bibliotecas jasper que você usou para esse exemplo?
Estou usando estas jars:
commons-collections-2.1.jar
commons-javaflow-20060411.jar
commons-logging-api-1.0.2.jar
iReport.jar
itext-1.3.1.jar
jasperreports-3.0.0.jar
jcommon-1.0.13.jar
jfreechart-1.0.10.jar
poi-3.0.2-FINAL-20080204.jar
postgresql-8.3-603.jdbc4.jar
OBS: Como eu tmb faço relatórios com graficos, tmb está nesse meio aí a lib o jfreechart
commons-collections-2.1.jar
commons-javaflow-20060411.jar
commons-logging-api-1.0.2.jar
itext-1.3.1.jar
jcommon-1.0.13.jar
jfreechart-1.0.10.jar
poi-3.0.2-FINAL-20080204.jar
postgresql-8.3-603.jdbc4.jar
tem link para essas bibliotecas???
???
Resolvido…
alg ja viu esse exception ???
java.lang.NoSuchMethodError: com.lowagie.text.Image.plainWidth()
Tenha paciencia amigo… além de trabalhar eu tmb almoço como todo mundo…
Mas então, quase todas elas estão dentro da pasta lib do IReports.
Eu uso a versão 3.0:
http://sourceforge.net/project/showfiles.php?group_id=64348&package_id=64215&release_id=603069
Apenas essas que eu tive que procurar:
postgresql-8.3-603.jdbc4.jar
http://jdbc.postgresql.org/download.html
poi-3.0.2-FINAL-20080204.jar (Essa lib é pra poder exportar os relatórios pra algum formato do office, como Excel)
http://poi.apache.org/
As duas libs abaixo tmb estão dentro da pasta lib do IReports, porém numa versão inferior, mas não há problema algum nisso.
Mas caso queira mais atualizada: http://www.jfree.org/
common-1.0.13.jar
jfreechart-1.0.10.jar
Eu estava tendo esse erro quando usava a biblioteca “itext-2.1.3.jar”.
Acredito que o jasperreport 3.0 não suporta ela ainda.
daí eu voltei a usar a que vem na pasta lib do ireport 3.0: itext-1.3.1.jar
daí funcionou tudo perfeitamente.
Está gerando perfeitamente !!! Muito obrigado !!! Nem sei como agradecer…
Uma ultima dúvida como faço para abrir o pdf que é gerado ???
No exemplo eu havia colocado como “c:” apenas para ilustrar…
Vc pode fazer o seguinte:
Dentro da sua aplicação web, cria 2 pastas, uma pra vc guardar os “.jasper” e outra pra vc guardar os arquivos gerados:
RAIZ/relatorios_jasper
RAIZ/temporarios
Daí no seu JSP, na hora de vc gerar o relatório, vc passa esses diretório:
String dir_origem = application.getRealPath("/relatorios_jasper");
String dir_saida = application.getRealPath("/temporarios");
como vc mesmo definiu o nome do arquivo q é gerado e tmb sabe q a pasta esta na raiz, só acessar o a url:
faço um redirect pra isso???