ASCII原始符号,以控制从.txt文件的打印机
-
24-09-2019 - |
题
一个标签打印机通过发送的原始ASCII字符的字符串(其格式的标签)controled。像这样:
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);
一切正常。不过,这样一来,我们不能看到添加控制字符)。
什么可能是一个解决这个问题?
解决方案
像斑马标签打印机外貌,我有不满。你需要解决的第一件事是你生成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 = 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);
希望这有助于 最好的祝福, 汤姆。
不隶属于 StackOverflow