Gostaria de saber se alguém poderia me ajudar à respeito da mudança de página…
Eu uso:
if( !writer.fitsPage( datatable) ) {
datatable.deleteLastRow(); //apaga a ultima linha
//adiciona ao documento uma nova tabela
document.add(datatable);
//Adiciona uma nova página
document.newPage();
//Recria a próxima tabela
( ... )
}
O problema é que preciso armazenar ou ter um meio de imprimir a linha da tabela que foi deletada sem precisar armazenar todos os dados em variáveis nem ter de reescrever código…
Alguém pode me ajudar???
Valeu!
[color=“red”]Bárbara.[/color]
Barbara,
Uma dica que pode te ajudar…
Você conhece o iText?
Com essa biblioteca vc consegue criar PDFs abstraindo detalhes como paginação, cabeçalhos, rodapés e etc. Basta setar determinados parâmetros que ele cuida de tudo pra vc.
Outra ferramenta ainda mais poderosa é o JasperReports. Com ele vc consegue fazer relatórios sofisticados em PDF, HTML, XML e outros formatos…
Já estava pesquisando no iText,
Mas valeu mesmo assim
Att,
[color=“red”]Bárbara[/color]
Instancia de que classe é o objeto datatable? talvez exista o método getLastRow() ou o proprio deleteLastRow() retorna a linha deletada!?
De onde vc obtem os dados pra colocar nesta datatable?
Como vc insere os dados na tabela? existe o metodo datatable.insertRow()? que parâmetro ele recebe?
Se vc esclarecer isso vai ficar mais fácil de ajudar!
Dei uma olhada na API do iText e percebi que vc tah usando a classe Table, então faça assim:
[code]if( !writer.fitsPage( datatable) ) {
// copia a ultima linha da tabela antiga para a nova
List ultLinha = new ArrayList();
for (int i = 0; i < datatable.columns(); i++)
ultLinha.add(datatable.getElement(datatable.size()-1,i));
datatable.deleteLastRow(); //apaga a ultima linha
//adiciona ao documento uma nova tabela
document.add(datatable);
//Adiciona uma nova página
document.newPage();
datatable = new Table(ultLinha.size());
for (Iterator iter = ultLinha.iterator(); iter.hasNext() {
Object conteudo = iter.next();
if (conteudo instanceof Cell)
datatable.addCell((Cell) conteudo);
else if (conteudo instanceof Table)
datatable.insertTable((Table) conteudo);
}
} [/code]
Espero que isto possa te ajudar!
Henrique Viecili
Bel. Ciência da Computação - UFSC
Então…
Testei o código que você me passou e ele tem um probleminha… que não consegui desvendar
Seria demais pedir pra vc dar mais uma olhada? :oops:
Como você pode ver depois dessa linha que sai errado, ele pula a página normal… então não consegui fazer com que não dê esse erro.
[color=“red”]Obrigada!!![/color]
Putz… que abuso… hehehe
parece que a linha que foi desenhada na pagina seguinte é um pedaço da linha da página anterior, certo?!
se isto for verdade, então é pq o if (!writer.fitsPage( datatable)) não deve ter sido executado e o código precisa ser debugado.
caso vc não ache o problema e o código do if seja executado, vc pode retirar duas linhas da tabela ao invés de uma só!
O maior problema eh que quando a célula é muito grande nem tirando duas linhas fuciona bem, não sei porque…, vou ter de dar um jeito de controlar a altura da tabela e a altura da célula pra não escrevê-la se ela for maior que o espaço restante na página.
Valeu pela ajuda!
Bjos,
Bárbara