Impressão em mais de uma página usando printJob

Olá

Estou tentando fazer uma impressão de um retório por intermédio de um printJob.
Consegui até imprimir o relatório, porém, quando o relatório é extenso e passa do tamanho de uma folha de papel A4 a impressão termina ali mesmo.
Queria saber se tem uma forma de continuar a impressão em outra(s) página(s).

Segue o método de impressão utilizado:



public void imprimir() {
        String pagina ="Página: ";
        List<Empresas> empresa = new ArrayList<Empresas>();
        try {
            empresa = DaoFactory.getEmpresasDao().listarTodos();
        } catch (Exception ex) {
            Logger.getLogger(ListarProducao.class.getName()).log(Level.SEVERE, null, ex);
        }

        // cria um frame temporário, onde será  desenhado  o texto a ser impresso
      Frame f = new Frame("Frame temporário");
      f.setVisible(true);
      f.pack();
      Graphics g[] = new Graphics[50];
      // pega o Toolkit do Frame
      Toolkit tk = f.getToolkit();

      // Pega os serviços de impressão existentes no computador,
      // para que seja escolhida uma impressora.
      // Também pode ser uma impressora de rede
      PrintJob pj = tk.getPrintJob(f,  "Relatório" , null);
      int j = 0;
      // Aqui se inicia a impressão
      if (pj != null) {
         
         g[0] = pj.getGraphics();
         g[0].setFont(new Font("Courier New",Font.PLAIN,9));
         g[0].drawString(empresa.get(0).getNomefantasia(), 10, 30);
         g[0].drawString("Relatório de Produção", 10, 45);                  if(dataInicial == null){g[0].drawString("Período: Todos", 150, 45);}else g[0].drawString("Período: "+dataInicial +" a "+dataFinal, 150, 45);
         if(jComboBox_funcionarios.getSelectedItem().toString().equals("")) g[0].drawString("Funcionário: TODOS", 350, 45); else g[0].drawString("Funcionário: "+jComboBox_funcionarios.getSelectedItem().toString(), 350, 45);
         //g.drawString("", WIDTH, WIDTH)
         g[0].drawLine(0, 50,600,50);
         g[0].setFont(new Font("Courier New",Font.BOLD,8)); g[0].drawString("Data",10, 58); g[0].drawString("Funcionário",75, 58);g[0].drawString("Serviço",260, 58);g[0].drawString("Valor Un.",410, 58);g[0].drawString("QTD.",480, 58);g[0].drawString("Total",530, 58);
         g[0].drawLine(0, 60,600,60);
         g[0].setFont(new Font("Courier New",Font.PLAIN,8));
         for(int i = 0 ; i <producoes.size() ; i ++){

             g[j].drawString(new SimpleDateFormat("dd/MM/yyyy").format(producoes.get(i).getData()) , 10, 70+i*15);
             g[j].drawString(producoes.get(i).getFuncionarios().getNome() , 75, 70+i*15);
             g[j].drawString(producoes.get(i).getServico().getDescricao() , 260, 70+i*15);
             g[j].drawString("R$ "+ new DecimalFormat("###.00").format(producoes.get(i).getServico().getValor()) , 410, 70+i*15);
             g[j].drawString(new DecimalFormat("###,###").format(producoes.get(i).getQuantidade()) , 480, 70+i*15);
             g[j].drawString("R$ "+ new DecimalFormat("###,###.00").format(producoes.get(i).getTotal()) , 530, 70+i*15);
             if((70+i*15)%811==0){

               
               // tentei incrementar o j para ver se ele abria uma nova página, mas nada.!
               

             }
             if(i==producoes.size()-1){
                 g[j].drawLine(0, 74+i*15,600,74+i*15);
                 g[j].setFont(new Font("Courier New",Font.BOLD,8)); g[j].drawString("TOTAIS: ",10,82+i*15);  g[j].drawString(total02.getText(), 480, 82+i*15); g[j].drawString(total01.getText(),530,82+i*15);
                 g[j].drawLine(0, 85+i*15,600,85+i*15);
                 g[j].setFont(new Font("Courier New",Font.PLAIN,8));g[j].drawString(new SimpleDateFormat("dd/MM/yyyy HH:mm").format(new Date()),10,93+i*15);
                
                   if(folhaDePagamento.isSelected()){
                 g[j].drawString("Declaro ter recebido o pagamento referente ao período "+dataInicial+ " a "
                         + dataFinal+".", 10, 150+i*15);
                 g[j].drawString("No Valor Total declarado de: "+total01.getText()+"("+new Extenso(totalP).toString()+").", 10, 165+i*15);
                 g[j].drawString("Por isso firmo presente.", 10, 180+i*15);
                 g[j].drawString("_____________________________________________", 10, 215+i*15);
                 g[j].setFont(new Font("Courier New",Font.PLAIN,7));
                 g[j].drawString(jComboBox_funcionarios.getSelectedItem().toString(), 60, 230+i*15);
                
                   }


             }
         }

         // libera os recursos gráficos
       g[j].dispose();
        // encerra a impressão
        pj.end();
      }

     // desfaz o frame temporário
      f.dispose();


    }