ASCII необработанные символы для управления принтером из файла .txt - PullRequest
2 голосов
/ 31 января 2010

Управление принтером этикеток осуществляется путем отправки строки необработанных символов ASCII (которая форматирует этикетку). Как это:

 string s = "\x02L\r" + "D11\r" + "ySWR\r" + "421100001100096" + date + "\r" + "421100002150096" + time + "\r" + "421100001200160" + price + "\r" + "E\r";

 RawPrinterHelper.SendStringToPrinter(printerName, s);

Этот жестко закодированный вариант хорошо работает.

Теперь я хочу поместить управляющую строку в текстовый файл и читать ее во время выполнения. Как это:

        string printstr;
        TextReader tr = new StreamReader("print.txt");
        printstr = tr.ReadLine();
        tr.Close();

Но в этом случае принтер ничего не печатает.

Кажется, что StreamReader добавляет что-то еще к этой строке

(Если я помещу строку чтения в MessageBox.Show(printstr);, все выглядит хорошо. Хотя, таким образом, мы не можем видеть добавленные управляющие символы).

Каким может быть решение этой проблемы?

Ответы [ 3 ]

3 голосов
/ 31 января 2010

Ваш код вызывает tr.ReadLine() один раз, но похоже, что в этой строке несколько строк.

1 голос
/ 31 января 2010

Похоже на принтер этикеток Zebra, у меня было недовольство. Первое, что вам нужно исправить, - это способ создания файла print.txt. Вам нужно будет написать одну строку для каждого раздела командной строки, оканчивающегося на \ r. Например, ваша командная строка должна быть написана так:

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();

Теперь вы можете использовать ReadLine (), когда читаете этикетку из print.txt. Вам нужно будет прочитать несколько строк, чтобы получить полную метку. В конце я добавил пустую строку, которую вы можете использовать при чтении файла, чтобы обнаружить, что у вас есть все строки, которые создают метку. Не забудьте добавить \ r снова при отправке на принтер.

1 голос
/ 31 января 2010

Возможно, что StreamReader читает его в формате Unicode. Кстати, вы читаете только одну строку ... вам нужно вместо этого перебирать строки ... Лучше всего сделать это следующим образом:

string printstr;
TextReader tr = new StreamReader("print.txt",System.Text.Encoding.ASCII);
printstr = tr.ReadToEnd();
tr.Close();

Или считайте его как двоичный файл и вместо этого прочитайте весь фрагмент в серию байтов, проверка ошибок не производится.

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();

Edit: После комментария rem я подумал, что лучше включить этот дополнительный фрагмент здесь ... это следует из предыдущего фрагмента, где указана переменная data ...

string sData = System.Text.Encoding.ASCII.GetString(data);

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

...