Jasper Reports/iReport

Olá galera!

Preciso criar alguns relatorios gerenciais e pelo que vi o JasperReport seria a melhor solução, por ser open source e também muito flexivel.

Acontece que já andei lendo varios tutoriais na net e não consigo chegar a um resultado positivo.

Gostaria que vocês me ajudassem a descobrir onde está o erro.

Estou utilizando NetBeans 4.1
Java 1.4.2
Jasper Report 1.1.1 (com a ultima versão 1.2.3 ocorre o mesmo erro)

iReport para criar o visual do relatorio.

Criei um relatorio teste no iReport e compilei, gerando assim 2 arquivos:
classic.jrxml e classic.jasper

Depois criei a seguinte classe:


import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;
import net.sf.jasperreports.engine.design.*;


import java.sql.*;
import java.io.*;
import java.util.*;

public class Main {

    private static Connection getConnection( ) throws
            ClassNotFoundException, SQLException

            {
                String driver = "com.mysql.jdbc.Driver";
                String url = "jdbc:mysql://localhost/indicador";
                String user = "root";
                String password = "root";
                Class.forName(driver);
                Connection con = DriverManager.getConnection( url, user, password );
                return con;
            }

    
public void geraRelatorio( ) throws JRException, Exception
{
                Connection con = getConnection( );
                Statement stm = con.createStatement( );
                String query = "select * from alunos";
                ResultSet rs = stm.executeQuery( query );
                
               //implementação da interface JRDataSource para DataSource ResultSet
		JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
                
                JasperDesign jasperDesign = JasperManager.loadXmlDesign("c:/classic.xml");
                JasperReport jasperReport = JasperManager.compileReport(jasperDesign);
   
		//executa o relatório
		Map parametros = new HashMap();
		parametros.put("nota", new Double(10));

		/* Preenche o relatório com os dados. Gera o arquivo BibliotecaPessoal.jrprint    */
		JasperFillManager.fillReportToFile( "c:/classic.jrprint", parametros, jrRS );
  
		/* Exporta para o formato PDF */
		JasperExportManager.exportReportToPdfFile( "c:/MEUPDF.PDF" );
	
               
}

                public static void main(String[] args) throws JRException, Exception
                {
                            Main m=new Main();
                            m.geraRelatorio();
                }

} 

O erro é este aqui:

java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
        at net.sf.jasperreports.engine.JasperManager.loadXmlDesign(JasperManager.java:971)
        at Main.geraRelatorio(Main.java:38)
        at Main.main(Main.java:57)
Exception in thread "main" 
Java Result: 1

Será possivel que terei que “jogar” este pacote em meu classpath??
Isto não já deveria estar empacotado com o JasperReport???

Será que estou fazendo a coisa da maneira correta?

Ficaria muito agradecido se alguém pudesse me ajudar…

Um forte abraço a todos!!

Aganiuipuque,

Dá uma olhada neste tutorial, ao invés de vc utilizar o “loadXmlDesign” vc pode abrir direto o arquivo .jasper
http://www.furutani.eti.br/MostrarArtigo.action?codigo=5

ASOBrasil

Cada .jar da pasta jasperreports/lib tem uma funcionalidade distinta. Portanto se precisar de um recurso (classe ou funcionalidade) específico deveria estar acessivel ao seu programa conforme a necessidade. Por exemplo essa, a loadXmlDesign, que precisa da Digester.
Essa classe não encontrada é a commons-digester-#.#.jar que tb esta no jasperreports/lib e deve ser ‘alcançada’ pelo teu JRE de alguma maneira (no classpath ou jre/lib).

Pois então…

Não acho normal eu ter que colocar o commons-digester no classpath, uma vez que já coloquei o jasper.jar lá…

Muito estranho, isto.

Será que existe alguma forma especifica de se fazer isto no NetBeans??

eu apenas coloquei o .jar lá em Library Manager e apontei para o meu projeto.

Alguém já teve esta experiencia??

Eu uso o iReport 0.5.1 e no diretório lib da instalação tenho os seguintes (porrilhão de) jars

barbecue-1.1.jar bsh-1.3.0.jar commons-beanutils-1.5.jar commons-collections-2.1.jar commons-digester-1.7.jar commons-logging-1.0.2.jar commons-logging-api-1.0.2.jar groovy-all-1.0-beta-10.jar hsqldb-1.61.jar itext-1.3.1.jar jasperreports-1.0.1.jar jcmdline-1.0.2.jar jcommon-1.0.0-rc1.jar jdt-compiler.jar jfreechart-1.0.0-rc1.jar jr-bsh-compiler.jar jr-groovy-compiler.jar log4j-1.2.8.jar looks-1.2.2.jar mysql-connector-java-3.0.8-stable-bin.jar pngencoder.jar poi-2.0-final-20040126.jar tinylaf.jar xalan.jar xercesImpl.jar xml-apis.jar LICENSE.barbecue.txt LICENSE.bsh.txt LICENSE.commons.txt LICENSE.groovy.txt LICENSE.hsqldb.txt LICENSE.itext.txt LICENSE.jasperreports.txt LICENSE.jcommon.txt LICENSE.pngencoder.txt LICENSE.poi.txt LICENSE.xalan.txt LICENSE.xerces.txt copy_here_tools.jar.txt iReport.jar ojdbc14.jar

