Formas de preenchimento no Jasper Report

Oi galera, to com um seguinte problema. Eu tenho q popular um relatorio no jasper sem poder gerar um result set pra popular o relatorio. Gostaria de saber se existem outras formas, se possivel com exemplos de como fazer, para popular essa tabela, seja via um arquivo qualquer,xml, ou se eu posso atraves de um list com parametros. Minha necessidade era q eu pudesse atraves de uma estrutura poder preencher esse relatorio.Acredito q consigo solucionar via xml,mas se tiver outras formas por favor me ajudem

Abracao.
Daniel

sim Sr. . vc pode fazer por meio de uma collection da uma pesquisada aqui no forum que tem…:wink:

Com beanColleaction não resolve??

Segue uns links que pode te ajudar:

http://www.guj.com.br/posts/list/14172.java
http://www.i-proving.ca/space/Technologies/JasperReports/Using+the+Bean+Collection+Datasource

Oi. Eu verifiquei os links e nao consigo ver um exemplo. Um possui topico onde tb nao tem exemplo e o segundo parece q o servidor onde esta hospedado a pagina nao ta processando o html e nao mostra a hp…rs. Quem por favor tiver um exemplo de bean collection para q eu possa usar.

Obrigado

Oi gente, montei o seguinte codigo e apareceu o seguinte erro :

net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:127) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:100) at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:104) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:799) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:763) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1383) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:889) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:811) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) at JasperListTest.execute(JasperListTest.java:33) at Main.main(Main.java:14) Caused by: java.lang.NoSuchMethodException: Unknown property '' at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122) at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686) at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:115) ... 12 more Exception in thread "main" net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:127) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:100) at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:104) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:799) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:763) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1383) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:111) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:889) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:811) at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601) at JasperListTest.execute(JasperListTest.java:33) at Main.main(Main.java:14) Caused by: java.lang.NoSuchMethodException: Unknown property '' at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1122) at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:686) at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:715) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:290) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:115) ... 12 more

Ja vi no google que geralmente aparece uma tipo dizem qual propriedade deu erro,mas nao meu caso nao esta aparecendo. Eu estou reaproveitando u mrelatorio que criei usando um sql,mas testando ao enviar num array list os campos que preencheriam uma linha desse relatorio. segue o codigo

jasperlisttest.java

[code]import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
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.design.JasperDesign;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.export.JRXlsExporter;

public class JasperListTest {
private List itens;

 public void execute(String nomeRelatorio) throws Exception {
        
               
        try {
            
            LinkedList<Object> listNewResultado = new LinkedList<Object>(this.itens);

            InputStream in = ClassLoader.getSystemResourceAsStream(nomeRelatorio+".jasper");
            
            JasperReport relatorio = (JasperReport) JRLoader.loadObject(in); 
            
           // JasperReport relatorio = JasperCompileManager.compileReport(jasperDesign); 
            
            JasperPrint impressao = JasperFillManager.fillReport(relatorio, null, new JRBeanCollectionDataSource(listNewResultado));
            
            impressao.setLocaleCode(Locale.getDefault().getCountry());
            
            JRAbstractExporter saida = null;

            saida = new JRXlsExporter ();
            saida.setParameter(JRExporterParameter.JASPER_PRINT, impressao);
            saida.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"C://teste_jasper.xls");
            saida.exportReport();
        
         	            
        } catch (Exception ex) {
        
            ex.printStackTrace();
            throw ex;
            
        }
        
    }

    public void setItens(List<Object> itens) {
        this.itens = itens;
    }

}
[/code]

main.java

import java.util.*;
public class Main {
	 public static void main (String[] args)throws Exception
	    {
		 	
		 	JasperListTest relatorio = new JasperListTest();
		 	Cliente c = new Cliente("Oi - Bahia",new java.math.BigDecimal(String.valueOf("553485")),"ANGELA CONCEICAO ANDRADE DIAS    . ANGELA CONCEICAO ANDRADE DIAS",new java.math.BigDecimal(String.valueOf("1234")));      
		 	ArrayList lst = new ArrayList();
           
		 	lst.add(c);
            
            relatorio.setItens(lst);
            relatorio.execute("report5");
            
	    	
	    }
}

daniel.andf,

usa essas duas linhas aqui que resolve, eu também tive um problema desses…

JasperPrint print = JasperFillManager.fillReport(jasperReport, parametros, array);
JasperViewer.viewReport(print, false);

