2010-01-31 23 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