A questão é que, basicamente, todos os recursos do JasperReports não estão contidos em um unico e simples .jar!
Por exemplo: caso eu não exporte relatórios para PDF não tenho a necessidade de levar para os clientes a itext-1.3.1.jar, que é a biblioteca responsavel por criar PDFs. Me poupando 1.5MB que nunca seriam necessarios.

No NetBeans eu recomendo que tu faça o seguinte:

  1. Descompcate a jasperreports-1.2.2-project para alguma pasta tipo MinhasLibs\jasperreports
  2. No NetBeans->Tools->Library Manager crie uma New Library… do tipo Class Libraries chamada JasperReports (ou qualquer outro nome)
  3. No Classpath da lib criada adicione todos os MinhasLibs\jasperreports\lib*.jar e adicione também o MinhasLibs\jasperreports\dist\jasperreports-#.#.#.jar ao Library classpath
  4. No Source adicione a pasta MinhasLibs\jasperreports\src ao Library Source
  5. E no Javadoc adicione a pasta MinhasLibs\jasperreports\docs\api no Library Javadoc

Já no teu projeto->Properties->Libraries adicione ao Compile e ao Run a library JasperReports recem criada.

Assim conforme o tipo de projeto que tu iniciou, o NetBeans se encarrega (ele é ótimo nisso) de assinar, empacotar, e organizar (etc) todas os .jar conforme o uso do teu projeto.

Alguem aqui usa o jboss em servidor linux, como o servidor web.
Na minha maquina de trabalho é xp com tomcat, e os relatorios saem blz, entao nao sei bem o que fazer, se alguem tiver alguma ideia.

[quote]Alguem aqui usa o jboss em servidor linux, como o servidor web.
Na minha maquina de trabalho é xp com tomcat, e os relatorios saem blz, entao nao sei bem o que fazer, se alguem tiver alguma ideia.[/quote]

claudio_ts_ma, se vc está com algum problema ou alguma dúvida seja mais expecifico! de preferencia crie um novo tópico sobre a questão. (pesquise antes para ver se ninguem ja postou algo relacionado!)

Minha duvida é sobre o que eu tenho acrescentar ou configurar para que o jboss no suse, faça a mesma coisa que o tomcat no xp faz, porque meus relatorios rodam de boa na minha maquina e servidor linux, nada nao sei o que tenho que configurar no linux para o meus relatorios abrirem de boa.

blz, desde já agradeço muito se alguem responder.

Boa Tarde, galera !

Bom… estou com o mesmo problema que o nosso amigo Aganiuipuque…

Eu to usando o iReport 1.2.5 para criar meus relatório e arquivos .jasper
Pego os .jasper e coloco no Servidor para que possam ser acessados pela aplicação JAVA…

As coisas funcionam bem… ele localiza o arquivo, exibe op relatório no JRView… mas na hora que eu pesso para salvar o arquivo em PDF ou mesmo em XLS não da certo… ocorre o erro de metodo nao encontrado… Eu sei que eh falta de lagum .jar, mas o problema e descobrir qual e como referencia-lo corrtetamente… no meu caso, to fazendo o seguinte…

Vou no ECLIPSE e importo o .jar que preciso para o projeto… coloco esses .jar em uma pasta especifica… de modo que fiquem todos juntos…

Depois, vou nas propriedades do projeto onde estão listados todos os .jar referenciados… e adiciono ele ali…

Até o momento resolvi uma série de erros… mas ainda nao consegui o que quero… que eh salvar o relatório em PDF ou XLS… eu tentei fazer isso pelo próprio iReport 1.2.5 e funciona direitinho… então, pq meu projeto não pode fazer o mesmo ?? ^^

Eu vi em vários foruns falando sobre os .jar utilizados para gerar o relatório… mas nenhum me ajudou…

Como minha “última” tentativa… estou importanto para o meu projeto .jar a .jar da pasta /lib do iReport…

Comecei pelas que encotrei em outros foruns que são:
.log4j.jar
.groovy-all.jar
.commons-digester.jar
.commons-logging-api.jar
.jdt-compiler.jar
.itext.jar
.xmlParserAPIs.jar
.Verisign.jar
.iReport.jar
.jasperreports.jar
.jakarta-poi-final-20020615.jar

Não coloquei as versões dos .jar porque eu não tenho certeza se estão corretas, ou se realmente esses são os .jar necessários… mas aconselho a utilizar sempre os .jar de mesma /lib do iReport…

Se alguém souber a utilidade de cada .jar… por favor nos avise ! Uma delas ja foi dita em um dos post…

