实现标贴预览的两种方式
- 实现标贴预览的两种方式
- 前言
- 一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能
- 1、Labelary Online ZPL Viewer API 案例介绍
- 2、生成 PNG 格式
- 3、Parameters
- 二、通过 zpl 的 label.preview() 方法实现标贴预览功能
- 1、实现步骤
- 2、代码示例
实现标贴预览的两种方式
前言
本文介绍如何基于 ZPL 指令实现标贴的预览,项目的 GUI 界面基于 Pyside6 实现,zpl 格式的文件可以通过 BarTender 生成,也可以自己编写;关于如何基于 ZPL 指令绘制标贴和 通过 BarTender 将 btw 文件转换为 zpl 文件后续会在专栏中总结,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。
一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能
1、Labelary Online ZPL Viewer API 案例介绍
在这里先介绍下标贴预览的网站,Labelary Online ZPL Viewer
Labelary Online ZPL Viewer 提供了 API 接口,是一个在线的服务,可以使用 Pyhon、Java、C#、PHP 等多种语言进行调用;
项目是基于 Python 实现的,所以本文只介绍如何基于 Python 调用 API 接口。
点击 Python 后,页面跳转到 4.6. Python Example,这个提供了一个案例:使用 Requests 库发送 POST 请求,将 ZPL 格式的字符串转换为 PDF 文件:
import requests
import shutil
zpl = '^xa^cfa,50^fo100,100^fdHello World^fs^xz'
# adjust print density (8dpmm), label width (4 inches), label height (6 inches), and label index (0) as necessary
url = 'http://api.labelary.com/v1/printers/8dpmm/labels/4x6/0/'
files = {'file' : zpl}
headers = {'Accept' : 'application/pdf'} # omit this line to get PNG images back
response = requests.post(url, headers = headers, files = files, stream = True)
if response.status_code == 200:
response.raw.decode_content = True
with open('label.pdf', 'wb') as out_file: # change file name for PNG images
shutil.copyfileobj(response.raw, out_file)
else:
print('Error: ' + response.text)
运行代码后可以生成标贴的 PDF 文档,但如果想要保存图片格式又该如何操作?
2、生成 PNG 格式
找到 1. Introduction 介绍中查看信息,可以发现,其实 requests 请求头中默认无参为 PNG格式,也可以是 python Accept: image/png
,并且也提供了 IPL、EPL、DPL、JSON 等格式文件的 request header;
除 POST 请求外,也提供了 GET 请求,但是 Content-Type 是有所变化的。
3、Parameters
在 url 请求中,有以下的几个参数可以进行设置
- dpmm:打印密度,以每毫米点为单位,有 6dpmm, 8dpmm, 12dpmm, 24dpmm 四个值可以设置;
- width:标贴的宽度,以英寸为单位;
- height:标贴的高度,以英寸为单位;
- index:标签索引,一些 ZPL 代码会生成多个标签,这个参数可以用来访问这些不同的标签;
- zpl:ZPL代码;
二、通过 zpl 的 label.preview() 方法实现标贴预览功能
1、实现步骤
使用 Python 的第三方库 zpl 来实现标贴的预览功能,大致分为以下几个步骤:
- 创建图片的路径:
python imageFile = save_path_dir + "\\label.png"
; - 通过 zpl.Label() 方法创建标贴对象 label:
python label = zpl.Label(40, 40, 12)
; - 标贴对象 label 通过 write_text() 标贴写入 zpl 格式的字符串:
python label.write_text(self.zpl)
; - 标贴对象 label 通过 preview() 方法实现标贴预览:
python label.preview(outputfile=imageFile)
;
运行后即可在 1. 中创建的路径下生成 png 文件。
2、代码示例
import zpl
# <editor-fold desc="创建文件">
# 获取当前文件所在文件夹路径
folder_path = os.getcwd()
save_path_dir = f"{folder_path}\\tZpl"
# 判断该路径是否存在
if not os.path.exists(save_path_dir):
# 如果不存在则创建
os.makedirs(save_path_dir)
# 图片路径
imageFile = save_path_dir + "\\label.png"
# 先删掉上一次预览生成的png文件,要保持是最新的
if os.path.exists(imageFile):
try:
os.remove(imageFile)
except Exception as e:
print(e)
# </editor-fold>
# 定义标贴大小
label = zpl.Label(40, 40, 12)
# 标贴写入zpl
label.write_text(self.zpl)
try:
# 标贴预览
label.preview(outputfile=imageFile)
except Exception as e:
msg = 'Error: ' + f"{e}"
print(msg)