C# 向Zebra TTP 2030打印机发送原始数据并获取其状态

C# 向Zebra TTP 2030打印机发送原始数据并获取其状态,c#,asp.net,printing,kiosk,zebra-printers,C#,Asp.net,Printing,Kiosk,Zebra Printers,我正在一个.netc#web应用程序上工作,我需要在斑马打印机(TTP2030)上打印文本和条形码。使用RawPrinterHelper类。我几乎得到了打印机的命令,作为一个unicode字符串 因此,要打印条形码,我需要: string enq = Convert.ToChar(5).ToString(); string esc = Convert.ToChar(27).ToString(); string nul = Convert.ToChar(0).ToString(); string

我正在一个
.net
c#
web应用程序上工作,我需要在斑马打印机(
TTP2030
)上打印文本和条形码。使用
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>
RawPrinterHelper
类中。然后,我尝试使用
SendFileToPrinter
和一个
.prn
文件发送命令,该文件是我从zebra网站获得的一个名为
kiosk printer toolbox
的小应用程序保存的

(我选择发送一个文件,而不是我上面描述的
SendStringToPrinter
方法,因为我不相信我在那里做了正确的事情,而且我还测试了用几个不同的命令将命令文件发送到打印机,结果成功了)


然后调用
ReadPrinter(hPrinter,sb,6,out-dwwrited)
sb
为空。该方法返回0有人知道我如何从打印机读取数据吗打印(文本和条形码)和获取打印机状态时,我是否应该考虑一种完全不同的方法?

java中有一个特定的函数可以实现这一点。我会去看看QZ打印。您只能打印到web应用程序家用计算机上本地运行的打印机上,其他任何人都无法打印。我会去检查一下小程序,看看你想做什么。它是专门为zebra打印机编写的。

作为更新,我放弃了winspool.drv,转而使用LibUsbDotNet直接读取和写入usb端口。使用winspool,无论是ReadPrinter还是GetPrinterData,我都无法从打印机获取任何数据(很可能我不知道如何使用它们,我找不到任何关于该主题的有用信息)。LibUsbDotNet是一个很棒的库,我可以轻松地向打印机发送命令(与上面描述的方式相同)并从中获取数据。我现在面临的唯一问题是转换打印机命令的十进制和十六进制值,并将输出转换为可读的内容。
[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);