JSP + IReport

33 respostas
G

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???

33 Respostas

T

é meio antigo, mas pode te ajudar…

http://www.furutani.eti.br/tutoriais/Mini-Tutorial_Relatorios_Java_JasperReports_e_iReport.pdf

G

nada… mais alguem ???

G

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

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!

G

mais alguem?

M

Poste a exceção p/ gente dar uma olhada

G
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
D

Escrevi a seguinte classe. Acredito que vc não terá problemas:

Relatorio.java

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

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  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!! :wink:

G

Tem como postar as bibliotecas jasper que você usou para esse exemplo?

D

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

G

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???

G

???

G

Resolvido…

alg ja viu esse exception ???

G

java.lang.NoSuchMethodError: com.lowagie.text.Image.plainWidth()

D

Tenha paciencia amigo… além de trabalhar eu tmb almoço como todo mundo… :slight_smile:

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

D

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.

G

Está gerando perfeitamente !!! Muito obrigado !!! Nem sei como agradecer…

Uma ultima dúvida como faço para abrir o pdf que é gerado ???

D

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:

http://www.blablabla.com.br/temporarios/meurelatoio.pdf

G

faço um redirect pra isso???

G

tem como fazer pelo jasper pois mais de uma pessoa pode acessar o relatorio ao mesmo tempo.

D

Como assim pelo jasper? Não entendi… Se vc estiver se referindo aquele visualizador que tem no ireports (JRViewer), não é possivel, pois ele é só para aplicações locais.

Por este motivo que no exemplo eu sempre gero um arquivo com a data e hora da geração.

se o usuário 1 mandar gerar o relatório ás 04/11 15:34:00 e o usuario 2 mandar gerar 1 segundo depois, ele não vai sobrescrever o anterior, pois o nome estará diferente:

meuRelatorio_04_11_15_34_00
meuRelatorio_04_11_15_34_02

Se vc tem mesmo MUITOS acessos, que em questão de 1 segundo ainda corre o perigo de sobrescrever o relatorio, vc pode tentar apelar pra, além dos segundos, colocar centésimos, milésimos, etc…

ou vc podeconcatenar tmb o nome do usuario no nome do arquivo, aí se os dois usuarios realmente derem a sorte de mandar gerar ao mesmo tempo, não terá problemas:

user1_MeuRelatorio_04_11_15_34_00
user2_MeuRelatorio_04_11_15_34_00

G

e como eu posso abrir esse relatorio ???

D

Passa o a URL do arquivo gerado pro usuario clicar e abrir…

http://www.blablabla.com.br/temporarios/NomeDoRelatorioGerado

ou então no seu próprio JSP, após gerado o arquivo PDF, redireciona o usuario para o arquivo usando sendRedirect…

provavelmente o relatorio será aberto no Acrobat do usuario…

G

como eu faço via sendredirect???

D

response.sendRedirect(“temporarios/relatorio.pdf”);

ou

response.sendRedirect(“http://www.site.com.br/temporarios/relatorio.pdf”);

L

Aproveitando o post…
Estou com problemas para a criação do relatorio “zebrado”.
A solucao do retangulo atrás dos fields não serve pois meus fields podem esticar se excederem,entao o retangulo nao ira se adequar.
Imaginei uma solucao onde pudesse acessar via codigo o background do field para setar cor ou nao mediante um teste.
Alguem já fez algo que nao seja isso do retangulo?
Aguardo ajuda :stuck_out_tongue:

L

Já consegui fazer o zebrado :lol:

L

http://www.guj.com.br/posts/list/108763.java :wink:

D

Bom, no meu caso o problema é outro:

HTTP Status 500 -

type Exception report

org.apache.jasper.JasperException: An exception occurred processing JSP page /imprimir001.jsp at line 27

24: parameters.put("pdirectory", application.getRealPath(""));
25:
26: byte[] bytes =
27: JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);
28:
29: response.setContentType("application/pdf");
30: response.setContentLength(bytes.length);

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)

O código que estou usando é este:
<%@page contentType="text/html" pageEncoding="iso-8859-1"%>
<%@page import="java.util.HashMap,java.util.Map,
net.sf.jasperreports.engine.*,net.sf.jasperreports.view.JasperViewer"%>
<%@page import="database.Conexao"%>
<%@page import="java.sql.*"%>
<%@page import="java.io.*"%>

<%
String imprimir = request.getParameter("imprimir");
 if (imprimir != null) { 

Connection conn = Conexao.getConection();
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
   pstmt = conn.prepareStatement("SELECT * FROM voluntapae WHERE idvolunt = ?");
   pstmt.setObject(1, imprimir);
   rs = pstmt.executeQuery();
   rs.next();

   File reportFile = new File(application.getRealPath("/reports/volunt.jasper"));

   Map parameters = new HashMap();
   parameters.put("pcd_slip", imprimir);  // o que eu faço aqui?
   parameters.put("pdirectory", application.getRealPath(""));  // e aqui?

   byte[] bytes =
     JasperRunManager.runReportToPdf(reportFile.getPath(), parameters, conn);   // mostra erro nesta linha

   response.setContentType("application/pdf");
   response.setContentLength(bytes.length);
   ServletOutputStream ouputStream = response.getOutputStream();
   ouputStream.write(bytes, 0, bytes.length);
   ouputStream.flush();
   ouputStream.close();
   
   rs.close();
}
catch(Exception e){
    response.sendRedirect("msg_err.jsp");  // caso haja erro, vai pra outra página
    out.println(e);
} // catch
finally {
   if (conn != null) conn.close();
}
}
%>

