Printing multiple pages

1

I have a class that makes the pages impression, however, I'm having trouble breaking pages.

In examples I've seen, they control this by the number of lines per page, but in my case, I'm not sure the number of lines, because I have fonts of various sizes. below is 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;
}
    
asked by anonymous 14.10.2014 / 14:05

0 answers