Símbolos Raw ASCII para controlar uma impressora de um arquivo .txt
-
24-09-2019 - |
Pergunta
Uma impressora de etiqueta é controlada enviando uma sequência de caracteres ASCII brutos (que formata uma etiqueta). Assim:
string s = "\x02L\r" + "D11\r" + "ySWR\r" + "421100001100096" + date + "\r" + "421100002150096" + time + "\r" + "421100001200160" + price + "\r" + "E\r";
RawPrinterHelper.SendStringToPrinter(printerName, s);
Essa variante codificada funciona bem.
Agora eu quero colocar a sequência de controle em um arquivo .txt e lê -lo durante o tempo de execução. Assim:
string printstr;
TextReader tr = new StreamReader("print.txt");
printstr = tr.ReadLine();
tr.Close();
Mas, neste caso, a impressora não imprime nada.
Parece que StreamReader
adiciona outra coisa a esta string
(Se eu colocar a string de leitura em um MessageBox.Show(printstr);
Tudo parece bem. Porém, assim não podemos ver os caracteres de controle adicionados).
O que poderia ser uma solução para esse problema?
Solução
Parece uma impressora de etiqueta zebra, eu tive o descontentamento. A primeira coisa que você precisa corrigir é a maneira como você gera o arquivo print.txt. Você precisará escrever uma linha para cada seção da sequência de comando que é encerrada com r. Por exemplo, sua sequência de comando deve ser escrita assim:
printFile.WriteLine("\x02L");
printFile.WriteLine("D11");
printFile.WriteLine("ySWR");
printFile.WriteLine("421100001100096" + date);
printFile.WriteLine("421100002150096" + time);
printFile.WriteLine("421100001200160" + price);
printFile.WriteLine("E");
printFile.WriteLine();
Agora você pode usar o readline () ao ler o rótulo do print.txt. Você precisará ler várias linhas para obter o rótulo completo. Adicionei uma linha em branco no final, você pode usar isso quando leu o arquivo para detectar que você tem todas as linhas que criam o rótulo. Não se esqueça de anexar " r" novamente quando você o enviar para a impressora.
Outras dicas
Suas chamadas de código tr.ReadLine()
Uma vez, mas parece que você tem várias linhas nessa string.
Pode ser que o streamreader esteja lendo -o em um formato Unicode. A propósito, você está lendo em apenas uma linha ... você precisa iterar as linhas ... sua melhor aposta seria fazê -lo desta maneira:
string printstr; TextReader tr = new StreamReader("print.txt",System.Text.Encoding.ASCII); printstr = tr.ReadToEnd(); tr.Close();
Ou leia -o como um arquivo binário e leia todo o pedaço em uma série de bytes, a verificação de erros é omitida.
System.IO.BinaryReader br = new System.IO.BinaryReader(new StreamReader("print.txt", System.Text.Encoding.ASCII)); byte[] data = br.ReadBytes(br.BaseStream.Length); br.Close();
Editar:Depois remComentário, achei melhor incluir este trecho adicional aqui ... isso segue do trecho anterior, onde a variável data
é referenciado ...
string sData = System.Text.Encoding.ASCII.GetString(data);
Espero que isso ajude, cumprimentos, Tom.