如何验证Zebra打印机是否使用ZPL和C#成功打印(或能够检测到错误)?

时间:2016-11-01 13:53:42

标签: c# .net zebra-printers zpl zpl-ii

问题

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

进度

这是我为将打印机作业发送到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检测打印作业有错误的简单方法?

感谢您的耐心,协助以及阅读此问题。

3 个答案:

答案 0 :(得分:5)

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

Zebra提供C# Socket example

打印机将显示以下状态:

•MEDIA OUT

•RIBBON OUT

•HEAD OPEN

•REWINDER FULL

•头部温度

答案 1 :(得分:1)

命令~HS或主机状态命令仅提供打印机的状态,但它不会告诉您打印是否成功

答案 2 :(得分:0)

使用~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