[RESOLVIDO]Bluetooth - Imprimir Zebra QL320 Plus

Olá Pessoal.

Estou tentando imprimir em uma impressora portátil Zebra QL320 Plus, porém não está funcionando.
Estou gerando o script da impressão através do programa Label Vista, que parece que é compatível com a linguagem CPCL, algo
que ela entende.

Pego esse script, coloco em uma string e envio via bluetooth.

Código:

	public void Imprimir(){
		String printerURL = "btspp://00037A4F4771:1";
		
		String s;
		
		s = "! 0 200 200 240 1" + "\n";
		s = s.concat("LABEL" + "\n");
		s = s.concat("CONTRAST 0" + "\n");
		s = s.concat("TONE 0" + "\n");
		s = s.concat("SPEED 3" + "\n");
		s = s.concat("PAGE-WIDTH 380" + "\n");
		s = s.concat("BAR-SENSE" + "\n");
		s = s.concat(";// PAGE 0000000003800240" + "\n");
		s = s.concat("T 0 0 93 46 Contrato de Locação" + "\n");
		s = s.concat("FORM" + "\n");
		s = s.concat("PRINT" + "\n");
		
		
		try {
			StreamConnection printerConnection = (StreamConnection) Connector.open(printerURL, Connector.WRITE);
			OutputStreamWriter writer = new OutputStreamWriter(printerConnection.openOutputStream());
			writer.write(s);
			writer.close();
			printerConnection.close();
			midlet.getLista().append("Enviou a impressão", null);
		} catch (IOException e) {
			e.printStackTrace();
			midlet.getLista().append("Ocorreu um erro:" + e.getMessage(), null);
		}		
	}

Já fiz teste, enviando a impressão do Label Vista, através da conexão USB, e a mesma imprime.

Porém através da código acima, não acontece nada.

Alguém poderia me dar uma dica, ou me dizer porquê não está funcionando?

Valews…

vc acha a impressora? ela responde a um handshake?

Bom Dia Ricoldi.

Ao pesquisar através do startInquiry, estou obtendo o device.

Na primeira vez foi necessário parear os dois dispositivos.
Tendo que digitar no meu blackberry o mesmo código setado em PIN nas configurações Bluetooth da impressora, definindo no LabelVista Authentication como SETPIN.

E estou obtendo(listando) o serviço do device através:

que me retornou :
btspp://00037A4F4771:1;autheticate=false;encrypt=false;master=false
Com isso posso entender que ele está respondendo, certo Ricoldi?
Porém, nada acontece.

O que você acha? Pode me dar alguma sugestão?

Bom vamos por parte…

Você já programou bluetooth alguma vez, ou é a 1a?

Pode ser pelos parametros da string de conexão.

Aqui no site da lorena tem um exemplo de bt, não sei se ja viu, mas pode te ajudar http://br.geocities.com/j2me_website/Jogo_Bluetooth.zip

Eu nunca fiz com “StreamWriter”, sempre utilizo “Data” nos meus canais de comunicação.

Oi ricoldi.

Sim, é a primeira vez que estou montando algo pra trabalhar com bluetooth.

Baixei o exemplo citado, bem bacana o exemplo.

Alterei o meu código para usar DataOutputStream conforme o exemplo.

Meu código ficou assim:

public void Imprimir(){
	String bluetoothURL = "btspp://00037A4F4771:1;authenticate=true;encrypt=false;master=false";
		
	String s;
			
	s = "! 0 200 200 210 1" + "\r\n";
	s = s.concat("TEXT 4 0 30 40 Hello World" + "\r\n");
	s = s.concat("FORM" + "\r\n");
	s = s.concat("PRINT" + "\r\n");
				
	try {
		StreamConnection con = (StreamConnection) Connector.open(bluetoothURL);
		DataOutputStream output = con.openDataOutputStream();
		output.writeUTF(s);						
		output.flush();
		output.close();
		con.close();
		midlet.getLista().append("Enviou a impressão", null);
		} catch (IOException e) {
			e.printStackTrace();
			midlet.getLista().append("Ocorreu um erro:" + e.getMessage(), null);
           }		
}

Porém ainda não imprimiu.

Quando estou transferido os dados através do código acima, o indicador de conexão bluetooth e o de transferência de dados são exibidos no visor da impressora.

O código que estou enviando gerei da seguinte forma. Criei no LabelVista e salvei o arquivo LBL.
Em seguida abri o arquivo no notepad e copiei o código.

A única coisa que acrescentei na string foram os “\r\n” para as quebras de linhas.

Copiando o conteúdo do arquivo LBL e enviando via String, esta seria a forma adequada para impressora imprimir?

Valews pela ajuda…

Primeiramente removi os \r da string.

Caso eu mande fechar o output e a conexão, sem dar um intervalo de tempo, ela não imprime.

Para resolver acrescentei um: Thread.sleep(1000) após o output.flush();

Ficando assim:

try {
	StreamConnection con = (StreamConnection) Connector.open(bluetoothURL);
	DataOutputStream output = con.openDataOutputStream();
	output.writeUTF(s);
	output.flush();
	try {
		Thread.sleep(1000);
	} catch (InterruptedException e) {
		e.printStackTrace();
	}
	output.close();
	con.close();
	midlet.getLista().append("Enviou a impressão", null);			
	} catch (IOException e) {
		e.printStackTrace();
		midlet.getLista().append("Ocorreu um erro:" + e.getMessage(), null);
    }		

Dessa forma funcionou.

Obrigado Ricoldi pelas dicas. Foram muito úteis.

Falows…