2

我正在使用 C# 为 Windows 7 64 位平台编写一个 .Net WPF 应用程序。我的应用程序需要与通过 USB 连接的 Zebra KR403 打印机进行通信。我的问题可能非常基本,但我希望这篇文章能帮助那些不熟悉在 .Net 中使用这台打印机的其他人。

1. 我应该使用哪个 SDK?是否像在我的项目中添加 .dll 并使用它一样简单?我曾尝试使用 Windows CE SDK,但是当 ZSDK_API.dll 尝试加载 ZebraUsb.dll 时,我得到了 BadImageFormatException。这通常意味着 dll 是为不同的平台编译的。

2. 我应该使用 SDK 打印还是应该使用普通的 .Net 打印库?两种选择的优势是什么?例如,如果我使用 .Net 库进行打印,我还必须使用 ZBI(用于与打印机通信的语言)吗?

3. 如何获取打印机的状态(缺纸、未装入介质等)?我找到了一个指南(必须删除链接;声誉不足以发布超过 2 个链接),它解释了如何在 Windows CE 或 Mobile 中执行此操作,但我找不到 Windows 7(普通桌面版本)的等效项。

如果有人可以帮助我解决这些问题,我将不胜感激,我将在此处发布我的最终解决方案(或执行上述操作所需的核心代码)供其他人使用。

预先感谢您的任何帮助。

更新:

我在这里找到了一些允许我通过 USB 直接与打印机通信的代码:http: //danielezanoli.blogspot.com/2010/06/usb-communications-with-zebra-printers.html

我还找到了 KR403 打印机的硬件集成商指南,它在此处解释了 ~HQES 命令的结果:https: //support.zebra.com/cpws/docs/crawl/UG_Kiosk/KR403_UG.pdf#xml=https :// km.zebra.com/kb/index?page=answeropen&type=open&searchid=1363543831914&answerid=16777218&iqaction=6&url=https%3A%2F%2Fsupport.zebra.com%2Fcpws%2Fdocs%2Fcrawl%2FUG_Kiosk%2FKR403_UG.pdf&highlightinfo=12583129,8815, 8825

我现在可以使用上述库通过 USB 或使用 .Net 中的 SerialPort 类通过串行端口将 ~HQES 命令发送到打印机。然后我可以使用上面的硬件集成商指南解释结果并检查打印机的状态。由于这很容易做到,我现在不打算尝试移植 SDK。

4

4 回答 4

2

我在这里找到了一些允许我通过 USB 直接与打印机通信的代码:http: //danielezanoli.blogspot.com/2010/06/usb-communications-with-zebra-printers.html

我还找到了 KR403 打印机的硬件集成商指南,它在此处解释了 ~HQES 命令的结果:https: //support.zebra.com/cpws/docs/crawl/UG_Kiosk/KR403_UG.pdf#xml=https :// km.zebra.com/kb/index?page=answeropen&type=open&searchid=1363543831914&answerid=16777218&iqaction=6&url=https%3A%2F%2Fsupport.zebra.com%2Fcpws%2Fdocs%2Fcrawl%2FUG_Kiosk%2FKR403_UG.pdf&highlightinfo=12583129,8815, 8825

于 2013-06-01T08:21:54.490 回答
0

几年前我玩过 Zebra 打印机。要使用 Zebra 的 SDK,您需要做的就是在项目中包含对 dll 的引用(右键单击 Visual Studio 中的引用并单击“添加引用”,然后导航到 dll)。注意:这是假设他们现在有 .NET 程序集。他们没有回到过去,但添加互操作代码并不难。

我记得,SDK 的主要优势(以及我使用它的原因)是它具有一些用于标签打印的内置功能,包括条形码等。因此,您可以找到一个单独的库来生成条形码,但 Zebra SDK 让您只需发送一个字符串(或数字)并让它为您编码并打印条形码。

于 2013-03-12T14:32:15.453 回答
0

Zebra 目前不提供桌面版 .NET SDK。如您所见,Zebra .NET SDK 适用于较旧的 Windows CE/Windows Mobile 平台。

Zebra 确实提供了基于 Java 的 SDK。它没有声称支持 KR403,但可能值得进行 20 分钟的测试,看看您是否可以将它与您的项目集成:http ://www.zebra.com/us/en/products-services/software/链接-os/链接-os-sdk.html

正如其他人所提到的,Zebra 的 SDK 允许您可靠地检查状态,并利用 Zebra 打印机功能(如打印机格式存储和调用、打印机图像调用、非 USB 通信等)。它应该胜过其他通用打印库,因为它是为与 Zebra 打印机一起使用而设计的。

于 2013-03-14T12:49:55.130 回答
0

finnaly 找到了与 c# 或 VB.net 兼容的 .dll,您可以从 zebra 网站下载它: ZSDK API

ZSDK_API.dll ZebraPlatformUtil.dll

我通过 LAN 网络斑马打印机 ZT400 亲自测试这些 .dll,这里使用了一些代码:

using ZSDK_API.Comm;
using ZSDK_API.ApiException;
using ZSDK_API.Printer;



public void SendZplOverTcp(String theIpAddress)
    {

        try
        {
            // Instantiate connection for ZPL TCP port at given address. 
            ZebraPrinterConnection thePrinterConn = new TcpPrinterConnection(theIpAddress, TcpPrinterConnection.DEFAULT_ZPL_TCP_PORT);

            // Open the connection - physical connection is established here.
            thePrinterConn.Open();

            // This example prints "This is a ZPL test." near the top of the label.
            String zplData = "^XA^FO20,20^A0N,25,25^FDThis is a ZPL test.^FS^XZ";

            // Send the data to printer as a byte array.
            thePrinterConn.Write(Encoding.Default.GetBytes(zplData));

            // Close the connection to release resources.
            thePrinterConn.Close();

        }
        catch (ZebraPrinterConnectionException e)
        {

            // Handle communications error here.
            MessageBox.Show(e.StackTrace);
        }

    }
于 2015-08-24T16:04:10.910 回答