JasperReports

6 respostas
R

Olá!

Estou começando com o Jasper. Mas tenho uma dúvida:

Já achei diversos relatórios de exemplo, etc, etc. Fiz conexões ao banco com o iReport e tudo. Mas não achei uma forma de gerar um relatório passando parâmetros. Tem como fazer isto? Se meus ‘parâmetros’ estão num objeto, teria que passar este objeto ao .jasper? Mas como passo apenas uma classe? Qual seria a solução para a impressão de dados que tenho numa classe?

Não sei se fui claro…

Grato, Rodrigo

6 Respostas

C

Opa.... falou em falou em relatorios!!! rsrsr

Bem... eles funcionam da seguinte forma...

Vc passa em tempo de execucao para o seu arquivo .jasper montar o relatorios... os paremetros com campos de textos sao associados a objetos q vc passa mesmo, como os objetos q sao resultados da sua coneccao com o BD, certo?

Da uma olhada numa classe bem simples de relatorios...
import java.net.URL;
import java.text.DecimalFormat;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.swing.JOptionPane;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

/**
 * Classe que realmente monta o relatorio
 * Esta possui um metodo que recebera uma Collection
 * Contendo a lista recebida da consulta e entao apresentara
 * em um formulario
 */

public class RelPadrao {
    /**
     * Método responsável por montar o relatório
     * Recebe como parametro a Collection Recebida da 
     * Consulta SQL feita pela repectiva classe invocada
     * na acao do menu Relatorios do formulario principal
     * */
    public void MontaRelatorio( Collection coll ) {
        DecimalFormat formato = new DecimalFormat( "0.00" );
        // Pega o número de registros totais da collection 
        String lanc = formato.format(coll.size() * 7);
       
        // Pega o endereco do .jasper dentro do .jar
        URL arquivo = getClass().getResource("/br/com/urdcnorte/segUnimed/Relatorios/RelJasper/Relatorio.jasper");

        try{
            // Manipula os beans da collection recebida para o relatorio
			JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource( coll );
			
			// Parte de configuraçao do Report
			JasperReport jr = (JasperReport) JRLoader.loadObject( arquivo );
			
			// Parametros do Relatorio
////////// AQUI Q ESTA O PARAMETRO ENVIADO AO RELATORIO//////
			Map parametros = new HashMap();
			parametros.put("totalRel", lanc);
			
			// monta os objetos para Saida para a Tela
	        JasperPrint impressao = JasperFillManager.fillReport( jr, parametros, ds );
	       	// Mostra na tela usando o JasperViewer
		    JasperViewer jrviewer = new JasperViewer( impressao, false );
		    jrviewer.setVisible(true);
        }catch( Exception e ) {
		    JOptionPane.showMessageDialog( null, "Erro:\n" + e.toString());
		    e.printStackTrace();
        }
    }
}

Bem... espero ter ajudado!
Qualquer duvida manda um mail !
Abracao e te +

R

Ratinho,

obrigado pela resposta. Mas meus dados não vem de um BD. Estão em uma classe. O usuário digita e imprimi. Então não tenho collection nenhuma. Apenas uma classe onde estão estes dados.

Terei que fazer isto virar uma Collection para poder imprimir? Não teria como passar a classe p/o jasper e ele montar a partir da classe?

Grato,
Rodrigo

O

Aproveitando a tema:
Alguem me ajuda como configurar o JasperReports 1.0.0 no netbeans?
Quais arquivos preciso ou colocar no CLASSPATH ou no dir “…Java\jdk1.5.0_03\jre\lib\ext”?
Como relacionar o JR com o IReport?

Vlw!

C

“rodrigow”:
Ratinho,

obrigado pela resposta. Mas meus dados não vem de um BD. Estão em uma classe. O usuário digita e imprimi. Então não tenho collection nenhuma. Apenas uma classe onde estão estes dados.

Terei que fazer isto virar uma Collection para poder imprimir? Não teria como passar a classe p/o jasper e ele montar a partir da classe?

Grato,
Rodrigo

Tp… eu gosto d mandar td pra colecction, mas tente usar as passagem d parametros somente, nunca tentei fazer isso, eu prefiro traballhar com collections mesmo!

G

Ola Cassolato, tudo bem?
Há alguma forma de faser sem usar collections, de preferencia String ou Object?

fico no aguardo

M

PEssoal tá dando erro:

import java.net.URL;  
	 import java.text.DecimalFormat;  
import java.util.ArrayList;
	 import java.util.Collection;  
	 import java.util.HashMap;  
import java.util.List;
	 import java.util.Map;  
	   
	 import javax.swing.JOptionPane;  

import to.ClienteTO;
	   
	 import net.sf.jasperreports.engine.JasperFillManager;  
	 import net.sf.jasperreports.engine.JasperPrint;  
	 import net.sf.jasperreports.engine.JasperReport;  
	 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;  
	 import net.sf.jasperreports.engine.util.JRLoader;  
import net.sf.jasperreports.view.JasperViewer;  
	   
	 /** 
	* Classe que realmente monta o relatorio 
	 * Esta possui um metodo que recebera uma Collection 
	 * Contendo a lista recebida da consulta e entao apresentara 
	 * em um formulario 
	 */  
	   
	 public class bla {  
	     /** 
	      * Método responsável por montar o relatório 
	      * Recebe como parametro a Collection Recebida da  
	      * Consulta SQL feita pela repectiva classe invocada 
	      * na acao do menu Relatorios do formulario principal 
	      * */  
	     public void MontaRelatorio( Collection coll ) {  
	         DecimalFormat formato = new DecimalFormat( "0.00" );  
	         // Pega o número de registros totais da collection   
	         String lanc = formato.format(coll.size() * 7);  
	          
	         // Pega o endereco do .jasper dentro do .jar  
	         URL arquivo = getClass().getResource("Teste.jasper");  
	   
	         try{  
	             // Manipula os beans da collection recebida para o relatorio  
	             JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource( coll );  
	               
	             // Parte de configuraçao do Report  
	             JasperReport jr = (JasperReport) JRLoader.loadObject( arquivo );  
	               
	             // Parametros do Relatorio  
	 ////////// AQUI Q ESTA O PARAMETRO ENVIADO AO RELATORIO//////  
	             Map parametros = new HashMap();  
	             parametros.put("nome", "Eu");  
	               
	             // monta os objetos para Saida para a Tela  
	             JasperPrint impressao = JasperFillManager.fillReport( jr, parametros, ds );  
	             // Mostra na tela usando o JasperViewer  
	             JasperViewer jrviewer = new JasperViewer( impressao, false );  
	             jrviewer.setVisible(true);  
	         }catch( Exception e ) {  
	             JOptionPane.showMessageDialog( null, "Erro:\n" + e.toString());  
	             e.printStackTrace();  
	         }  
	     }  
	     public static void main(String[] args) {
	    	 ClienteTO c = new ClienteTO();
	    	 c.setNome("Marciano");
	    	 List listaLivros = new ArrayList();
	    	 listaLivros.add(c);
	 		new bla().MontaRelatorio(listaLivros);
	 	}

}

java.lang.NullPointerException at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:145) at bla.MontaRelatorio(bla.java:50) at bla.main(bla.java:72)

Criado 21 de agosto de 2005
Ultima resposta 8 de ago. de 2009
Respostas 6
Participantes 5