Então a pergunta é, como posso repetir o cabeçalho e pé de pagina se as linhas do JTable forem superior a 17? Utilizando a classe print
exemplo:
@Overridepublicintprint(Graphicsg,PageFormatpf,intpage)throwsPrinterException{Stringtemp;if(page>0){/* We have only one page, and 'page' is zero-based */returnNO_SUCH_PAGE;}/* User (0,0) is typically outside the imageable area, so we must * translate by the X and Y values in the PageFormat to avoid clipping */Graphics2Dg2d=(Graphics2D)g;g2d.translate(pf.getImageableX(),pf.getImageableY());intlineSize=20;FonttestFont=newFont("Lucida Console",Font.BOLD,20);//fontname,style(0forPlain),fontsizeg.setFont(testFont);intline=20;g.drawString(" Fatura/Recibo nº"+nmrRec+" ",5,line);returnPAGE_EXISTS;}
Cria um método pra imprimir o cabeçalho, outro pra imprimir o rodapé e um que imprime os itens
Você terá que calcular quantas páginas poderão ser impressas (total de itens / limite de itens por página).
Enquanto o parâmetro page for menor que o número de páginas que você calculou, você vai:
imprimir o cabeçalho;
imprimir os próximos 17 itens;
imprimir o rodapé;
retornar PAGE_EXISTS.
Quando o parâmetro page for maior ou igual a quantidade de páginas calculadas, você retorna NO_SUCH_PAGE.
J
jhonimaike
Tentei Algo assim mas nao estou tendo sucesso.
if(iRowImprimindo<jtblDatos.getRowCount()){Graphics2Dpg=(Graphics2D)g;//==== - Define o formato da folha de impressão (area possivel de se fazer a impressão do conteudo) - ======= pg.translate(format.getImageableX(),format.getImageableX());//======- Definição da font a ser utilizada - ================ pg.setFont(newFont("Courier New",Font.PLAIN,10));// Obtenho a altura da FontiAlturaFont=pg.getFontMetrics().getHeight();// Verifica si imprimir cabeçalhoif(bImprimirCabecalho){pg.drawString("-----------------------",iPosX,iAlturaFont*(iEspaco));bImprimirCabecalho=false;}// Ciclo para Imprimir Itensfor(iConteo=iRowImprimindo;iConteo<(jtblDatos.getRowCount());iConteo++){sDato=jtblDatos.getValueAt(iConteo,COL_IMPORTE).toString();pg.drawString(sDato,iPosX,iPosY);if(iConteo>=iLimiteLinhas){bImprimirCabecalho=true;//Sair do ciclo FORbreak;}}// Pé de páginapg.drawString("----------------------------------------------------------------------------------------------",iPosX,iAlturaFont*30);// Atualiza a linha a ser ImpresaiRowImprimindo=iConteo;if(page>=iTotalPaginas){iRowImprimindo=0;EstadoImpresion=NO_SUCH_PAGE;}elseEstadoImpresion=(PAGE_EXISTS);}returnEstadoImpresion;
}
J
jhonimaike
Chamando o método de impressão assim, aqui também faço a definição do tamanho da folha: