在LP2844Z(斑马打印机)的收据中包含PNG图片。

6

我正在创建一个基于HTML5画布的签名/绘图框。目前我们将画布保存为PNG格式存储在服务器上,但也可以将base64字符串轻松地保存在数据库中。现在的问题是如何在打印的收据上包含签名。

目前我们使用^GF字段来处理打印图像,但问题是打印机需要什么格式的PNG文件。我是否可以简单地包含Base64编码的字符串?或者我应该将其转换为ASCII十六进制字符串?或者我真的应该先将其转换为位图吗?

我没有找到任何文档说明这台特定的打印机是否处理PNG文件,甚至如何发送它们。我唯一找到的信息是将它作为B64或Z64位图发送,但我看到到处都有发送png的参考。


我认为您需要提供更多有关如何将此发送到打印机的详细信息。通过API吗?或者如果您的收据在浏览器中查看,则在打印时浏览器会负责将图像发送到打印机。当然,您可能希望针对硬件进行测试,以确保不超过打印区域的大小。 - AaronLS
斑马打印机具有极其晦涩的专有数据格式。尝试转换图像格式会增加复杂度,使用Windows打印机驱动程序会更简单。在您的代码中使用PrintDocument。 - Hans Passant
有没有办法将XML转换为.lbl并查看实际呈现的内容? - cDecker32
好的,我们不会发送XML文件,那些只是用来帮助填充值的。所以基本上我们只是向打印机发送一个ZPL流。 - cDecker32
1个回答

6
您需要发送的数据不是PNG格式。您需要将图片转换成黑白色,然后将数据发送到打印机。例如,如果您有一个40x50像素的图像,您需要取出图像并去掉颜色信息,这样您就会得到2000位数据。然后,您可以像这样发送ZPL:^GFB,250,250,5,{2000 bits of data}。
我通过将2000位/8(位/字节)来获取250个字节。我通过将40除以8来获得5。行数将自动计算。
在处理斑马打印机时,我发现以位为单位思考非常有用。所有的图形都是在位级别上完成的。
请记住,您要发送的图像大小将根据打印机的DPI而改变。203 DPI打印机将在大约0.2英寸x 0.25英寸的大小显示我的示例。在300 DPI打印机上,它将显示为大约0.13英寸x 0.16英寸。这是因为打印机只会将原始数据放置在格式上,像素数就是图像的点数。
希望这能帮到您!
参考资料: [1] ZPL手册第208页(^GF第2页)。

我来这里的目的是想发布我昨晚发现的内容,但您已经赢了。我通过调整指定原始图像文件的数字最终解决了这个问题。 现在的问题是如何在C#中将RGB PNG图像转换为二值化的tiff/bitmap。 - cDecker32
我很快就找到了以下内容: System.Drawing.Bitmap b = new System.Drawing.Bitmap("c:\\test.jpg"); System.Drawing.Bitmap b0 = CopyToBpp(b,1); 我在这里找到了:http://www.wischik.com/lu/programmer/1bpp.html。 - Ethan
是的,整天我都在处理这个问题,现在唯一的问题是某种偏移问题。很可能是因为我正在从bmp格式转换。我只需要弄清楚这个程序正在寻找什么样的文件头... - cDecker32
在发送图像之前,应该删除任何头数据。它应该只是打印引擎渲染的数据位。因此,请剥离图像中的任何头数据。 - Ethan
哇,成功了,非常感谢!我本来就是这么做的,但最终得到的结果与我实际需要的完全不同。 - cDecker32
太棒了!很高兴能帮忙!我以前也遇到过向打印机发送数据的问题。这是使用它们一段时间后学到的东西。 - Ethan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接