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();
}