2010-06-01 92 views
4

我在.netc#網絡應用程序上工作,我需要在斑馬打印機(TTP2030)上打印文本和條形碼。使用RawPrinterHelperfrom 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. 有誰知道我如何從打印機讀取數據? 是否有一種完全不同的方法,我應該考慮打印(文本和條形碼)並獲取打印機狀態?

+4

作爲這方面的更新,我已經放棄了winspool。drv贊成使用LibUsbDotNet直接讀取和寫入USB端口。對於winspool,我無法從打印機獲取任何數據,使用ReadPrinter或GetPrinterData(很可能我不知道如何使用它們,但我找不到任何有用的主題)。 LibUsbDotNet是一個偉大的庫,我可以輕鬆地將命令發送到打印機(與上述相同)並從中獲取數據。我現在面臨的唯一問題是轉換打印機命令的十進制和十六進制值並將輸出轉換爲可讀的內容。 – bfi 2010-06-04 08:54:49

回答

-3

在java中有一個特定的功能來做到這一點。我會去看看QZ-Print。您只能打印到在您的Web應用主機上本地運行的打印機,其他人也無法進行打印。我會去看看你想要做的applet。 IT是專門爲斑馬打印機編寫的。

+0

-1這個問題不是關於Java – 2014-07-23 19:05:12

+0

「有誰知道我可以從打印機讀取數據嗎?我應該考慮打印(文本和條形碼)和獲取打印機狀態的完全不同的方法嗎?」你正在使用一個web應用程序,通過一個java小應用程序採取一種不同的方法和它的JavaScript,非常相關。向下投票就是無論如何,不​​要問一個問題,如果你不打開其他意見,特別是當你問是否有不同的方法,Jzebra/QZprint,從字面上做你想要的一切。 – mathis1337 2014-07-30 22:59:32

相關問題