jasperReport = caminho de seu .jasper
parametros = Map com seu parâmetros pro relatório
array = ArrayList de dados para seu relatório

espero ter ajudado, se vc conseguir, posta ai pra gente

qualquer dúvida, estamos ai …

vlw

fala vinidouradoh , nao entendi mt bem a sua solucao…vc quer q eu passe o arraylist direto sem passar como parametro do beancollection? e q parametros sao esses q devo passar como map? eu reaproveitei esse exemplo de outro relatorio onde eu deixava esse campo como null,ja q eu gerava o preenchimento atraves de jdbc

Você queria uma forma diferente de popular um jasper, certo? Eu preencho ele com um arrayList. Eu faço uma pesquisa no banco e jogo em um array e passo para o jasper imprimir. Mas ele precisa saber qual jasper imprimir, por isso você deve passar o caminho do seu jasper. Eu não sei de sua experiência com iReport e jasper, mas você pode passar parâmetros para o relatório, que é justamente o Map. Caso você nao queira passar nenhum parâmetro, basta passar null. Essa é a maneira mais simples que encontrei para gerar um relatório, primeiro que você trabalhar com classes Java e também evita de colocar querys em relatório, já que muitas destas querys têm regra de negócio embutida.

Respondi sua pergunta?? Se nao… posta ai suas dúvidas,

grande abraço

continua o msm erro

mudei a linha

LinkedList<Object> listNewResultado = new LinkedList<Object>(this.itens);   

para

ArrayList listNewResultado = new ArrayList(this.itens); 

daniel.andf,

você já prestou atenção no nome dos campos que você quer imprimir?? O nome dos campos deve ser o mesmo nome dos campos da classe JAVA que está sendo impressa.

Se não foi isso, posta ai a tela se iReport printado e sua classe pra gente da uma olhada.

vlw

Ai eh q esta… O relatorio q eu to usando foi um gerado por um sql. eu posso fazer isso?caso contrario, qual das opcoes posso usar pra poder criar um relatorio. Eu tava usando a opcao java beans collection mas eu nao tenho nenhum bean criado…

daniel.andf,

se vc gerou o relatório via sql, entao os campos do relatorio tem o mesmo nome das colunas de sua tabela, por isso, quando você tenta passar um array, dá erro. Você tá usando o iReport para gerar o .jasper?? O array que você ta passando, é de uma classe de seu projeto, tipo Array<SuaClasse> ??

vlw

Parou de dar erro,mas em compensacao os valores aparecem no relatorio como nulos. Eu preciso gerar um relatorio com objetos em hash map q sao os parametros q recebo de um sistema…segue a modificacao.

Main.java

[code]import java.util.*;
public class Main {
public static void main (String[] args)throws Exception
{

	 	JasperListTest relatorio = new JasperListTest();
	 	//Cliente c = new Cliente("Oi - Bahia",new java.math.BigDecimal(String.valueOf("553485")),"ANGELA CONCEICAO ANDRADE DIAS    . ANGELA CONCEICAO ANDRADE DIAS",new java.math.BigDecimal(String.valueOf("1234")));      
	 	Map lst = new HashMap();
       
	 	
	 	//lst.add(c);
        
	 	lst.put("REGION","Oi - Bahia");
	 	lst.put("ACCOUNT_NO",new java.math.BigDecimal(String.valueOf("553485")));
	 	lst.put("NAME",	"ANGELA CONCEICAO ANDRADE DIAS    . ANGELA CONCEICAO ANDRADE DIAS");
	 	lst.put("PREV_BALANCE",new java.math.BigDecimal(String.valueOf("1234")));
	 	relatorio.setItens(lst);
        relatorio.execute("report5");
        System.out.println("Funcionou");
    	
    }

}
[/code]

JasperListTest.java

[code]import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import net.sf.jasperreports.engine.JRAbstractExporter;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperCompileManager;
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.JREmptyDataSource;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.engine.export.JRXlsExporter;
import java.util.*;
public class JasperListTest {
private Map itens;

