iReport - gerar Indice/Sumário

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:

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

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

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

Pessoal,

Alguém conseguiu implementar esse lance ?

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

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.

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.

Obrigado rjpereira1000000.

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

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.

[code]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;
}[/code]

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.