【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)
相关推荐
m0_716430076 小时前
SQL如何处理时间序列缺失值_利用窗口函数进行前后值填充
jvm·数据库·python
dLYG DUMS6 小时前
Redis——使用 python 操作 redis 之从 hmse 迁移到 hset
数据库·redis·python
AI玫瑰助手6 小时前
Python基础:字符串的切片操作(含正向反向索引)
android·开发语言·python
2301_815279526 小时前
golang如何编译iOS库_golang编译iOS库实践
jvm·数据库·python
MapleWan320636 小时前
告别 AI IDE 配置碎片化:用 MSR-cli 打造你的本地 MCP / Rules / Skills 统一仓库
python·github
深蓝海拓6 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(十一)框架的进一步完善:UI的自动周期更新以及下行数据的生成和处理
网络·笔记·python·学习·ui·plc
2402_854808376 小时前
C#怎么开发CAD自定义命令_C#如何调用AutoCAD的API【教程】
jvm·数据库·python
m0_716430076 小时前
mysql乐观锁更新失败如何处理_应用层重试逻辑编写建议
jvm·数据库·python
qq_654366986 小时前
SQL嵌套查询中的变量传值_优化存储过程逻辑
jvm·数据库·python
m0_748920366 小时前
持久化存储如何与后端接口同步?解决本地缓存与数据库不一致痛点
jvm·数据库·python