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…
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…
B
BabipcPJ
Já estava pesquisando no iText,
Mas valeu mesmo assim
Att,
[color=“red”]Bárbara[/color]
V
vieciliPJ
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!
V
vieciliPJ
Dei uma olhada na API do iText e percebi que vc tah usando a classe Table, então faça assim:
if( !writer.fitsPage( datatable) ) {//copiaaultimalinhadatabelaantigaparaanovaListultLinha=newArrayList();for(int i = 0; i < datatable.columns(); i++)ultLinha.add(datatable.getElement(datatable.size()-1,i));datatable.deleteLastRow(); //apaga a ultima linha//adicionaaodocumentoumanovatabeladocument.add(datatable);//Adicionaumanovapáginadocument.newPage();datatable=newTable(ultLinha.size());for(Iterator iter = ultLinha.iterator(); iter.hasNext();) {Objectconteudo=iter.next();if(conteudo instanceof Cell)datatable.addCell((Cell) conteudo);elseif(conteudo instanceof Table)datatable.insertTable((Table) conteudo);}}
Espero que isto possa te ajudar!
________________
Henrique VieciliBel. Ciência da Computação - UFSC
B
BabipcPJ
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]
V
vieciliPJ
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ó!
B
BabipcPJ
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.