【问题标题】:How to send Font via Bluetooth to Zebra printer如何通过蓝牙将字体发送到 Zebra 打印机
【发布时间】:2012-06-22 20:11:28
【问题描述】:

我必须通过蓝牙将字体文件发送到我的打印机 Zebra RW420。我使用 Zebra Windows Mobile SDK,但找不到任何方法将其发送并存储在打印机上。我可以通过 Label Vista 手动完成,但必须在 200 多台打印机上完成。

任何人有任何建议或知道我可以使用 SDK 中的哪种方法?

提前致谢。

【问题讨论】:

    标签: c# bluetooth zebra-printers


    【解决方案1】:

    CISDF 是正确答案,它可能是您计算的校验和值不正确。我在连接到 USB 端口的 RW420 上放了一个端口嗅探器,发现它可以工作。我实际上将一些 PCX 图像发送到打印机,然后在标签中使用它们。

    ! CISDF
    <filename>
    <size>
    <cksum>
    <data>
    

    在第一四行的末尾有一个 CRLF。使用 0000 作为校验和会导致打印机忽略任何校验和验证(我在一些 ZPL 手册中发现了一些非常晦涩的引用,尝试了它并成功了)。 是文件的 8.3 名称,因为它将存储在打印机的文件系统中,而 是文件的大小,长度为 8 个字符,格式为十六进制数。 是作为校验和的数据字节总和的二进制补码。 当然是要存储在打印机上的文件的内容。

    这是我用来将示例图像发送到打印机的实际 C# 代码:

    // calculate the checksum for the file
    
    // get the sum of all the bytes in the data stream
    UInt16 sum = 0;
    for (int i = 0; i < Properties.Resources.cmlogo.Length; i++)
    {
      sum += Convert.ToUInt16(Properties.Resources.cmlogo[ i]);
    }
    
    // compute the two's complement of the checksum
    sum = (Uint16)~sum;
    sum += 1;
    
    // create a new printer
    MP2Bluetooth bt = new MP2Bluetooth();
    
    // connect to the printer
    bt.ConnectPrinter("<MAC ADDRESS>", "<PIN>");
    
    // write the header and data to the printer
    bt.Write("! CISDF\r\n");
    bt.Write("cmlogo.pcx\r\n");
    bt.Write(String.Format("{0:X8}\r\n", Properties.Resources.cmlogo.Length));
    bt.Write(String.Format("{0:X4}\r\n", sum));  // checksum, 0000 => ignore checksum
    bt.Write(Properties.Resources.cmlogo);
    
    // gracefully close our connection and disconnect
    bt.Close();
    bt.DisconnectPrinter();
    

    MP2Bluetooth 是我们在内部使用的一个类,用于抽象 BT 连接和通信 - 我敢肯定,您也有自己的!

    【讨论】:

    • 完美运行。我的错误是在写入打印机时,我试图将标题与字体数据合并,而不是逐行写入。感谢您分享您的知识。
    【解决方案2】:

    您可以使用 SDK 发送任何类型的数据。 Zebra 字体只是一个带有标题的字体文件。因此,如果您从 Label Vista 捕获输出 cpf 文件,您可以从 SDK 发送该文件。只需创建一个连接,然后使用文件内容调用write(byte[])

    【讨论】:

    • 我一直试图让它工作但没有成功,在数据发送到打印机后打印机自动进纸并且没有任何反应。根据 Zebra SDK 技术支持,字体 .CPF 在数据之前的标题之前。 ! CISDF baltic.cpf 00002077 40FF 我使用 BinaryReader 将文件转换为二进制文件,CpclCrcHeader.getWChecksum(myBinary) 以获取 CheckSum。然后我将 Header 转换为二进制文件并与文件中的二进制文件合并,以使用 write(byte[]) 方法通过 SerialPrinterConnection 发送到打印机。您对可能出现的问题有什么建议吗?
    • 我不知道你是否需要校验和。您的 cpf 文件上是否有 CISBF 标头?您的 CISDF 标头中是否有正确的尺寸?我建议使用 LabelVista 来创建并发送一次字体,然后甚至可以嗅探数据包以查看发生了什么。我只是很快就做到了,我看到了您列出的类似 CISDF 标头,然后是 CISBF,一些字体信息,然后是 -END-FONT-INFO,然后是所有二进制垃圾,最后是 ENDCISTD
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多