【问题标题】:Sending raw data to Zebra TTP 2030 printer and getting its status将原始数据发送到 Zebra TTP 2030 打印机并获取其状态
【发布时间】:2011-02-26 10:16:35
【问题描述】:

我正在使用 .net c# 网络应用程序,我需要在斑马打印机 (TTP2030) 上打印文本和条形码。使用RawPrinterHelperfrom here。我几乎得到了打印机的命令,作为一个 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 后跟空格表示十六进制值。在这种情况下,该值表示条形码的X 坐标(低位字节 - 我不知道这是什么)。

如果此值以像素(或毫米)为单位,如何转换为十六进制,然后转换为我发送到打印机的 unicode?​​strong>

另外,如何转换我必须发送的十进制值

例如打印我发送的标尺线:

&lt; ESC&gt;r&lt;0&gt;&lt;0&gt;&lt;0&gt;&lt;0&gt;&lt;1&gt;&lt;230&gt;&lt;0&gt;&lt;24&gt;&lt;3&gt;

都是十进制值,表示位置、开始、停止等。

如何转换此命令以便发送到打印机

我无法开始工作的另一件事是从打印机获取数据。有几个可用的命令,比如获取纸张状态、序列号、固件等。为了尝试实现这一点,我首先添加了

[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。有谁知道我如何从打印机读取数据我应该考虑使用完全不同的方法来打印(文本和条形码)并获取打印机状态吗?

【问题讨论】:

  • 作为对此的更新,我放弃了 winspool.drv,转而使用 LibUsbDotNet 直接读取和写入 USB 端口。使用winspool,我无法从打印机获取任何数据,使用ReadPrinter 或GetPrinterData(很可能我不知道如何使用它们,我找不到任何有用的主题)。 LibUsbDotNet 是一个很棒的库,我可以轻松地向打印机发送命令(以与上述相同的方式)并从中获取数据。我现在面临的唯一问题是将打印机命令的十进制和十六进制值转换为可读的输出。

标签: c# asp.net printing kiosk zebra-printers


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多