Java使用斑马zpl指令打印图片解决将图片转成指令参数中符合data编码的字符串

心态爆炸,各种方法都尝试电脑浏览器都翻烂了。记录一下,怎样将图片转成zpl指令需要的格式数据。

关于zpl一些乱七八糟

斑马打印机有【R:,E:,B:,A:】四种不同内存区域。当你和斑马打印在同一个网段内直接在浏览器输入斑马打印的IP就能进入查看各种配置,指令的页面。

  • R 内存(R:):R 内存是用于存储打印作业相关的临时数据和图像缓存的内存区域。当打印作业被发送到打印机时,相关的图像数据和打印指令会被加载到 R 内存中进行处理和打印。R 内存通常用于存储临时性的数据,如打印队列中的作业,以及需要在打印过程中动态生成的图像数据。
  • E 内存(E:):E 内存是用于存储格式化的图像、字体和标签模板等内容的内存区域。这些内容可以通过 ZPL 指令在 E 内存中创建和存储,并且可以通过相应的 ZPL 指令从 E 内存中调用和打印。E 内存通常用于存储静态的或经常使用的标签模板,以便在打印过程中快速访问和使用。
  • B 内存(B:):B 内存是斑马打印机的标签缓冲区,用于存储将要打印的标签数据。在打印作业进行时,打印机会将标签数据加载到 B 内存中,然后进行打印操作。一旦打印作业完成,B 内存中的数据会被清除。
  • A 内存(A:):A 内存是斑马打印机的字体和图像缓存区域。当打印机需要使用特定的字体或图像时,它们会被加载到 A 内存中以便在打印作业中使用。
    zpl命令截图
    连接查看斑马打印机配置和指令截图
    在这里插入图片描述
    首先将图片指定一个名称使用zpl指令下载到打印机内存中,打印标签时候哪个位置需要这张图片在使用调用指令如^XG,^Im等指定名称调用。zpl指令提供了多种命令将图片下载到打印机指定的内存中,这些指令都需要一个最关键的参数data。
    zpl关于data的描述
    根据官方文档描述,除了这个ASCII十六进制字符串,还有更科学的B64和Z64两种编码但都没有提供具体的实现步骤。详情查看

ZB64 Encoding and Compression 目录

好了,我开始将图片转十六进制

  • 最开始思路,将图片转成字节数组,再转成ASCII之后再转成十六进制。发送打印机,咦,什么都没有,打印机data指令灯亮起说明接收了数据。西巴,看来这斑马要求不简单
  • 开始尝试使用B64方案,先将图片转成base64字符串,再计算它的CRC。怎么计算CRC呢,现在这么多种算法?开始疯狂百度,stackoverflow找到一些回答的,各种尝试,失败!但是发现了一位提供了一个关键信息
  • 各种算法CRC

It’s not easy. You have to convert the image to 1-bit per pixel b/w, and then calculate the size including the bytes per row, and then properly form up the parameters of the command to store it.~DG
Or…
Zebra provides an API to convert images to GRFs (Zebra internal image
type). There are a bunch of developer demos in the package, including
a demo on how to print/store an image as a GRF on your printer
Zebra Link-OS SDK download
Hope this helps

  • 发现一个c#版本的转成zpl格式的data的工具类,准备仿写一个Java版本的,啊,后面完全不知道逻辑了。放弃!

您必须将图像转换为每像素 1 位黑白,然后计算大小(包括每行字节数),然后正确形成命令的参数来存储它
就在这篇回答中找到了一个写的Java版本转图类,但测试打印很多图片都会失败。
多数类型图片打印失败链接 准备要使用这个了,不想再折磨了
上面代码附带的一个测试转图的网站

最终方法

开始摆烂,摸鱼突然发现一篇帖子提供的一个思路说,斑马的api中有转图的方法。死马当做活马医试一下呗。
stackoverflow中文翻译过来的
这个方法引起了我的注意
这个方法很早引起了我的注意,但是api中没有这两个同名的方法,我再api的官方文档中也没找到这两个方法就没怎么注意。我最后找了两个没有后缀的方法测试一下,居然成功了!!!!

  • 斑马api下载入口
  • 就是下面的三句代码,根据convertGraphic方法的第一个参数的结尾是.GRF还是.png还是其他的来生成不同编码格式的data数据

ZebraImageI image = ZebraImageFactory.getImage(“D:\4.png”);
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
PrinterUtil.convertGraphic(“R:SAMPLE.GRF”,image,outputStream);

不需要替换掉看着像特殊字符
不需要替换掉看着像特殊字符的,打印机能识别。
在这里插入图片描述
完结,如果有人详解讲解斑马api文档中的方法那是极好的,官方api中提供了不同语言的实现安卓,C#,C++等等都可以使用api来将图片的数据转成zpl编码格式的数据,撒花。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值