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?
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...
importjava.net.URL;importjava.text.DecimalFormat;importjava.util.Collection;importjava.util.HashMap;importjava.util.Map;importjavax.swing.JOptionPane;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource;importnet.sf.jasperreports.engine.util.JRLoader;importnet.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 */publicclassRelPadrao{/** * 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 * */publicvoidMontaRelatorio(Collectioncoll){DecimalFormatformato=newDecimalFormat("0.00");// Pega o número de registros totais da collection Stringlanc=formato.format(coll.size()*7);// Pega o endereco do .jasper dentro do .jarURLarquivo=getClass().getResource("/br/com/urdcnorte/segUnimed/Relatorios/RelJasper/Relatorio.jasper");try{// Manipula os beans da collection recebida para o relatorioJRBeanCollectionDataSourceds=newJRBeanCollectionDataSource(coll);// Parte de configuraçao do ReportJasperReportjr=(JasperReport)JRLoader.loadObject(arquivo);// Parametros do Relatorio////////// AQUI Q ESTA O PARAMETRO ENVIADO AO RELATORIO//////Mapparametros=newHashMap();parametros.put("totalRel",lanc);// monta os objetos para Saida para a TelaJasperPrintimpressao=JasperFillManager.fillReport(jr,parametros,ds);// Mostra na tela usando o JasperViewerJasperViewerjrviewer=newJasperViewer(impressao,false);jrviewer.setVisible(true);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro:\n"+e.toString());e.printStackTrace();}}}
Bem... espero ter ajudado!
Qualquer duvida manda um mail !
Abracao e te +
R
rodrigowPJ
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
OHADESPJ
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
CassolatoPJ
“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
gibotyPJ
Ola Cassolato, tudo bem?
Há alguma forma de faser sem usar collections, de preferencia String ou Object?
fico no aguardo
M
marthian_2PJ
PEssoal tá dando erro:
importjava.net.URL;importjava.text.DecimalFormat;importjava.util.ArrayList;importjava.util.Collection;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.swing.JOptionPane;importto.ClienteTO;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource;importnet.sf.jasperreports.engine.util.JRLoader;importnet.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 */publicclassbla{/** * 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 * */publicvoidMontaRelatorio(Collectioncoll){DecimalFormatformato=newDecimalFormat("0.00");// Pega o número de registros totais da collection Stringlanc=formato.format(coll.size()*7);// Pega o endereco do .jasper dentro do .jar URLarquivo=getClass().getResource("Teste.jasper");try{// Manipula os beans da collection recebida para o relatorio JRBeanCollectionDataSourceds=newJRBeanCollectionDataSource(coll);// Parte de configuraçao do Report JasperReportjr=(JasperReport)JRLoader.loadObject(arquivo);// Parametros do Relatorio ////////// AQUI Q ESTA O PARAMETRO ENVIADO AO RELATORIO////// Mapparametros=newHashMap();parametros.put("nome","Eu");// monta os objetos para Saida para a Tela JasperPrintimpressao=JasperFillManager.fillReport(jr,parametros,ds);// Mostra na tela usando o JasperViewer JasperViewerjrviewer=newJasperViewer(impressao,false);jrviewer.setVisible(true);}catch(Exceptione){JOptionPane.showMessageDialog(null,"Erro:\n"+e.toString());e.printStackTrace();}}publicstaticvoidmain(String[]args){ClienteTOc=newClienteTO();c.setNome("Marciano");ListlistaLivros=newArrayList();listaLivros.add(c);newbla().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)