Gerar Relatório Jasperreport sem conexão com banco

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.

Obrigado pela atenção de todos e aguardo um help.

Olá!

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 
     */
    public void processarRelatorio(TableModel modelo) throws JRException
    {

        //Implementação da interface JRDataSource para DataSource TableModel        
        JRTableModelDataSource JRModelo = new JRTableModelDataSource(modelo);

        //Localizacao e carregamento do arquivo .jasper
        InputStream arquivoJasper = getClass().getResourceAsStream("/relatorios/relatorio1.jasper");

        //Mapa de parametros         
        Map parametros = new HashMap();
        String caminhoImagem1= getClass().getResource("/relatorios/imagem1.jpg").toString();
        String caminhoImagem2 = getClass().getResource("/relatorios/imagem2.jpg").toString();
        parametros.put("IMG1", caminhoImagem1);
        parametros.put("IMG2", caminhoImagem2);

        // Preenche o relatório com os dados
        JasperPrint impressao = JasperFillManager.fillReport(arquivoJasper, parametros, JRModelo);

        //exibe o resultado
        JasperViewer viewer = new JasperViewer(impressao, false);
        viewer.setVisible(true);
        viewer.setExtendedState(JFrame.MAXIMIZED_BOTH);

    }

Até +!

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.

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é +!

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?

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:

http://docs.springnote.com/pages/752140/attachments/1412950

Até +!

[quote=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:

http://docs.springnote.com/pages/752140/attachments/1412950

Até +![/quote]

Muito obrigado vinnysoft.

Vou dar uma estudada nele aqui e logo que terminar dou um retorno se deu certo.

Muito obrigado pela atenção meu caro.

Cara da uma olhada neste post:

http://www.k19.com.br/artigos/relatorios-em-java-jasperreports-e-irepor/#more-437

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

[code]try {
Date dataInicial = txtDataInicial.getDateValue();
Date dataFinal = txtDataFinal.getDateValue();

		/* Parâmetros
		 * WHERE			string
		 * INICIAL		                string
		 * FINAL			string	
		 */
		
		HashMap<String, Object> m = new HashMap<String, Object>();
		String sInicial = Formatters.getMysqlDateFormatter().format(dataInicial);
		String sFinal = Formatters.getMysqlDateFormatter().format(dataFinal);
		String where = "b.data BETWEEN '" + sInicial + "' AND' " + sFinal + "'";
		
		SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
		String dInicial = formatador.format(dataInicial);
		String dFinal = formatador.format(dataFinal);
		
		m.put("WHERE", where);
		m.put("INICIAL", dInicial);
		m.put("FINAL", dFinal);
		
		File f = new File("jasper//atendimentos//Prontuario_Estatistica.jasper");
		JasperPrint impressao = JasperFillManager.fillReport(f.getPath(), m, DatabaseConnection.getConnection());
		JasperViewer j = new JasperViewer(impressao, false);
		j.setExtendedState(JFrame.MAXIMIZED_BOTH);
		j.setVisible(true);
		
		}
	catch (Exception e) {
		ErrorHandler.printScreen();
		ErrorHandler.showException(null, "Não foi possível emitir o relatório.", e);
	}
	finally {
		setCursor(Cursor.getDefaultCursor());
	}	
[/code]