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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top