7

问题

是否有简单的 ZPL 代码或方法可以从 Zebra 打印机返回错误消息,以确定标签是否打印不成功或存在某种错误?

进步

这是我为将打印机作业发送到斑马打印机而构建的一个不错的功能:

public static void SendToPrinter(string zplString, string ipAddress = "127.0.0.1", int port = 1337)
        {
            // Open connection
            TcpClient tcpClient = new TcpClient();
            tcpClient.Connect(ipAddress, port);

            // Write ZPL String to connection
            using (System.IO.StreamWriter writer = new System.IO.StreamWriter(tcpClient.GetStream()))
            {
                writer.Write(zplString);
                writer.Flush();
                writer.Close();
            }
            // Close Connection
            tcpClient.Close();
        }

zplString 中发生了很多神奇的事情,但基本上它由我们都喜欢的 ZPL 代码组成。我的方法中的问题是,这似乎是通往打印机的单程票。上面做了很多工作,如果我以某种方式有适当的 ZPL 代码来收听响应,我希望我们可以以某种方式对其进行修改以收听响应?

我根本没有看到任何文献或论坛讨论如何从斑马打印机接收响应并确定它是否成功?

问题

理想情况下,如果打印机以某种方式成功或失败,我想要一种使用包含在 C# 和 .NET 中的 ZPL 来理解打印机的方法。否则,我可能不得不手动查询用户“它打印了吗?”。这并不理想,但我还没有在我的手册中找到任何表明使用 ZPL 检测打印作业中存在错误的简单方法?

感谢您的耐心、帮助和阅读此问题。

4

3 回答 3

6

使用 ~HS 或主机状态命令,请参阅ZPL 手册的第 227 页。

Zebra 提供了一个C# Socket 示例

打印机将为您提供以下状态:

• 媒体输出

• 色带输出

• 头部打开

• 复卷机已满

• 打印头过热

于 2016-11-02T19:26:34.510 回答
3

命令 ~HS 或 Host Status Command 只为您提供打印机的状态,但它不会告诉您打印是否成功

于 2018-04-13T12:55:04.033 回答
3

使用~HS命令后检查打印机是否已打印并处于良好状态的逻辑。下面的代码使用Link-OS SDK命令获取状态,但您可以解析 ~HS 以获取相同的信息。“printerStatus.isReadyToPrint”只是验证~HQES文档定义的没有错误。如果您知道您的应用程序可能是唯一与打印机交互的东西,则此代码很有用。如果您有多个应用程序或连接将打印作业发送到同一台打印机,这将无法正常工作。

    public static bool CheckStatusAfter(ZebraPrinter printer)
    {
        try
        {
            printerStatus = printer.GetCurrentStatus();
            while ((printerStatus.numberOfFormatsInReceiveBuffer > 0) && (printerStatus.isReadyToPrint))
            {
                Thread.Sleep(500);
                printerStatus = printer.GetCurrentStatus();
            }
        }
        catch (ConnectionException e)
        {
            Console.WriteLine($"Error getting status from printer: {e.Message}");
        }
        if (printerStatus.isReadyToPrint)
        {
            Console.WriteLine($"Print Success");
            return true;
        }
        else
        {
            Console.WriteLine($"Cannot Print because the printer is in error.");
        }
        return false;
    }

来自:https ://github.com/Zebra/devtalks/blob/121317-LinkOS_CSharp/BasicWpfPrintApp

于 2019-10-05T16:49:53.180 回答