2010-01-31 20 views
2

标签打印机通过发送一串原始ASCII字符(格式化标签)进行控制。像这样:用于从.txt文件控制打印机的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

你是什么意思,但在这种情况下,打印机什么都不打印?你在说打印字符串的内容吗? – t0mm13b 2010-01-31 18:18:05

+0

不可以。打印机根本不打印任何东西。它的行为就像这样,当控制字符串被格式化为错误时,所以我认为StreamReader会添加一些不可见的字符。本打印机不打印字符串的内容,但仅打印日期,时间和价格(在上例中)。其余的只是符号,格式化标签。 – rem 2010-01-31 18:25:26

+0

见下:) – t0mm13b 2010-01-31 18:27:39

回答

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(); 

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

+0

@nobugz谢谢!你是说,我不应该通过简单的手工输入来编辑这个.txt文件吗?手工编辑这个文件的原因是什么问题? – rem 2010-02-02 20:34:07

+0

呃,那很可能。使用文本编辑器通常很难将\ x02控制代码填充到文件中。我不知道如何用记事本或Visual Studio的编辑器来做到这一点。不,输入“\ x02”不会。 – 2010-02-02 21:08:58

3

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

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); 

希望这有助于 最好的问候, 汤姆。

+0

谢谢,汤姆!在作为二进制文件读取的情况下,如何在发送到打印机之前将“byte [] data”变回字符串? – rem 2010-01-31 18:36:46

+0

关于StreamReader的阅读只有一条线(你认为这是由于“\ R”标志?),我只是要注意,显示字符串读取到一个MessageBox后时,它看起来付诸.txt文件整个字符串,没有任何遗漏。 – rem 2010-01-31 18:42:08

+0

@rem:请参阅答案的编辑部分... :)对于'\ r',标准行尾是'\ r \ n',最好使用System.Environment.Newline而不是硬编码版本,使其更强大和平台便携。 – t0mm13b 2010-01-31 18:56:08