最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python+ZPL實(shí)現(xiàn)標(biāo)簽打印與中文排版

 更新時(shí)間:2026年02月03日 08:51:38   作者:GAMC  
這篇文章主要介紹了如何使用Python和ZPL(斑馬打印機(jī)腳本語言)來解決標(biāo)簽打印問題,通過將內(nèi)容先在Python中渲染成圖片,然后轉(zhuǎn)換成ZPL指令,實(shí)現(xiàn)了所見即所得、支持任意字體和無需配置打印機(jī)等優(yōu)勢,需要的朋友可以參考下

分享一下在本項(xiàng)目中,我們是如何利用 Python 優(yōu)雅地解決 ZPL 打印。

1. 什么是 ZPL?

ZPL 是斑馬公司為標(biāo)簽打印機(jī)開發(fā)的一套腳本語言。你可以把它想象成打印機(jī)界的“HTML”。通過發(fā)送一串類似 ^XA^FO50,50^A0N,50,50^FDHello World^FS^XZ 的指令,打印機(jī)就能在指定位置打印出文字。

2. 我們的秘密武器:降維打擊

為了繞過 ZPL 繁瑣的字體配置,我們采用了一種“降維打擊”的策略:將所有內(nèi)容(文字、條碼、二維碼)先在 Python 中渲染成一張圖片,然后將圖片轉(zhuǎn)換成 ZPL 指令發(fā)給打印機(jī)。

這種方案的專業(yè)術(shù)語叫 “文本轉(zhuǎn)位圖”。

核心優(yōu)勢:

  • 所見即所得:你在屏幕上看到的字體、間距,打印出來完全一致。
  • 支持任意字體:只要你電腦里有的字體(微軟雅黑、阿里巴巴普惠體等),統(tǒng)統(tǒng)都能打印。
  • 無需配置打印機(jī):不需要去折騰打印機(jī)的內(nèi)存和字體文件,插上就能打。

3. 技術(shù)實(shí)現(xiàn)拆解

第一步:使用 Pillow 繪制“標(biāo)簽照”

我們利用 Python 的 Pillow 庫,根據(jù)業(yè)務(wù)數(shù)據(jù)創(chuàng)建一個(gè)空白畫布,然后在上面畫圖。

from PIL import Image, ImageDraw, ImageFont

# 創(chuàng)建一個(gè) 203 DPI 的小畫布 (約 40mm x 30mm)
width, height = 320, 240
img = Image.new('1', (width, height), 1) # '1' 表示二值圖(黑白)
draw = ImageDraw.Draw(img)

# 加載心儀的字體
font = ImageFont.truetype("msyh.ttc", 24) # 微軟雅黑
draw.text((20, 20), "智能標(biāo)簽助手", font=font, fill=0)

第二步:將圖片轉(zhuǎn)換為 ZPL 十六進(jìn)制數(shù)據(jù)

ZPL 提供了一個(gè) ^GFA 指令,允許我們發(fā)送原始的圖像字節(jié)數(shù)據(jù)。我們將 Pillow 處理好的黑白像素點(diǎn),轉(zhuǎn)換成打印機(jī)能聽懂的十六進(jìn)制字符串。

在本項(xiàng)目中,src/zpl_utils.py 負(fù)責(zé)這項(xiàng)繁瑣的轉(zhuǎn)換工作,確保每一行像素都能精準(zhǔn)對應(yīng)。

第三步:發(fā)送 RAW 數(shù)據(jù)到打印機(jī)

Windows 的普通打印驅(qū)動通常會經(jīng)過圖形層處理,速度較慢。為了追求極致響應(yīng),我們通過 pywin32 庫直接向打印機(jī)發(fā)送 RAW(原始) 數(shù)據(jù)。

import win32print

def send_to_printer(printer_name, zpl_data):
    hPrinter = win32print.OpenPrinter(printer_name)
    try:
        # 開啟打印作業(yè),指定類型為 "RAW"
        hJob = win32print.StartDocPrinter(hPrinter, 1, ("Label Job", None, "RAW"))
        win32print.StartPagePrinter(hPrinter)
        win32print.WritePrinter(hPrinter, zpl_data.encode('utf-8'))
        win32print.EndPagePrinter(hPrinter)
        win32print.EndDocPrinter(hPrinter)
    finally:
        win32print.ClosePrinter(hPrinter)

4. 必備 ZPL 指令速查

在本項(xiàng)目中,我們雖然主要依賴圖像傳輸,但仍需一些基礎(chǔ)指令來定義標(biāo)簽。以下是核心指令說明:

指令說明作用
^XA標(biāo)簽開始告訴打印機(jī):這是一張新標(biāo)簽的起點(diǎn)。
^XZ標(biāo)簽結(jié)束告訴打印機(jī):指令發(fā)送完畢,可以開始打印/出紙了。
^PW打印寬度設(shè)置標(biāo)簽的寬度(以點(diǎn) dots 為單位),防止內(nèi)容被截?cái)唷?/td>
^LL標(biāo)簽長度設(shè)置標(biāo)簽的高度,決定了打印機(jī)走紙的距離。
^LH標(biāo)簽原點(diǎn)設(shè)置打印的起始坐標(biāo) (0,0) 的物理位置。
^MD打印濃度設(shè)置打印深度(0-30),覺得顏色不夠黑?調(diào)它。
^FO字段坐標(biāo)Field Origin,定義元素在標(biāo)簽上的 X,Y 軸位置。
^FS字段分隔符Field Separator,每個(gè)元素指令后的“句號”,必不可少。
^GFA圖形 ASCII本方案的核心。它負(fù)責(zé)將我們轉(zhuǎn)換好的十六進(jìn)制圖像數(shù)據(jù)“畫”到標(biāo)簽上。

