Bem, eu estava fazendo alguns testes, e reparei que a mesma rotina para impressao que utilizamos não funciona com impressoras USB.
O código que uso para imprimir é o seguinte.
DocPrintJob trabalhoImpressao = getServicoImpressao("Samsung SCX-4200 Series-SUPD")
.createPrintJob();
DocAttributeSet docAttributes = new HashDocAttributeSet();
docAttributes.add(Compression.NONE);
docAttributes.add(MediaTray.MAIN);
docAttributes.add(new DocumentName("Documente para USB", Locale
.getDefault()));
Doc doc = new SimpleDoc(new ByteArrayInputStream("Marky.Vasconcelos".getBytes()),
DocFlavor.INPUT_STREAM.AUTOSENSE, docAttributes);
trabalhoImpressao.print(doc, new HashPrintRequestAttributeSet());
Onde getServicoImpressao retorna um PrintService, mas reparei que ele realmente está retornando o PrintService da impressora com nome que passei por parametro.
Para impressoras não-USBs a impressão é enviada normal, para USB, a impressora sempre liga, aparece “Imprimindo…” mas nada é impresso, e no “device e printers” do windows não é possivel ver nenhum documento na fila para a impressora.
Já fiz este teste com 3 impressoras USB, todas tem o mesmo efeito.
Bem, ainda estou sem solução desse problema, olhei na internet e só vi pessoas que também não solucionaram isso.
A idéia mais promissora que pensei que resolveria era enviar o caractere BEL (0x07) junto, por que de fato, a comunicação está sendo feita com a impressora mas ela sempre para e não imprime nada.
Então fiz o seguinte.
DocPrintJob trabalhoImpressao = getServicoImpressao("Samsung SCX-4200 Series-SUPD")
.createPrintJob();
DocAttributeSet docAttributes = new HashDocAttributeSet();
docAttributes.add(Compression.NONE);
docAttributes.add(MediaTray.MAIN);
docAttributes.add(new DocumentName("Documente para USB", Locale
.getDefault()));
String s = "Marky.Vasconcelos";
byte[] bs = s.getBytes();
byte[] toSend = new byte[bs.length + 2];
for(int i = 0; i < bs.length; i++)
toSend[i + 1]= bs[i];
toSend[0] = 0x07;
toSend[bs.length + 1] = 0x07;
Doc doc = new SimpleDoc(new ByteArrayInputStream(toSend),
DocFlavor.INPUT_STREAM.AUTOSENSE, docAttributes);
trabalhoImpressao.print(doc, new HashPrintRequestAttributeSet());
Já coloquei só no começo, só no final mesmo assim nada.
A impressora esta em rede ou no Desktop do usuario ?
Tentou enviar este job com comandos LPR para o equipamento ? lpr -S “maquina” -P “impressora” nome arquivo. so foi testei em impressoras Zebra e fiscal USB e funciona.