通过发送一串原始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);
,一切看起来都不错。但是,这样我们就看不到添加的控制字符了。
什么可以解决这个问题?
答案 0 :(得分:3)
您的代码只调用tr.ReadLine()
一次,但看起来该字符串中有多行。
答案 1 :(得分:1)
可能是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();
修改强>
在 rem 的评论之后,我认为最好在此处添加此附加代码段...这是从前一个引用变量data
的代码段开始的。 ..
string sData = System.Text.Encoding.ASCII.GetString(data);
希望这有帮助, 最好的祝福, 汤姆。
答案 2 :(得分:1)
看起来像Zebra标签打印机,我感到很不快。您需要解决的第一件事是生成print.txt文件的方式。您需要为以\ r \ n终止的命令字符串的每个部分写一行。例如,您的命令字符串应该写成:
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();
现在,当您从print.txt读取标签时,可以使用ReadLine()。您需要读取多行才能获得完整的标签。我在最后添加了一个空白行,您可以在读取文件时使用它来检测您是否获得了创建标签的所有行。将发送到打印机时,请不要忘记再次附加“\ r”。