Faz muito tempo que eu utilizei o IReport, então por isso estou sem prática.

O select no IReport deve ser com cláusulas WHERE recebendo parâmetros com ? ou apenas o select puro?
É que vou utilizar o IReport capturando parâmetros de um link de imprimir, daí não sei se o select pra apenas uma linha da tabela deve ser no IReport ou na página.

Espero uma contribuição de vocês.

Obrigado.
[]s

A

Alguns métodos mudaram de nome por uma questão de consistência. Neste caso o
novo nome é getPlainWidth().

qualquer coisa substitua a biblioteca do iText denovo e cola uma nova lá

A

Alguns métodos mudaram de nome por uma questão de consistência. Neste caso o
novo nome é getPlainWidth().

troque sua bliblioteca do iText e cole uma novinha la tbm

L

bem… até onde eu sei no where voce nao coloca a “?”, mas sim um paramêtro criado lá no iReport.Tenta dessa forma
Espero ter ajudado :smiley:

C

Vc quer dizer parâmetros assim:

No assistente de novo documento, adicione uma query normal, depois
em Data e clique na opçãp Query do Relatório

Na caixa de Query do Relatório, clique no botão Query Designer.
Na caixa de diálogo SQL Query Designer, no quadro a direita, na tabela onde receberá o parâmetro, clique com o botão direito do mouse sobre o campo algumacoisaID. No menu de contexto, selecione o item add where condition.

Ao surgir a caixa de diálogo Condição do resultado, digite na área de texto, abaixo da palavra subquery:

$P{PAR_PEDID}

Você vai precisar dos seguintes JARS:

1. commons-beanutils-1.7.jar 2. commons-collections-2.1.jar 3. commons-digester-1.7.jar 4. commons-javaflow-20060411.jar 5. commons-logging-api-1.0.2.jar 6. itext-1.3.1.jar 7. jasperreports-2.0.2.jar

O código pra acesso do Relatório é:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class Main {

	public static void main(String[] args) {
		Connection conn = null;

		try {
			 //cria a conexão com o banco de dados
			Class.forName("com.mysql.jdbc.Driver");
			String db = "jdbc:mysql://localhost:3306/relatorios";
			conn = DriverManager.getConnection(db,"root","123456");

			System.out.println("Gerando relatório...");

			HashMap<String, Integer> parameterMap = 
						new HashMap<String, Integer>( );
			 //o Nome do parâmetro e o valor é passado ao HashMap
			parameterMap.put("PAR_PEDID", 10248);

			 //pega o caminho físico até o arquivo .jasper
			String arquivo = System.getProperty("user.dir") + "/relatorios/relatorio.jasper";
 //chama fillReport
			JasperPrint jp = JasperFillManager.fillReport(arquivo, parameterMap, conn);  // quando executo, mostra erro aqui

			 //exibe o relatório com viewReport
			JasperViewer.viewReport(jp, false);
            
		} catch (SQLException ex) {
            ex.printStackTrace();
		} catch (ClassNotFoundException ex) {
            ex.printStackTrace();
		} catch (JRException e) {
            e.printStackTrace();
		} finally {
            try {
                if (!conn.isClosed()) {
                    conn.close();
                }
                System.out.println("Finalizado!");
            } catch (SQLException ex) {}
		}
	}
}

Mas nunca conseguir executar oO

Ele gera erro na linha 31

As únicas mensagens mostradas na tela são: Gerando relatório... e Finalizado!

Excessões:

java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.engine.base.JRBaseRectangle to field net.sf.jasperreports.engine.base.JRBasePen.penContainer of type net.sf.jasperreports.engine.JRPenContainer in instance of net.sf.jasperreports.engine.base.JRBasePen
	at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2032)
	at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1951)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
	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 java.util.ArrayList.readObject(ArrayList.java:593)
	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 java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1846)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
	at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
	at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
	at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1945)
	at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1869)
	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:88)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:232)
	at Main.main(Main.java:31)

Sou novo aqui no fórum e também sou novo em JAVA.
E este exemplo é para classes java e não para JSP.
Também gostaria de ver um exemplo simples para visualizar e poder escolher quais formatos imprimir para web com JasperView.

Algum membro possui algum conhecimento para nos ajudar?

Grato pela atenção!

Até.

Criado 3 de novembro de 2008
Ultima resposta 21 de fev. de 2009
Respostas 33
Participantes 9