iReport - gerar Indice/Sumário

8 respostas
R

Como indice ou sumario me refiro à aquela parte que aparece em livros depois da capa onde apresenta o nome dos titulos e dos subtitulos dos capitulos com um contador.

Ex.

-----------capa----------
Campeonato Brasileiro

--------fim capa--------

----------indice---------

1. Serie A ............... 1
   1.1 Time A ............ 1
   1.2 Time B ............ 3
   ....

2. Serie B ............... 28
   2.1 Time A ............ 28
   2.2 Time B ............ 31
   ....
3. Serie C ............... 56
   3.1 ....
   3.2 ....
-------fim do indice-----


---------conteudo--------

            dados

-----fim do conteudo----

O meu relatório possui apenas 1 subrelatório que é chamado à partir do detail. Então: no detail ficariam os dados referentes aos nomes das series tipo “Serie A”, “Seria B”, “Serie C”, etc. e no subrelatório os dados do time com o título como o nome dele.

Já possuo contadores que informam a numeração desses títulos e subtítulos no meio do relatorio, ex: 1. Série A… 1.1 Time A… 1.2 Time B… / 2. Série B … 2.1 Time A… 2.2. Time B… e assim por diante. ["…" = conteúdo do/no relatório].

Alguém que já passou por esse perrengue saberia me dizer por onde começo ou o que procuro para resolver? Se alguém souber que o iReport não dá esse tipo de suporte também ajuda bastante a informação.

Meu indice deve ter [Contador do Título ou Subtítulo] + [Título ou Subtítulo] + ["…"] + [Numero da pagina onde esta o titulo ou subtitulo do capitulo].

Obrigado pela ajuda galera!
:smiley:

8 Respostas

E

Acredito q vc usando o componente crosstab do iReport vc consegue chegar lah.

R

Olá,

Qual foi a sua solução para esse problema, pois vou ter que fazer um sumário em meu relatório tbm.   :?:

grata,

Renata

R

revivendo o tópico, alguém chegou a uma solução?

R

Pessoal,

Alguém conseguiu implementar esse lance ?

Estou pesquisando sobre como desenvolver esse sumário, que seja criado dinamicamente…

A

Eu estou precisando de algo parecido, estou varrendo a internet em busca de alguma informação mas eu não encontro.

Quando encontrar alguma resposta eu também postarei aqui.

Até mais.

R

dá uma olhada no PD4ML,ele é pago mas se o seu projeto for profissional vale a pena tem suporte a TOC,marca d’agua cabeçalho,rodapé,conversão html para pdf, emfim baita ferramenta,tentei usar jtidy,flayng saucer, iText ,mas apenas com o pd4ml obitive resultados profissionais realmente.

A

Obrigado rjpereira1000000.

Nós iremos verifica-la e caso atenda nossas necessidades, recomendar a compra.
Valeu.

R

Após algum tempo pesquisando e pesquisando, encontramos um exemplo (que faz parte da JasperReports Libray) de geração de sumário usando o JasperReports.

Verificando o código fonte do exemplo, fiquei meio desapontando com a biblioteca, devido a "gâmbia" vamos dizer assim, para gerar um sumário.

Primeiro, como identificar as opções que farão parte do sumário ?
No exemplo, é feito o uso de Scriptlets, é necessário criar uma classe que se encarregará de montar manualmente as opções do sumário. E o uso de um grupo, onde na area Group Header deste grupo, é adicionar um elemento que invoca o metodo da classe que seleciona as opções.

Segundo, por padrão, a area "Summary" sempre fica no fim do relatório, como fazer ? Encontrei pessoas na net falando que o local do sumário devia trocado programaticamente, não acreditei até encontrar o exemplo. Exatamente, isso que ele faz, ele adiciona um texto estatico de marcação no sumário, antes de gerar o pdf, atraves do objeto JasperPrint, é feito a mágica.
private JasperPrint moveTableOfContents(JasperPrint jasperPrint)
	{
		if (jasperPrint != null)
		{
			List pages = jasperPrint.getPages();
			if (pages != null && pages.size() > 0)
			{
				String key = "HIDDEN TEXT TO MARK THE BEGINNING OF THE TABLE OF CONTENTS";
				JRPrintPage page = null;
				Collection elements = null;
				Iterator it = null;
				JRPrintElement element = null;
				int i = pages.size() - 1;
				boolean isFound = false;
				while(i >= 0 && !isFound)
				{
					page = (JRPrintPage)pages.get(i);
					elements = page.getElements();

					if (elements != null && elements.size() > 0)
					{
						it = elements.iterator();

						while(it.hasNext() && !isFound)
						{
							element = (JRPrintElement)it.next();

							if (element instanceof JRPrintText)
							{
								if ( key.equals( ((JRPrintText)element).getText() ) )
								{
									isFound = true;
									((JRPrintText) element).setText("");
									break;
								}
							}
						}
					}

					i--;
				}

				if (isFound)
				{
					for(int j = i + 1; j < pages.size(); j++)
					{
						jasperPrint.addPage(j - i - 1, jasperPrint.removePage(j));
					}
				}
			}
		}

		return jasperPrint;
	}
Esse fonte foi retirado de uma das classes do exemplo...

Terceiro, pronto, pdf com sumário no inicio, agora só salvar o arquivo no disco.

Segue em anexo o exemplo, direto da fonte.

Criado 17 de abril de 2009
Ultima resposta 7 de nov. de 2012
Respostas 8
Participantes 6