2

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

有什么办法可以解决这个问题?

4

3 回答 3

3

您的代码调用tr.ReadLine()一次,但看起来您在该字符串中有多行。

于 2010-01-31T18:20:57.490 回答
1

可能是 StreamReader 正在以 Unicode 格式读取它。顺便说一句,你只读了一行……你需要迭代这些行……你最好的办法是这样做:

字符串打印字符串;
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));
字节[] 数据 = br.ReadBytes(br.BaseStream.Length);
br.关闭();

编辑:rem的评论之后,我认为最好在此处包含此附加代码段...这是从上一个data引用变量的代码段开始的...

字符串 sData = System.Text.Encoding.ASCII.GetString(data);

希望这会有所帮助,最好的问候,汤姆。

于 2010-01-31T18:21:40.517 回答
1

看起来像 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();

现在,当您从 print.txt 中读取标签时,您可以使用 ReadLine()。您需要阅读多行才能获得完整的标签。我在最后添加了一个空行,您可以在读取文件时使用它来检测您是否获得了创建标签的所有行。发送到打印机时不要忘记再次附加“\r”。

于 2010-01-31T19:44:13.773 回答