Exemplo de iReport com Bean

19 respostas
G

Ola pessoal, eu gostaria de saber como faço pra usar a class: “eJRBeanArrayDataSource” do Jasper. Mas especificamente, como faço no ireport, pra pegar os dados vindo do array?
Alguem tem algum exemplo?

19 Respostas

aborges

Vc jah havia perguntado isso em outro lugar heim .... :?

JRExporter exporter;
			exporter = new JRPdfExporter();
			JasperPrint print;
			OutputStream fos = null;
			
			List beans = new ArrayList();
			SeuBean seuBean;
			
		       seuBean = new seuBean();
		       seuBean.setProp1("prop1");
		       beans.add(seuBean);
			
			
			JRDataSource jrds = new  
                                JRBeanArrayDataSource(beans.toArray()); 
		
			try{
	
				//Preenche o Relatorio
				print = JasperFillManager.fillReport(
                                               "caminhoDoJasper.jasper",
						null, 
						jrds);
				//Exporta o Relatorio
				fos = new FileOutputStream("c:\tmp\saida.pdf");				
                                exporter.setParameter(
                                   JRExporterParameter.OUTPUT_STREAM,fos);
                                exporter.setParameter(
                                   JRExporterParameter.JASPER_PRINT,print);
                                exporter.exportReport();
                                fos.close();
			}catch(Exception e){
				e.printStackTrace();
			}finally{
				try{
					if(fos!=null)fos.close();
				}catch(Exception e){}
			}

No IReport basta vc criar os parametros manualmente ( devem ser do mesmo tipo e possuir o mesmo nome do Bean )

G

“aborges”:
Vc jah havia perguntado isso em outro lugar heim … :?

No IReport basta vc criar os parametros manualmente ( devem ser do mesmo tipo e possuir o mesmo nome do Bean )

Valeu aborges, desculpe perguntar em dois lugares diferente.
Só mais uma pergunta. Por exemplo no Header bno ireport, vai ter um valo q vai vir do bean, e no detail, ,vai ter outro. minha duvia é a seguinte: Como é feito o loop para gerar o detail, ,isso é feito automatico pelo irepot? O seja, basta eu passar o Array de Bean, dai lá ele interpreta isso?
Deslvupem se eustor perguntando besteira, mas eu spi LEIGO.
Valeu galera :!:

aborges

A lista de beans representa seu DataSet… Cada bean da lista representa um registro, como c vc tivesse realmente feito uma query tipo:

Select a,b,c from tabela

Dataset:
a ; b ; c
1 ; 1 ; 1
2 ; 2 ; 2

Sua lista de beans analoga ficaria assim ( onde cada bean possui as propriedades a, b e c):

Lista:

bean;

bean;

bean;

C vc colocar seus itens no Detail do jasper, ele faz o loop sozinha. Porem caso vc queira uma implementação mais sofisticada, vc deve ler o manual e ver o que atende sua necessidade.

Colocar o valor no Header tah me cheirando q vc quer um Group, certo? No IReport dah pra vc implentar isso no Jasper. Dah uma olhada q eh mole,mole ! :smiley:

marcioa1

Tentei a solução acima, mas na hora de gerar o pdf tenho dois campos com valor null ( instanciei e passei dois beans ) .

Tentei criar o relatorio no iReport cirando parâmetros com os mesmos nomes e tipo do bean.

$P{nome}

Preciso de uma conexão no iReport ? Preciso no iReport dizer quel é o bean ? Quando compilo meu relatório, ele gera um arquivo chamado “teste”, e não “teste.jasper”. Isto indica algum problema ?

Obrigado,

Márcio

marcioa1

Já descobri !

não era um $P e sim um $F

Obrigadíssimo e desculpa a amolação,

Márcio

D

Consegui passar o Arraylist, mas to com outro problema agora

Ta aparecendo todo os dados da list na mesma linha, e a quantidade de vezes dos dados, tipo

13:00 - 1, 17:00 - 1, 21:00 - 1
13:00 - 1, 17:00 - 1, 21:00 - 1
13:00 - 1, 17:00 - 1, 21:00 - 1

quando era para aparecer

13:00 - 1
17:00 - 1
21:00 - 1
ArrayList Fita = new ArrayList();
Código:

JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(Fita); 
Map parameters = new HashMap(); 
parameters.put("Fita",""+Fita.get(1));         
JasperPrint jprint = JasperManager.fillReport("Prog.jasper", parameters, jr); 
 JasperViewer.viewReport(jprint,false);
D

mandei errado esta linha, no post, ms o erro eh esse mesmo, problemas

parameters.put("Fita",""+Fita);
T

Olá.
EU estou tentando usar o JRBeanCollectionDataSource no meu relatorio. Eu até estou conseguindo usar…ele imprime os dados e tal. Mas ele imprime cada objeto,do ArrayList de objetos, em uma página. Eu gostaria que ele imprimisse os dados na mesma pagina.
Vcs sabem como contornar isso?

marcioa1

teteorp,

Você abriu o iReoprt e colocou o campo no lugar certo ? é na faixa Detail.

Márcio

T

Sim, eu coloquei os campos ($F{}) na banda detail. Mas devido ao fato de meu ArrayList ter 2 objetos ele os colocou em paginas distintas…Eu queria que eles fossem impressos uim embaixo do outro…

[]´s

marcioa1

teteorp,

Quando eu fiz eu passei um HashMap como parâmetro. Cada item do hashMap era um bean correspondente aos campos do detail. Não sei como fazer com ArrayList.

Márcio

T

