C# 如何通过蓝牙将字体发送到Zebra打印机

C# 如何通过蓝牙将字体发送到Zebra打印机,c#,bluetooth,zebra-printers,C#,Bluetooth,Zebra Printers,我必须通过蓝牙向打印机Zebra RW420发送字体文件。我正在使用Zebra Windows Mobile SDK,但找不到任何方法将其发送并存储在打印机上。我可以通过Label Vista手动完成,但必须在200多台打印机中完成 有人有什么建议或者知道我可以使用SDK中的什么方法吗 提前感谢。您可以使用SDK发送任何类型的数据。斑马字体只是一个带有标题的字体文件。因此,如果从Label Vista捕获输出cpf文件,则可以从SDK发送该文件。只需创建一个连接,并使用文件内容调用write(b

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

有人有什么建议或者知道我可以使用SDK中的什么方法吗


提前感谢。

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

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

! CISDF
<filename>
<size>
<cksum>
<data>
!CISDF
前四行末尾有一个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();
//计算文件的校验和
//获取数据流中所有字节的总和
UInt16总和=0;
对于(int i=0;i忽略校验和
bt.Write(Properties.Resources.cmlogo);
//优雅地关闭我们的连接并断开连接
bt.Close();
bt.断开打印机();

MP2Bluetooth是一个我们内部用来抽象BT连接和通信的类——我相信你也有自己的

我一直试图让它工作,但没有成功,数据发送到打印机后,打印机自动进纸,什么也没有发生。根据Zebra SDK技术支持,font.CPF位于数据之前的标题之前!CISDF baltic.cpf 00002077 40FF Im使用二进制读取器将文件转换为二进制文件,CpclCrcHeader.getWChecksum(myBinary)以获得校验和。然后,我将标题转换为二进制文件,并使用write(byte[])方法将文件中的二进制文件合并,通过SerialPrinterConnection发送到打印机。你有什么建议吗?我不知道你是否需要校验和。您的cpf文件上有CISBF头吗?你的CISDF头大小合适吗?我建议使用LabelVista创建并发送一次字体,然后甚至可以嗅探数据包以查看发生了什么。我很快就完成了,我看到了一个类似的CISDF头,你已经列出了,然后是一个CISBF,一些字体信息,然后是-END-font-info,然后是所有的二进制垃圾,最后是一个endCISDF,工作得很好。我的错误是在写入打印机时,我试图将标题与字体数据合并,而不是逐行写入。谢谢分享你的知识。