1
I have a class that she makes the impression of the pages, however, I’m having a hard time breaking the pages.
In examples I have seen, they control this by the number of lines per page, but in my case, I do not know the quantity of lines, because I have sources of various sizes. follows below part of the code:
public int print(Graphics g, PageFormat pf, int page)
throws PrinterException {
if (page > 0) { /* We have only one page, and 'page' is zero-based */
return NO_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
*/
Paper p = new Paper();
pf.setPaper(p);
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
Font fontP = new Font("Arial", Font.PLAIN, 6);
Font fontM = new Font("Arial", Font.PLAIN, 8);
Font fontG = new Font("Arial", Font.PLAIN, 10);
g.setFont(fontM);
/* Reinderizando buffer de imagem */
try {
BufferedImage imagem = ImageIO.read(new File(
"D:\\Temp\\Printer\\Parcela.jpg"));
Image imagemMenor = imagem.getScaledInstance(600, 835, page);
g2d.drawImage(imagemMenor, -75, -75, null);
} catch (IOException e) {
e.printStackTrace();
}
int k = 0; // cont responsável por cada folha
int i = 0; // cont para impressão dos dados
int pos = 0; // Posiciona os registros
Registro[] registro; // vetor para obter os registros
/* para cada iteração nesse for, deve imprimir uma página */
for (k = 0; k < Index.vecregistro.size(); k++) {
registro = Index.vecregistro.get(k); // registro recebe uma lista de
// registros
/* cada iteração corresponde a um contribuinte(3 contribuintes por pagina) */
for (i = 0; i < 3; i++) { // for para impressão dos registros
/* aqui esta o que vai impresso na página */
g.setFont(fontG);
g.drawString(registro[i].getLinha(), 200, -28 + pos);
g.setFont(fontM);
g.drawString(registro[i].getCP06(), -40, -10 + pos);
g.drawString(registro[i].getVBAP01(), -10, -10 + pos);
g.drawString(registro[i].getCP06(), 340, -10 + pos);
pos = pos + 273; // incrementa e posiciona para o próximo
// registro
}
}
/* tell the caller that this page is part of the printed document */
return PAGE_EXISTS;
}