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

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

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

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

1. 什么是 ZPL?

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

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

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

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

核心優(yōu)勢:

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

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

第一步:使用 Pillow 繪制“標簽照”

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

from PIL import Image, ImageDraw, ImageFont

# 創(chuàng)建一個 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), "智能標簽助手", font=font, fill=0)

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

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

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

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

Windows 的普通打印驅(qū)動通常會經(jīng)過圖形層處理,速度較慢。為了追求極致響應(yīng),我們通過 pywin32 庫直接向打印機發(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 指令速查

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

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

5. 總結(jié)

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

開發(fā)建議:

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

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

相關(guān)文章

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

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

    這篇文章主要介紹了Python數(shù)據(jù)分析之pandas函數(shù)詳解,文中有非常詳細的代碼示例,對正在學(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在處理張量形狀變化時的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • NumPy數(shù)據(jù)類型對象(dtype)的構(gòu)造方式

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

湘潭市| 许昌县| 吉木乃县| 尤溪县| 安吉县| 会同县| 蒲江县| 苍溪县| 土默特右旗| 互助| 莎车县| 台东县| 凭祥市| 广元市| 双鸭山市| 景谷| 嘉义市| 白玉县| 聊城市| 杨浦区| 榆林市| 松滋市| 翼城县| 宜阳县| 鹿泉市| 周至县| 陆丰市| 桓仁| 阜南县| 英德市| 汽车| 浠水县| 扶风县| 南通市| 甘洛县| 平顺县| 夏津县| 桂东县| 苍山县| 璧山县| 通道|