Entao…com o HashMap eu ja tenho alguns campos que eu passo. Este eh o segundo parametro do metido fillreport. O que eu estou fazendo eh declarar um JRBeanCollectionDataSource e construindo um objeto como este e passando meu ArrayList como parametro para este construtor.
Entao eu passo o BeanCollection como o terceiro parametro do fillreport. Aí, vc tem que colocar os fields correspondentes com os atributos dos objetos no relatorio. O problema eh que esta vindo com duas páginas…os dados estao sendo impressos de boua.

[]´s

Valeu pela atenção

M

Ola Galera,
estou tentando fazer o exemplo colocado no topico, mas esta dando um erro, o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
at br.com.relatorio.TesteRelatorioComBean.(TesteRelatorioComBean.java:32)
at br.com.relatorio.TesteRelatorioComBean.main(TesteRelatorioComBean.java:74)

nao sei oq pode ser mas estou mandando meu codigo para quem verem onde eu estou errando.

valew pela forca!!!!

abs
public class TesteRelatorioComBean {
	
	public TesteRelatorioComBean(){
		
		JRExporter jrpdf = new JRPdfExporter();
		
		JasperPrint print;
		OutputStream fos = null;
		List beans = new ArrayList();
		
		ClienteBean cb = new ClienteBean();
		cb.setId_cliente(1);
		cb.setNome("Thiago Silva");
		
		beans.add(cb);
		
		JRDataSource jrds = new JRBeanArrayDataSource(beans.toArray());
		
		try{
			print = JasperFillManager.fillReport("C:\\desen\\tools\\iReport-1.2.0\\teste_raeal1.jasper", null, jrds);
			
			fos = new FileOutputStream("C:\\desen\\tools\\iReport-1.2.0\\teste_raeal1.pdf");
			
			jrpdf.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);
			
			jrpdf.setParameter(JRExporterParameter.JASPER_PRINT, print);
			
			jrpdf.exportReport();
			
			fos.close();
		}
		catch (Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				if(fos != null)
					fos.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		new TesteRelatorioComBean();
		System.out.println("Fim");
	}
}
C

Galera Blz!
Eu sou iniciante com o Ireport e eu queria saber como fazer pra pegar um arquivo de image via InputStream e colocar no relatorio que estou construindo no Ireport. Alguem pode me dar uma forcinha e me dizer o passo a passo pois tentei configurar e a imagem não aparece.
Desde já obrigado.

rosenhaim
mek:
Ola Galera, estou tentando fazer o exemplo colocado no topico, mas esta dando um erro, o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException
at br.com.relatorio.TesteRelatorioComBean.(TesteRelatorioComBean.java:32)
at br.com.relatorio.TesteRelatorioComBean.main(TesteRelatorioComBean.java:74)

nao sei oq pode ser mas estou mandando meu codigo para quem verem onde eu estou errando.

valew pela forca!!!!

abs
public class TesteRelatorioComBean {
	
	public TesteRelatorioComBean(){
		
		JRExporter jrpdf = new JRPdfExporter();
		
		JasperPrint print;
		OutputStream fos = null;
		List beans = new ArrayList();
		
		ClienteBean cb = new ClienteBean();
		cb.setId_cliente(1);
		cb.setNome("Thiago Silva");
		
		beans.add(cb);
		
		JRDataSource jrds = new JRBeanArrayDataSource(beans.toArray());
		
		try{
			print = JasperFillManager.fillReport("C:\\desen\\tools\\iReport-1.2.0\\teste_raeal1.jasper", null, jrds);
			
			fos = new FileOutputStream("C:\\desen\\tools\\iReport-1.2.0\\teste_raeal1.pdf");
			
			jrpdf.setParameter(JRExporterParameter.OUTPUT_STREAM, fos);
			
			jrpdf.setParameter(JRExporterParameter.JASPER_PRINT, print);
			
			jrpdf.exportReport();
			
			fos.close();
		}
		catch (Exception e){
			e.printStackTrace();
		}
		finally{
			try{
				if(fos != null)
					fos.close();
			}
			catch(Exception e){
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String[] args) {
		new TesteRelatorioComBean();
		System.out.println("Fim");
	}
}

Para esse erro eu importei(coloquei no classpath/caminho de construção): itext-1.x.x.jar e resolveu
Tmb estou com problemas na geração dos arquivos meu pdf aparece sem anda ele até é criado mas qd verifico está em branco...

vcsmetallica

Galera, os meus PDF’s estao vindo em branco tambem. Na tag DATAIL esta tudo em branco. Alguem sabe o por que disso. Fiz os exemplos que os colegas postaram neste topico.

Ricardo_Passinho

Ninguêm tem um turtorial simples do jasper report com ultilizando uma arquitura simples MVC.

d34d_d3v1l

Este tópico morreu?
Também gostaria de saber sobre algum tutorialzin…

É por que criei um plano de contas que não será possível montar a partir de querys do banco…
é por que:

Plano de contas possui ArrayList de Grupo.
Grupo possui arrayList de subgrupo
SubGrupo possui arrayList de conta-a-pagar e conta-a-receber.

Fodástico! ;(
Abraços

leoramos

mek:
Ola Galera,
estou tentando fazer o exemplo colocado no topico, mas esta dando um erro, o seguinte erro:

Exception in thread “main” java.lang.NoClassDefFoundError: com/lowagie/text/DocumentException

Tá faltando o iText.jar nas tuas libs, fera!

Criado 22 de abril de 2004
Ultima resposta 15 de jun. de 2011
Respostas 19
Participantes 12