用于从.txt文件控制打印机的ASCII原始符号

时间:2010-01-31 18:14:34

标签: c# string text printing zebra-printers

通过发送一串原始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);,一切看起来都不错。但是,这样我们就看不到添加的控制字符了。

什么可以解决这个问题?

3 个答案:

答案 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”。