【Python_Zebra斑马打印机编程学习笔记(一)】实现标贴预览的两种方式

实现标贴预览的两种方式

    • 实现标贴预览的两种方式
    • 前言
    • [一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能](#一、调用 Labelary Online ZPL Viewer API 方法实现标贴预览功能)
      • [1、Labelary Online ZPL Viewer API 案例介绍](#1、Labelary Online ZPL Viewer API 案例介绍)
      • [2、生成 PNG 格式](#2、生成 PNG 格式)
      • 3、Parameters
    • [二、通过 zpl 的 label.preview() 方法实现标贴预览功能](#二、通过 zpl 的 label.preview() 方法实现标贴预览功能)

实现标贴预览的两种方式

前言

本文介绍如何基于 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 文件:

python 复制代码
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 请求中,有以下的几个参数可以进行设置

  1. dpmm:打印密度,以每毫米点为单位,有 6dpmm, 8dpmm, 12dpmm, 24dpmm 四个值可以设置;
  2. width:标贴的宽度,以英寸为单位;
  3. height:标贴的高度,以英寸为单位;
  4. index:标签索引,一些 ZPL 代码会生成多个标签,这个参数可以用来访问这些不同的标签;
  5. zpl:ZPL代码;

二、通过 zpl 的 label.preview() 方法实现标贴预览功能

1、实现步骤

使用 Python 的第三方库 zpl 来实现标贴的预览功能,大致分为以下几个步骤:

  1. 创建图片的路径:python imageFile = save_path_dir + "\\label.png"
  2. 通过 zpl.Label() 方法创建标贴对象 label:python label = zpl.Label(40, 40, 12)
  3. 标贴对象 label 通过 write_text() 标贴写入 zpl 格式的字符串:python label.write_text(self.zpl)
  4. 标贴对象 label 通过 preview() 方法实现标贴预览:python label.preview(outputfile=imageFile)
    运行后即可在 1. 中创建的路径下生成 png 文件。

2、代码示例

python 复制代码
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)
相关推荐
鸽芷咕18 分钟前
【Python报错已解决】ModuleNotFoundError: No module named ‘tensorflow‘
python·机器学习·tensorflow·bug·neo4j
李元豪20 分钟前
python 自动化 win11 编程 实现 一键 启动多个软件,QQ浏览器,snipaste,pycharm软件
python·pycharm·自动化
痛&快乐着21 分钟前
python-在PyCharm中使用PyQt5
python·qt·pycharm
fydw_71527 分钟前
PyTorch 激活函数及非线性变换详解
人工智能·pytorch·python
Rverdoser28 分钟前
在 PyCharm 中配置 Anaconda 环境
ide·python·pycharm
IT小辉同学44 分钟前
用 Pygame 实现一个乒乓球游戏
python·游戏·pygame
虚假程序设计1 小时前
pythonnet python图像 C# .NET图像 互转
开发语言·人工智能·python·opencv·c#·.net
测试老哥2 小时前
功能测试干了三年,快要废了。。。
自动化测试·软件测试·python·功能测试·面试·职场和发展·压力测试
爱吃油淋鸡的莫何2 小时前
Conda新建python虚拟环境问题
开发语言·python·conda
闲人编程2 小时前
Python实现日志采集功能
开发语言·python·fluentd·filebeat·日志采集