itext.jata - utilizado para gerar PDF entre outros…

Porém, tenho esse .jar referenciado no meu projeto e continuo com problemas para gerar o relatório… =[

fui !

Olha os jars necessários. Vc encontra todos eles na pasta lib do ireports.

http://jasperreports.sourceforge.net/requirements.html

Falow!

Olá povo…

davidbuzatto, eu fiz o que vc indicou… olhei no site do sourceforge e ate baixei a versão mais atual do jar iText…

Adicionei ele ao meu projeto, mas continuo com problemas…

Por fim… acabei importando ao meu projeto todos os arquivos .jar dentro da pasta lib do iReport 1.2.5 ^^ (Uso a jdk 1.4)

Rodei a aplicação, executei o relatorio… apareceu no JRViewer numa boa… tudo perfeito ate ai…

Ai, quando vou no salvar da janela do proprio JRViwer e escolho a opção PDF…

Ele me da erro de metodo nao encontrado… :? (Kraca, como pode se eu adicionei todos os .jar ao projeto… pqp ! )

A parte do meu código que gera o relatorio eh o seguinte:

package minha.aplicacao.report;

import java.sql.*;
import java.util.*;
import java.math.*;
import java.net.*;
import java.io.*;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.view.JasperViewer;
 
public class VisualizarRelatorio{
...
  public VisualizarRelatorio() {}

  protected String doIt() throws java.lang.Exception {
    JasperPrint printout = null;

    try
    {
   
//   String reportAccess
      String reportURL = reportHost.trim();
      reportURL = "file:///C:/iReport-1.2.5/Relatorios/MW_Teste.jasper";

      URL url = new URL(reportURL);

      URLConnection connection = url.openConnection();

      connection.setDoOutput(false);

      InputStream is = connection.getInputStream();

      printout = JasperFillManager.fillReport(is, parameters, 
                     getConnectionRW());

      is.close();

    }
    catch (Exception e) {
     ///...
    }

    try {
        JasperViewer.viewReport(printout, false); //abre o JRViewer
    }
    catch (Throwable t) {
         t.printStackTrace();
    }
   return "OK";
  }

Ele executa essa parte numa boa… o erro aparece quando pesso para salvar em PDF pela tela do JRViewr:

java.lang.NoSuchMethodError: com.lowagie.text.pdf.PdfContentByte.transform(Ljava/awt/geom/AffineTransform;)V at net.sf.jasperreports.engine.export.JRPdfExporter.exportText(JRPdfExporter.java:1543) at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:549) at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:513) at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:478) at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:288) at net.sf.jasperreports.view.save.JRPdfSaveContributor.save(JRPdfSaveContributor.java:109) at net.sf.jasperreports.view.JRViewer.btnSaveActionPerformed(JRViewer.java:1020) at net.sf.jasperreports.view.JRViewer$2.actionPerformed(JRViewer.java:574) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

Como ele nao encontra o metodo, se importei todfos os .jar ??? Q droga… e o pior eh q se eu gero o relatorio pelo iReport mesmo… e pesso pra salvar em PDF ou qlqr coisa q seja… da certo… jah pelo JRViewer da aplicação… não=[

desde jah, vlw !

Bom… descobri o que acontece… mas n sei como resolver… por isso venho pedir ajuda !!! ^^

Eu acabei criando um aplicação bem simples com acesso a banco e geração de relatório…

Deu certinho… ele imprime e gera arquivos com extensão PDF pelo save do JasperViewer…

Os .jar que utilizei são:
.commons-collections-2.1.jar
.commons-logging-1.0.2.jar
.jasperreports-1.2.5.jar
.itext-1.3.1.jar
.commons-javaflow-20060411.jar
.commons-beanutils-1.5.jar
.log4j-1.2.8.jar (soh pra reportar os erros !)

Ai… voltei na aplicação com erro e coloquei os mesmos .jar… soh q ao exibir a tela do JasperViewer… ela me aparece com a versão 0.5.3 do iReport… o.O

Pois eh… agora não sei onde preciso alterar para que ele exiba corretamente, pois jah mudei todos os .jar ligados ao relatório…

Se alguém tiver uma sugestão… agradeço !

Viva… consegui resolver o problema ! =]

Estava com problema de versão, não nos .jar, mas no relatório…

Os .jar q estava utilizando eram do iReport 1.2.5, porém, os relatórios do sistema foram feitos no 0.5.3

Como o 1.2.5 compila com jsdk 1.5 eu mudei todos os .jar para o iReport 0.5.3 e recompilei os relatórios…

Agora ele mostra no JRViewer e tb salva em PDF… =]

show !

P.S.: Quero ver agora pra gerar XML =[

amigos…

qdo eu clico com o botao direito em libraries do projeto e peço para adicionar a biblioteca jasperreports, ele nao adiciona a biblioteca e nao da erro algum…

alguem sabe o q pode ser???

conto com vcs…

obrigado!