Gerando documento PDF com mais de uma página utilizando o IReports

14 respostas
MauNunes

Meu problema é o seguinte. Eu tenho que gerar um documento em PDF utilizando o JasperReports e IReports, porem esse PDF que será gerado contem 4 páginas, e cada página contem conteúdos diferentes. É que se eu estivesse gerando um contrato. Não é um relatório comum onde é impresso uma lista de resultados.
Eu tentei fazer utilizando o subreport, mas não deu nada certo. Quando compilo e gero o relatório sem um datasource especificado, os dados não são apresentados. Somente uma página em brancno o é exibida. Minhas dúvidas são:

1º) Em que banda eu crio meu subreport? Lembrando que ele só tera uma página.
2º) Em que banda eu adiciono meus subreports no report mestre? É preciso colocar uma quebra de página para ele gerar outra página para o subreport?

Agradeço que puder me ajudar.

14 Respostas

rdmardegam

Entao vc pode utilizar os subreports mesmo para fazer isso!

Voce pode enviar um dataSource mesmo que com uma colecao vazia, so para os elementos contidos na banda Detail(caso exista) no relatorio principal sejam renderizados.

Para o SubRelatorio, vc deve passar um DataSource vazio, emptyDataSource n me lembro agora.

Ou colocar no subrelatorio, na propiedade, uma opção de que o subrelatorio deve ser apresentado mesmo sem o DataSource ser passado. Agora n me lembro da opção.

Mas amanha te passo melhor os detalhes, pq to quase dormindo aqui agora sao quase 2h da manha hehe.

Me add no msn qualquer coisa q de dou uma ajuda mais rapida: [email removido]

Mas fazer issoa e é sussa, quando voce fizer o primeiro já consegue fazer todos!! Abraço.

Gerva

da uma olhada no “when no data” do relatório
uma das opções deve satisfazer suas necessidades

rdmardegam

Nas propriedades do subRelatorio existe uma aba “Mais…” e la existe a opção “Todas as seções, nenhum detalhe” no combo “Quando sem informações” ou “when no data” como disse o amigo ae em cima.

MauNunes

Olá rdmardegam, beleza.

Eu não achei nenhuma dessa opções. Eu estou usando a versão 2.0.2 do IReport. Onde está isso?

Gerva

eu uso 3.7.3 mas… não tem propriedades no relatorio??
em todos os ireports que eu vi (adimito que não foram muitos maaaas…) ficava em -> propriedades -> when no data

lembrando que propriedades do relatório, não em propriedades de sub relatorio

ex: relatorio1 (pai), relatorio2 (filho)
“abra o relatorio2 e va nas propriedades DELE”, e não pelo relatorio pai

MauNunes

Eu achei a opção. É quando se cria um relatorio. Eu fiz o teste e funcionou, porem estou com outra dúvida. Eu adicionei no meu report_mestre na banda detail, dois subreport, porem como eu faço para que o segundo, terceiro e assim por diante apareçam em outra página?

Gerva

crie um detail para cada subrelatorio se voce quer mandar pular pagina

depois, voce deve criar um grupo e marcar a opção "start on a new page"
mande agrupar pela informação que diferencia cada detail

MauNunes

O report já está sendo impresso mesmo sem dados e quebrando a página conforme eu queria, porem estou com uma dúvida agora.
Preciso preencher os valores dos subReports.

Eu tento fazer isso da seguinte forma:

No report eu crio um parâmetro chamado de feps que é um objeto simples.
Na classe eu envio o parâmetro de um map, e recupero ele nos campos do report da seguinte forma:

O que acontece é que no subReport os valores estão sendo impresso como null. Minha dúvida é como eu passo esses valores para o subreport ? Existe uma outra forma de se fazer isso?

rdmardegam

Amigo, no seu relatorio principal, onde está contido o subRelatorio. Va nas propiedades deste subRelatorio para o qual voce deseja passar a informação desejada.

La existe uma aba Sub-Relatorio(Outros). La existe a opção “Parametros do SubRealatorio”.

Aqui, voce deve passar as informações que contidas no relatório principal e que deseja que o subRelatorio recupere.

Então por exemplo, caso você tenha em seu relatorio principal o parametro “feps”. $P{feps} .

Você deve adicionar este parametro para ser passado, dando o nome “feps” e informando o valor da expressão que corresponde a este nome, o que seria $P{feps}.

Agora indo ao seu subRelatorio, apenas declare o parametro que voce está passando, no caso “feps”. Agora ele está pronto para ser utilizado como no Relatorio Principal.

Bom n sei se fui claro, mas qualquer coisa fala ae. Abraço.

MauNunes

Fala rdmardegam , beleza?
Eu já fiz isso, ou seja coloquei o parâmetro lá e ficou dessa forma

Parameter: feps
Expression: ${feps}

Só não sei onde eu declaro parâmetro no meu subrelatorio.
Antes de tudo eu estava recuperando ele da seguinte forma ${feps}.getAtributo(), mas dessa forma vem nulo.

rdmardegam

Primeiro, verifique se no seu relatorio principal o parametro feps está nulo !!

Certo, entao vc ja está passando o feps para o subRelatorio da seguinte maneira:
Parameter: feps
Expression: ${feps}

Blz ta certo.

Agora abra o subRealtorio, abra ele, esquece o relatorio principal,abra o subRelatorio !!

Da mesma maneira que você criou o paramentro feps no relatorioPrincipal, sabe onde vc pode declarar, os fields, parametros e variaveis ? Entao lá mesmo, vc declara este parametro fields.

Tenta dar uma olhada

MauNunes

Então rdmardegam, foi o que eu fiz.
Eu declarei ele da seguinte forma

No campo Parameter Name eu coloquei feps
No campo Parameter Class Type eu coloquei a classe com.altec.bsbr.app.rap.dto.ExportFepsDTO.

É dessa forma que é feito?

rdmardegam

Cara, se vc quer por exemplo apenas um atributo da classe passe da seguinte maneira
Parameter: informacao
Expression: $P{feps}.getInformacao().

Entao no seu subRelatorio, declare o parametro informacao do tipo String que contera o valor de Informacao.

qualquer coisa me add no msn: [email removido]

MauNunes

Opa, eu denovo…
Eu não quero um atributo inteiro eu quero todo o objeto.

Da forma eu fiz ele os valores vem null. Eu declarei meus parâmetros conforme citei no post anterior e mesmo assim não funciona.

Criado 17 de agosto de 2010
Ultima resposta 19 de ago. de 2010
Respostas 14
Participantes 3