5. 總結(jié)

通過 Python + Pillow + ZPL (^GFA) 的組合,我們成功地將復(fù)雜的硬件編程轉(zhuǎn)變成了熟悉的圖形處理編程。

開發(fā)建議:

  1. DPI 匹配:打印機(jī)通常有 203 DPI 或 300 DPI 兩種,繪圖時(shí)要根據(jù)打印機(jī)型號計(jì)算好像素尺寸,否則打出來的標(biāo)簽會偏大或偏小。
  2. 二值化處理:在發(fā)送給打印機(jī)前,務(wù)必對圖片進(jìn)行閾值處理,確保只有純黑和純白,避免打印出“麻點(diǎn)”。
  3. 性能優(yōu)化:對于固定格式的標(biāo)簽,可以緩存已經(jīng)生成的 ZPL 模板,只替換變化的變量數(shù)據(jù)。

以上就是使用Python+ZPL實(shí)現(xiàn)標(biāo)簽打印與中文排版的詳細(xì)內(nèi)容,更多關(guān)于Python ZPL標(biāo)簽打印與中文排版的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python數(shù)據(jù)分析之pandas函數(shù)詳解

    Python數(shù)據(jù)分析之pandas函數(shù)詳解

    這篇文章主要介紹了Python數(shù)據(jù)分析之pandas函數(shù)詳解,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的pandas函數(shù)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-04-04
  • Python中zipfile壓縮包模塊的使用

    Python中zipfile壓縮包模塊的使用

    zipfile 模塊提供了創(chuàng)建、讀取、寫入、添加及列出 ZIP 文件的工具,本文主要介紹了Python中zipfile壓縮包模塊的使用,感興趣的可以了解一下
    2021-05-05
  • pytorch中view和reshape的區(qū)別

    pytorch中view和reshape的區(qū)別

    本文主要介紹了PyTorch中view和reshape在處理張量形狀變化時(shí)的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • NumPy數(shù)據(jù)類型對象(dtype)的構(gòu)造方式

    NumPy數(shù)據(jù)類型對象(dtype)的構(gòu)造方式

    這段文章詳細(xì)介紹了NumPy中的`numpy.dtype`類及其應(yīng)用用,涵蓋數(shù)據(jù)類型對象的創(chuàng)建、屬性及用示例,關(guān)鍵點(diǎn)包括:`numpy.dtype`類、數(shù)據(jù)類型對象、示例
    2026-05-05
  • Scrapy爬蟲多線程導(dǎo)致抓取錯(cuò)亂的問題解決

    Scrapy爬蟲多線程導(dǎo)致抓取錯(cuò)亂的問題解決

    本文針對Scrapy爬蟲多線程導(dǎo)致抓取錯(cuò)亂的問題進(jìn)行了深入分析,并提出了相應(yīng)的解決方案,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Python實(shí)現(xiàn)購物車功能的方法分析

    Python實(shí)現(xiàn)購物車功能的方法分析

    這篇文章主要介紹了Python實(shí)現(xiàn)購物車功能的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)購物車功能的具體步驟、相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • TensorFlow使用Graph的基本操作的實(shí)現(xiàn)

    TensorFlow使用Graph的基本操作的實(shí)現(xiàn)

    這篇文章主要介紹了TensorFlow使用Graph的基本操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Python列表list內(nèi)建函數(shù)用法實(shí)例分析【insert、remove、index、pop等】

    Python列表list內(nèi)建函數(shù)用法實(shí)例分析【insert、remove、index、pop等】

    這篇文章主要介紹了Python列表list內(nèi)建函數(shù)用法,結(jié)合具體實(shí)例形式分析了list中insert、remove、index、pop等函數(shù)的功能、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-07-07
  • 基于python3實(shí)現(xiàn)倒敘字符串

    基于python3實(shí)現(xiàn)倒敘字符串

    這篇文章主要介紹了基于python3實(shí)現(xiàn)倒敘字符串,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Python3.X 線程中信號量的使用方法示例

    Python3.X 線程中信號量的使用方法示例

    信號量semaphore 是一個(gè)變量,控制著對公共資源或者臨界區(qū)的訪問。信號量維護(hù)著一個(gè)計(jì)數(shù)器,指定可同時(shí)訪問資源或者進(jìn)入臨界區(qū)的線程數(shù)。下面這篇文章主要給大家介紹了關(guān)于Python3.X 線程中信號量的使用方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07

最新評論

于田县| 汉源县| 招远市| 唐河县| 手游| 孙吴县| 黎平县| 双桥区| 鹤岗市| 宜黄县| 揭阳市| 东港市| 长葛市| 阳原县| 平安县| 隆昌县| 焦作市| 葫芦岛市| 朝阳市| 隆化县| 江门市| 曲阜市| 牙克石市| 宁乡县| 白城市| 马山县| 藁城市| 白玉县| 根河市| 镇坪县| 汕尾市| 喀喇沁旗| 揭阳市| 石楼县| 安康市| 视频| 滨海县| 健康| 芮城县| 文昌市| 五峰|