一个标签打印机通过发送的原始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);

希望这有助于 最好的祝福, 汤姆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top