我在.net
c#
網絡應用程序上工作,我需要在斑馬打印機(TTP2030
)上打印文本和條形碼。使用RawPrinterHelper
類from here。我幾乎把打印機的命令作爲一個unicode字符串。將原始數據發送到Zebra TTP 2030打印機並獲取其狀態
因此,打印條形碼我做的:
string enq = Convert.ToChar(5).ToString();
string esc = Convert.ToChar(27).ToString();
string nul = Convert.ToChar(0).ToString();
string rs = Convert.ToChar(30).ToString();
string lf = Convert.ToChar(10).ToString();
string cr = Convert.ToChar(13).ToString();
StringBuilder sb = new StringBuilder();
sb.Append(esc + "BS" + nul + nul + Convert.ToChar(72).ToString() + nul + nul);
sb.Append(nul + nul + Convert.ToChar(64).ToString() + nul + Convert.ToChar(2).ToString() + Convert.ToChar(2).ToString());
sb.Append(esc + "BW" + nul + "733104000099" + nul);
sb.Append(lf + rs);
RawPrinterHelper.SendStringToPrinter(printerName, sb.ToString());
該命令的助記符是
< ESC>BS<0><0>< h 48><0><0>
<00><0>< h 40><0><2><2>
< ESC>BW<00>733104000099<00>
< LF>< RS>
什麼我不知道的是,如果我發送正確的事情像<^h 48>。在手冊中,前面的h
後跟空格表示十六進制值。在這種情況下,該值表示條形碼的X
座標(低位字節 - 我不知道這是什麼)。
如果此值以像素(或毫米)爲單位,如何轉換爲十六進制,然後轉換爲要發送給打印機的unicode?
另外,我該如何轉換十進制值我要發送?
例如,對於打印標尺線我送:
< ESC>r<0><0><0><0><1><230><0><24><3>
全部都是十進制值,這意味着位置,啓動,停止等
如何轉換這個命令,所以我可以發送到打印機?
我無法工作的另一件事是從打印機獲取數據。有幾個可用的命令,如獲取紙張狀態,序列號,固件等,要儘量做到這一點首先我在RawPrinterHelper
類添加
[DllImport("winspool.drv", CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern int ReadPrinter(IntPtr hPrinter, StringBuilder data, int buf, out int pcRead);
。然後我試圖發送使用SendFileToPrinter
和命令.prn
文件,我從一個叫kiosk printer toolbox
小的應用程序,我從斑馬線網站
得到保存(我選擇發送,而不是我上面描述,因爲,在SendStringToPrinter
辦法文件,我不相信我在那裏做了正確的事情,而且我測試了用幾個不同的命令發送一個命令文件到打印機,它工作)。
然後調用ReadPrinter(hPrinter, sb, 6, out dwWritten);
但sb
爲空。方法返回0. 有誰知道我如何從打印機讀取數據? 是否有一種完全不同的方法,我應該考慮打印(文本和條形碼)並獲取打印機狀態?
作爲這方面的更新,我已經放棄了winspool。drv贊成使用LibUsbDotNet直接讀取和寫入USB端口。對於winspool,我無法從打印機獲取任何數據,使用ReadPrinter或GetPrinterData(很可能我不知道如何使用它們,但我找不到任何有用的主題)。 LibUsbDotNet是一個偉大的庫,我可以輕鬆地將命令發送到打印機(與上述相同)並從中獲取數據。我現在面臨的唯一問題是轉換打印機命令的十進制和十六進制值並將輸出轉換爲可讀的內容。 – bfi 2010-06-04 08:54:49