ASCII сырые символы для управления принтерм из файла .txt
-
24-09-2019 - |
Вопрос
Принтер для метки контролируется, отправляя строку RAW ASCII символов (которые форматы метки). Так:
string s = "\x02L\r" + "D11\r" + "ySWR\r" + "421100001100096" + date + "\r" + "421100002150096" + time + "\r" + "421100001200160" + price + "\r" + "E\r";
RawPrinterHelper.SendStringToPrinter(printerName, s);
Этот жесткозедированный вариант хорошо работает.
Теперь я хочу поставить строку управления в файл .txt и прочитал его во время выполнения. Так:
string printstr;
TextReader tr = new StreamReader("print.txt");
printstr = tr.ReadLine();
tr.Close();
Но в этом случае принтер ничего не печатает.
Кажется, что StreamReader
добавляет что-то еще на эту строку
(Если я положу строп чтения на MessageBox.Show(printstr);
Все выглядит хорошо. Хотя, таким образом, мы не можем видеть добавленные символы управления).
Что может быть решение этой проблемы?
Решение
Похоже на принтер лейбла 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» снова, когда вы отправите его на принтер.
Другие советы
Ваш код звонит tr.ReadLine()
один раз, но похоже, у вас есть несколько строк в этой строке.
Может быть, что Streamreader читает его в формате Unicode. Кстати, вы читаете только только одну строку ... вам нужно вместо этого строки ... Ваша лучшая ставка будет делать это так:
String PrintStr; Textreader TR = новый Streamreader («print.txt», System.text.encoding.Ascii); printstr = tr.readteend (); tr.close ();
Или прочитайте его как двоичный файл и прочитайте весь кусок в серию байтов, проверка ошибки опущена.
System.io.binkyReader br = new system.io.binaryReader (новый Streamreader («print.txt», system.text.encoding.Ascii)); Байт [] данные = br.readbytes (br.basestream.length); br.lose ();
Редактировать:После REM.Комментарий я подумал, что лучше всего включить этот дополнительный фрагмент здесь ... это следует на предыдущем фрагменте, где переменная data
ссылается ...
string sdata = system.text.encoding.Ascii.getString (данные);
Надеюсь, это поможет, наилучшие пожелания, Том.