É realmente, e chato a cada impressão selecionar a impressora, mas acho que tem como contornar isso, não esta 100% até mesmo porque eu não estou com uma impressora Bematech aqui para testar, mas acho que assim (com poucas alterações), será possível imprimir sem ter que selecionar a impressora toda vez.
public class ImpreByGUJ {
public static void main(String[] args) {
String[] impressoras = listaImpressora();
System.out.println("Selecione a impressora");
for (String imp : impressoras) {
System.out.println(imp);
}
System.out.println("informe o indice da impressora");
String impressSelec = impressoras[2];
System.out.println(impressSelec);
ImpreByGUJ ibguj = new ImpreByGUJ();
ibguj.imprimir("Ola", "Mundo", impressSelec);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
ibguj.imprimir("Ola", "novamente", impressSelec);
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
}
ibguj.imprimir("nao", "abra selecao", impressSelec);
}
public Rectangle r = null;
public void imprimir(String paramentro1, String parametro2, String impressNome) {
Frame f = new Frame("Frame temporário");
f.setSize((int) 283.46, 500);
f.pack();
Toolkit tk = f.getToolkit();
if (tk != null) {
if (r == null) {
PrintJob pj = tk.getPrintJob(f, "IMPRESSAO", null);
sun.print.PrintJob2D pjd = (sun.print.PrintJob2D) pj;
Graphics g = pj.getGraphics();
r = g.getClipBounds();
pj.end();
}
BufferedImage bImage = new BufferedImage(r.width, r.width,
BufferedImage.TYPE_INT_RGB);
sun.print.ProxyPrintGraphics ppg = new sun.print.ProxyPrintGraphics(bImage.getGraphics(), new sun.print.PrintJob2D(f, "temp2", null));
ppg.setFont(new Font("Arial", Font.PLAIN, 9));//Define o tipo da fonte e o tamanho
ppg.drawString("Parametro:" + paramentro1, 0, 10);
ppg.drawString("Parametro:" + parametro2, 0, 20);
ppg.dispose();
PrintService ps = selectImpress(impressNome);
DocPrintJob dpj = ps.createPrintJob();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ImageIO.write(bImage, "png", baos);
} catch (IOException ex) {
ex.printStackTrace();
}
SimpleDoc dimpDoc = new SimpleDoc(baos.toByteArray(), DocFlavor.BYTE_ARRAY.PNG, null);
try {
dpj.print(dimpDoc, null);
System.out.println("imprimiu");
} catch (PrintException ex) {
System.out.println("Erro");
}
f.dispose();
}
}
public static PrintService selectImpress(String imp) {
PrintService[] ps = PrintServiceLookup.lookupPrintServices(
DocFlavor.INPUT_STREAM.AUTOSENSE, null);
for (PrintService p : ps) {
if (p.getName().equals(imp)) {
return p;
}
}
return null;
}
public static String[] listaImpressora() {
PrintService[] ps = PrintServiceLookup.lookupPrintServices(DocFlavor.INPUT_STREAM.AUTOSENSE, null);
String[] nomes = new String[ps.length];
for (int i = 0, l = nomes.length; i < l; i++) {
nomes[i] = ps[i].getName();
}
return nomes;
}
}