Gerar Relatório Jasperreport sem conexão com banco
8 respostas
H
hannibal_daturn
Bom dia a todos.
Estou tentando gerar meu relatório sem ter conexão com banco, apenas eu monto um MAP contendo todos os parâmetros.
Alguém sabe o que precisaria para isso?
Já estão criados todos os parâmetros no relatório.
Se eu coloco uma query selec * from dual e no java eu chamo passando uma conexão ele exibe blz, mas eu quero gerar o relatório sem utilizar nenhuma conexão com banco, apenas passando um MAP com os parâmetros.
Não entendi bem quais parâmetros vc inseriu no mapa, mas eu iria sugerir colocar os dados para gerar o relatório em um TableModel e passá-lo para o Jasper:
/** * Gera um relatório no JasperReports com base no TableModel passado como parâmetro. * @param modelo * @throws JRException */publicvoidprocessarRelatorio(TableModelmodelo)throwsJRException{//Implementação da interface JRDataSource para DataSource TableModel JRTableModelDataSourceJRModelo=newJRTableModelDataSource(modelo);//Localizacao e carregamento do arquivo .jasperInputStreamarquivoJasper=getClass().getResourceAsStream("/relatorios/relatorio1.jasper");//Mapa de parametros Mapparametros=newHashMap();StringcaminhoImagem1=getClass().getResource("/relatorios/imagem1.jpg").toString();StringcaminhoImagem2=getClass().getResource("/relatorios/imagem2.jpg").toString();parametros.put("IMG1",caminhoImagem1);parametros.put("IMG2",caminhoImagem2);// Preenche o relatório com os dadosJasperPrintimpressao=JasperFillManager.fillReport(arquivoJasper,parametros,JRModelo);//exibe o resultadoJasperViewerviewer=newJasperViewer(impressao,false);viewer.setVisible(true);viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);}
Até +!
H
hannibal_daturn
Exemplo, o relatório é dividido em alguns grupos de informações, por exemplo tenho uma área de “Dados do Profissional” contendo : nome, data nascimento, logradouro, numero, bairro , cidade estado, e outros dados dele…
Os parâmetros que criei foram para abastecer todos os campos do relatório, entendeu?
Aí tenho um map com:
map.put(“logradouro”, logradouro);
map.put(“numero”, numero);
map.put(“bairro”, bairro);
… etc…e por aí vai…
Eu quero que as informações que vão para meu relatório sejam apenas as que eu estou passando no meu map, sem meu relatório tem 50 campos, terei 50 registros no meu map mapeados com cada parâmetro criado para representar cada campo…
Ficou claro agora?
E obrigado pela resposta.
vinnysoft
Não entendi bem,
Você quer restringir a quantidade de registros que serão exibidos ou a quantidade de campos que serão exibidos?
Se for registros, basta montar um TableModel com os registros que vc quer exibir e enviar para o Jasper.
Agora se for quantidade de campos, ai acredito que terá que criar outro arquivo.jrxml ou então inserir alguns if’s para verificar se vai exibir o campo ou não.
Até +!
H
hannibal_daturn
Vou tentar explicar de forma mais clara:
No meu relatório existirá apenas estas informações:
Dados do Profissional (com os campos abaixo):
nome ($P{NOME})
cpf ($P{CPF})
data de nascimento ($P{DATANASC})
logradouro ($P{BAIRRO})
bairro ($P{BAIRRO})
cidade ($P{CIDADE})
uf ($P{UF})
área ($P{AREA})
Em meu método que irá gerar um relatório com o jasper reports, gostaria de saber se posso passar como parâmetro um map (“nomeParametro” , valorParametro) de forma que eu consiga fazer as informações aparecem lá, no meu caso não tenho nenhuma restriçao.
fillReport(InputStream, Map);
Normalmente nos exemplos vejo o pessoal passando como parâmetro InputStream + Map + Connection, desta maneira que estou passando está gerando um arquivo em branco.
Utilizando isso…ficou mais claro?
vinnysoft
Entendi…
Não seria o caso de vc tentar usar JRMapArrayDataSource?
Pena não tenho exemplos com ele. Mas tem esse link aqui com uma apostila excelente:
Eu fiz algo neste sentido recentemente, a ideia era emitir um relatório simples onde a pessoa informava a data inicial e final, ou seja, passei o WHERE como parâmetro pro SQL do iReport
try{DatedataInicial=txtDataInicial.getDateValue();DatedataFinal=txtDataFinal.getDateValue();/* Parâmetros * WHERE string * INICIAL string * FINAL string */HashMap<String,Object>m=newHashMap<String,Object>();StringsInicial=Formatters.getMysqlDateFormatter().format(dataInicial);StringsFinal=Formatters.getMysqlDateFormatter().format(dataFinal);Stringwhere="b.data BETWEEN '"+sInicial+"' AND' "+sFinal+"'";SimpleDateFormatformatador=newSimpleDateFormat("dd/MM/yyyy");StringdInicial=formatador.format(dataInicial);StringdFinal=formatador.format(dataFinal);m.put("WHERE",where);m.put("INICIAL",dInicial);m.put("FINAL",dFinal);Filef=newFile("jasper//atendimentos//Prontuario_Estatistica.jasper");JasperPrintimpressao=JasperFillManager.fillReport(f.getPath(),m,DatabaseConnection.getConnection());JasperViewerj=newJasperViewer(impressao,false);j.setExtendedState(JFrame.MAXIMIZED_BOTH);j.setVisible(true);}catch(Exceptione){ErrorHandler.printScreen();ErrorHandler.showException(null,"Não foi possível emitir o relatório.",e);}finally{setCursor(Cursor.getDefaultCursor());}