possuo um relatório simples no meu projeto, onde eu realizo uma consulta no banco, armazeno em um ArrayList e depois envio para o IReport, segue o código abaixo:
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(grupos);
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),new HashMap(),jr);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
Porém agora eu preciso enviar várias Strings (Resultado de Querys Distintas) e não uma lista de um Objeto, deu pra entender??
Pensei em algo do tipo:
Map mapa = new HashMap()
mapa.put("chave1", "Resultado da Query 1");
mapa.put("chave2", "Resultado da Query 2");
mapa.put("chave3", "Resultado da Query 3");
...
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),mapa);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
Mas mesmo se funcionar eu não saberia resgatar esses valores no IReport. Alguem sabe ??
Olá ataufo,
faz o seguinte, cria um parametro no ireport para isso, vá na aba estrutura do documento click com o botao direito do mouse em cima de parametros/add/parameter, em seguida
e so colocar o nome do parametro e tidpo de dado.
e quando voce for enviar pelo java, nao esqueça que ele tem que ter o mesmo nome da parametro criado no ireport, ou seja, chave=valor.
realmente isso é exatamente o que eu estou precisando, o problema agora é que eu acho que não estou sabendo passar os parâmetros, pois está gerando um relatório em branco !! Segue abaixo como estou fazendo:
Map mapa = new HashMap();
mapa.put("teste", "Resultado da Query 1");
mapa.put("teste2", "Resultado da Query 2");
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio5.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),mapa);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
No IReport: $P{teste} e $P{teste2}
Alguem sabe porque está gerando o PDF em branco ???
acho que ele não está encontrando o *.jasper, e se voce tentar adicionar um "/'" conforme abaixo.
File f = new File(getServletConfig().getServletContext().getRealPath("/relatorio5.jasper"));
se não funcionar, coloque o código inteiro para eu analisar, pelo que vi você deve estar passando um JRBeanCollectionDataSource né ?
acho que ele não está encontrando o *.jasper, e se voce tentar adicionar um “/’” conforme abaixo.
File f = new File(getServletConfig().getServletContext().getRealPath("/relatorio5.jasper"));
se não funcionar, coloque o código inteiro para eu analisar, pelo que vi você deve estar passando um JRBeanCollectionDataSource né ?
Eu tenho um relatório funcionando sem parametros e outro que quero enviar os parametros, segue o código:
DAOGrupo daog = new DAOGrupo();
ArrayList<Grupo> grupos = null;
if(mensal != null) // Condição para gerar o Relatório sem parâmetros que está funcionando
{
grupos = daog.consultarMes(mensal);
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(grupos);
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),new HashMap(),jr);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
}
else //Relatório com parâmetros que É GERADO EM BRANCO
{
grupos = daog.consultarDatas(dataini, datafim);
Map mapa = new HashMap();
mapa.put("teste", "Resultado da Query 1");
mapa.put("teste2", "Resultado da Query 2");
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(grupos);
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio5.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),mapa, jr);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
}
Conteúdo do relatorio5.jasper:
$P{teste} $P{teste2}
{Campos que já estão funcionando no outro relatório} OBS: Já testei enviar somente os parâmetros e para um jasper só com os $Ps
Eu tenho um relatório funcionando sem parametros e outro que quero enviar os parametros, segue o código:
DAOGrupo daog = new DAOGrupo();
ArrayList<Grupo> grupos = null;
if(mensal != null) // Condição para gerar o Relatório sem parâmetros que está funcionando
{
grupos = daog.consultarMes(mensal);
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(grupos);
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),new HashMap(),jr);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
}
else //Relatório com parâmetros que É GERADO EM BRANCO
{
grupos = daog.consultarDatas(dataini, datafim);
Map mapa = new HashMap();
mapa.put("teste", "Resultado da Query 1");
mapa.put("teste2", "Resultado da Query 2");
JRBeanCollectionDataSource jr = new JRBeanCollectionDataSource(grupos);
File f = new File(getServletConfig().getServletContext().getRealPath("relatorio5.jasper"));
byte[]b = JasperRunManager.runReportToPdf(f.getPath(),mapa, jr);
ServletOutputStream sos = response.getOutputStream();
response.setContentType("application/pdf");
response.setContentLength(b.length);
sos.write(b,0,b.length);
}
Conteúdo do relatorio5.jasper:
$P{teste} $P{teste2}
{Campos que já estão funcionando no outro relatório} OBS: Já testei enviar somente os parâmetros e para um jasper só com os $Ps
[/quote]
Acredito que o que você deseja esteja em Editar -> Propriedades do Relatório -> Aba Mais…:
Na opção Quando sem Informações selecione Todas as Seções, nenhum detail.
Lembrando:
Isso vai apenas exibir os dados que estão fora do detail.
ativando essa opção exibe pelo menos as caixas de texto, o que antes não acontecia. Porém os parâmetros continuam sem aparecer, ou seja, parece que os parâmetros não estão sendo enviados no Map que eu passo.
Se alguem tiver alguma ídeia me ajuda ae! Acho que tem algo errado no código pra envio de parâmetros…