 public void execute(String nomeRelatorio) throws Exception {
        
               
        try {
            
        	Map listNewResultado = new HashMap(this.itens);
        	
        	ArrayList lst =new ArrayList();
        	
        	lst.add(listNewResultado);
        	
            InputStream in = ClassLoader.getSystemResourceAsStream(nomeRelatorio+".jasper");
            
            JasperReport relatorio = (JasperReport) JRLoader.loadObject(in); 
            
           // JasperReport relatorio = JasperCompileManager.compileReport(jasperDesign); 
            
            JasperPrint impressao = JasperFillManager.fillReport(relatorio, listNewResultado, new JRBeanCollectionDataSource(lst));
            
            //JasperPrint impressao = JasperFillManager.fillReport(relatorio, listNewResultado);
            
            impressao.setLocaleCode(Locale.getDefault().getCountry());
            
            JRAbstractExporter saida = null;

            saida = new JRXlsExporter ();
            saida.setParameter(JRExporterParameter.JASPER_PRINT, impressao);
            saida.setParameter(JRExporterParameter.OUTPUT_FILE_NAME,"C://teste_jasper.xls");
            saida.exportReport();
        
         	            
        } catch (Exception ex) {
        
            ex.printStackTrace();
            throw ex;
            
        }
        
    }

    public void setItens(Map itens) {
        this.itens = itens;
    }

}
[/code]

desculpa, a linha q esta

JasperPrint impressao = JasperFillManager.fillReport(relatorio, listNewResultado, new JRBeanCollectionDataSource(lst));  

eu coloquei assim

JasperPrint impressao = JasperFillManager.fillReport(relatorio, null, new JRBeanCollectionDataSource(lst));  

oiii sera q alguem pode me ajudar??

daniel.andf,

os valores aparecem nulos em um relatório se ele realmente está nulo ou você nao está passando o campo no seu arrayList. Vale ressaltar que ele faz tipo reflexão, ele pega o nome do atributo da classe e joga no campo de mesmo nome do relatório.

vlw

Entendi vinidouradoh . Só q dessa vez eu tirei a classe q eu tinha usado pra passar parametros. Tipo o sistema q to mexendo me retorma uma matriz de hashmap q tenho q usar como entrada do jrbeancollection, o problema eh q esse objeto nao aceita objeto do tipo hashmap e sim do array,como eu vc sugeriu…porem nao funcionou. Kra sera q vc tem algum exemplo de uma classe onde vc conseguiu rodar?tipo eu ja olhei varias coisas na internet e nada eu consegui botar pra funcionar…Mt obrigado pela força ai q vc ta me dando. Abraço

Boa tarde pessoal,
Estou com o mesmo problema. o mesmo erro: Erro no relatorioNo report compiler set for language : null
A minha classe esta assim

#######Act########

public ActionForward gerarRelatorio(ActionMapping map, ActionForm form,
HttpServletRequest req, HttpServletResponse res) {

	instanceNegocio = new NgcPatrimonio();
	try {
			instanceNegocio.gerarRelatorio();
	}  catch (Exception e) {
		e.printStackTrace();
	}
	return null;
}

#######ngc########
public void gerarRelatorio(){

	try{
		JasperReport pathjrxml = JasperCompileManager.compileReport("/home/Desktop/Relatorio/patrimonioweb2.jrxml");
		JasperPrint printReport = JasperFillManager.fillReport(pathjrxml, null);
		JasperExportManager.exportReportToPdfFile(printReport,"/home/Desktop/Relatorio/patrimonioweb.pdf");
		System.out.println("Relatorio gerado");
	} catch (Exception e) {
		// TODO: handle exception
		System.err.println("Erro no relatorio" + e.getLocalizedMessage());
	}


}

}

Estou com problema em preencher os dados no meu relatório. Quando ele chega no método JasperFillManager.fillReport(pathJasper, parametros, jrDataSourse); quando o relatório não possui gráfico ele passa normal, porem quando o relatório possuiu algum gráfico ele para e não retorna erro nenhum, como se tivesse um break ali no meio.
estou algum tempo tentando fazer isso e até consegui fazer funcionar fora da minha aplicação, mas quando tento importar para a mesma para nesse JasperFIllManager…alguma ideia do que pode ser? Já testei as libs e aparentemente tá tudo certo.

ComposicaoDadosItemGrafico composicao = new ComposicaoDadosItemGrafico();
		ArrayList array = composicao.getArray();
		BufferedImage imagem = GeradorGrafico.gerarGraficoLinha("", "Mês", "Quantidade", array);
		String pathJasper = "/home/report.jasper";
		HashMap<String, BufferedImage> parametros = new HashMap<String, BufferedImage>();
		parametros.put("imagem", imagem);
		
		JRDataSource jrDataSourse = new JRBeanArrayDataSource(array.toArray());
		JasperPrint impressao = JasperFillManager.fillReport(pathJasper, parametros, jrDataSourse);
		
		byte[] bytes = JasperExportManager.exportReportToPdf(impressao);