Impressao via Java em impressora USB

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.

Boa Tarde.

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.

Está local na maquina.

Não entendi essa do comando LPR.

Por que eu não envio o arquivo para imprimir, mando o byte array.