nao sei o tamanho do A5 nao, mas fica facil de vc fazer uns teste, basta vc setar a quantidade de linhas que voce quer que ela imprima e pare, eu usava isso pra imprimir uns pdvs em lx 300, veja a classe que fazia isso, acho q ela explica melhor como fazer:
package util.impressao;
import java.text.DecimalFormat;
import java.util.List;
import model.FormaPagamentoPedido;
import model.Pedido;
import model.PedidoProduto;
import util.Data;
public class ImpressaoPedido {
private ImpressoraBean imp;
private Configuracoes config;
private List<PedidoProduto> lista;
private DecimalFormat df;
private boolean volta = false;
public ImpressaoPedido(Pedido pedido, List<FormaPagamentoPedido> fpp) {
config = new Configuracoes();
imp = new ImpressoraBean(config.getImpressora());
imp.print(imp.TAMANHO_DA_PAGINA);
imp.print(imp.TAMANHO_12);
lista = pedido.getProdutos();
df = new DecimalFormat("#,###.00");
do {
// INICIO DA LINHA 1
imp.println(config.getDadosEmpresa().getNome());
// FIM DA LINHA 1, INICIO DA LINHA 2
imp.println(config.getDadosEmpresa().getEndereco() + "-"
+ config.getDadosEmpresa().getFone());
// FIM DA LINHA 2, INICIO DA LINHA 3
imp.insertLine();
// FIM DA LINHA 3, INICIO DA LINHA 4
imp.print("Vendedor: " + pedido.getFuncionario().getNome());
imp.print("\t\t\t\tData Emissao:"
+ new Data().dataParaString(pedido.getData()));
imp.println("\t\tPDV: " + pedido.getId());
// FIM DA LINHA 4, INICIO DA LINHA 5
imp.print(pedido.getCliente().toString());
imp.println("\t\t" + pedido.getCliente().getTel());
// FIM DA LINHA 5, INICIO DA LINHA 6
imp.print(pedido.getCliente().getLogradouro());
imp.println(" - " + pedido.getCliente().getBairro());
// FIM DA LINHA 6, INICIO DA LINHA 7
imp.insertLine();
// FIM DA LINHA 7, INICIO DA LINHA 8
imp.println(cabecalhoProduto());
// FIM DA LINHA 8, INICIO DA LINHA 9
int size = lista.size();
for (int i = 0; i < 14; i++) {
if (i < size) {
imp.print(linhaProduto(lista.get(i)));
}
imp.println();
}
// FIM DA LINHA 22, INICIO DA LINHA 23
imp.println();
// FIM DA LINHA 23, INICIO DA LINHA 24
imp.insertLine();
// FIM DA LINHA 24, INICIO DA LINHA 25
imp.println("Qtd Produtos..: " + pedido.getProdutos().size() +
" Acrecimo..: R$ "
+ df.format(pedido.getValorAcrescimo()) +
"\tDesconto..: R$ "
+ df.format(pedido.getValorDesconto()) +
"\tValor Total..: R$ "
+ df.format(pedido.getValorTotal()));
// FIM DA LINHA 25, INICIO DA LINHA 26
imp.insertLine();
// FIM DA LINHA 26, INICIO DA LINHA 27
imp.print(fpp.get(0).getFormaPagamento().getTipo() + ": ");
imp.println(df.format(fpp.get(0).getValor()));
// FIM DA LINHA 27, INICIO DA LINHA 28
int z;
for(z = 1; z < fpp.size() && z <= 5; z++){
if(!fpp.get(z).equals(fpp.get(z - 1))){
imp.print(fpp.get(z).getFormaPagamento().getTipo() + ": ");
imp.println(df.format(fpp.get(z).getValor()));
}
}
// FIM DA LINHA 28, INICIO DA LINHA 29
for(int w = z; w <= 5; w++ ){
imp.println();
}
// FIM DA LINHA 29, INICIO DA LINHA 30
// FIM DA LINHA 30, INICIO DA LINHA 31
// FIM DA LINHA 31, INICIO DA LINHA 32
imp.print("[ML - Solucoes em Software]");
imp.println("\t\t\t\t\t" + new util.Data().getDataPorExtenso());
imp.println();
// FIM DA LINHA 33
if (lista.size() > 14) {
volta = true;
lista = lista.subList(14, lista.size());
}else{
volta = false;
}
} while (volta);
imp.flush(); // manda tudo para a impressora
System.out.println(imp); // imprime no console
}
private String linhaProduto(PedidoProduto pp) {
StringBuffer linha = new StringBuffer();
for (int i = 0; i < 96; i++) {
linha.append(" ");
}
linha.insert(0, pp.getProduto().toString());
linha.insert(50, pp.getProduto().getGarantia());
linha.insert(62, pp.getQuantidade() + "");
linha.insert(70, df.format(pp.getValor()));
linha.insert(85, df.format((pp.getValor() * pp.getQuantidade())));
return linha.substring(0, 96);
}
private String cabecalhoProduto() {
StringBuffer linha = new StringBuffer();
for (int i = 0; i < 96; i++) {
linha.append(" ");
}
linha.insert(0, "Produto");
linha.insert(50, "Garantia");
linha.insert(62, "Qtd.");
linha.insert(70, "Valor Uni.");
linha.insert(85, "Valor Total");
return linha.toString().substring(0, 96);
}
}