我正在使用.net
c#
需要在斑马打印机 ( TTP2030
) 上打印文本和条形码的 Web 应用程序。使用这里RawPrinterHelper
的课程。我几乎得到了打印机的命令,作为一个 unicode 字符串。
因此,要打印条形码,我会这样做:
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>
都是十进制值,表示位置、开始、停止等。
如何转换此命令以便发送到打印机?
我无法开始工作的另一件事是从打印机获取数据。有几个可用的命令,比如获取纸张状态、序列号、固件等。为了首先实现这一点,我添加了
[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);
在RawPrinterHelper
课堂上。然后我尝试使用从斑马网站获得的一个名为我的小应用程序保存SendFileToPrinter
的文件发送命令.prn
kiosk printer toolbox
(我选择发送文件而不是SendStringToPrinter
我上面描述的方法,因为,我不相信我在那里做正确的事情,而且我测试了使用几个不同的命令向打印机发送命令文件并且它有效)。
然后调用ReadPrinter(hPrinter, sb, 6, out dwWritten);
但sb
为空。该方法返回 0。有谁知道我如何从打印机读取数据?我应该考虑使用完全不同的方法来打印(文本和条形码)并获取打印机状态吗?