python 中使用 treepoem 模块你会遇到的坑
treepoem 模块简介
treepoem 模块可以方便创建多种条形码、二维码,与 qrcode 相比,它创建的种类丰富,缺点是速度慢,不支持中文。但若你决定要用 treepoem 后,这些坑是一定会遇到的,我也是花了不少时间才逐一解决,现在分享给大家!
代码量不多,就简单的几行就成创建二维码
import treepoem
def generate_barcode(data,file,_type='code128',options=None):# 条形码或二维码
# _type 为码类型,有:code128、datamatrix,....
if options is None:
options={"includetext":True} # 默认显示内容
image = treepoem.generate_barcode(barcode_type=_type,data=data,options=options)
image.convert('1').save(file)
安装
与 python 大多模块安装方法相同
pip install treepoem
#建议用下面的命令,安装速度很会快
pip install treepoem -i https://pypi.douban.com/simple
如果这然你认为就完事了,那只能说 ”天真了!“
还需要安装 相关的模块 ghostscript
pip install ghostscript -i https://pypi.douban.com/simple
完了?还早着呢,可以试着运行下,会提示 ghostscript 模块没安装!!????
……
还需要安装 软件版的ghostscript —— GS,下载址:
https://www.ghostscript.com/releases/gsdnld.html
不急,还有很重要的一点,检查系统环境变量中,在 PATH 变量是否存在 C:\Program Files\gs\gs10.02.1\bin 路径,没有的话还需要手动添加(不会的就自行百度一下,系统环境变量的添加/修改),改完后还需要重启电脑才能生效
这时候应该可以运行通过了!!!
但时,它又埋下了一个更大的坑!!!!(卖个关先)
使用
正如前面的代码能生成 code128 条形码,但 treepoem 支持的码类太多了,下面选些常见的码说一下。
二维码
qrcode:常见二维码,提供4种样式:标准、中心图标、背景、动太背景(前二个支持中文)
datamatrix:不支持中文字符
code16k:不支持中文字符
code49:不支持中文字符
azteccode:不支持中文字符
codeone:不支持中文字符
dotcode:不支持中文字符
maxicode:不支持中文字符
microqrcode:不支持中文字符
aztecrune:只能为 0~255之间的数值(包含0和255)
条形码
code128:不支持中文字符
code93ext:不支持中文字符
code11:只能为纯数字
code32:必须为 8~9 位的数字,9位时最后一个为校验数
code39:只能为 数字、大写字母、空格或“-.
/
+
c
o
d
e
93
:只能为数字、大写字母、空格或“
−
.
/+% code93:只能为 数字、大写字母、空格或“-.
/+code93:只能为数字、大写字母、空格或“−./+%
code93ext:只能为 ASCII码表中前128个字符
code39ext:不支持中文字符
pdf417:不支持中文字符
upca:必须为 11~12 位的数字,12位时最后一个为校验数
upce:必须为 7~8 位的数字,8位时最后一个为校验数
ean5:必须为 5 位的纯数字
ean8:必须为 7~8 位的数字,8位时最后一个为校验数
ean13:必须为 12~13 位的数字,13位时最后一个为校验数
pharmacode:必须为 6 位的纯数字
planet:必须为 11或14 位的数字
itf14:必须为 13~14 位的数字,14位时最后一个为校验数
auspost:必须为 10 位的纯数字
royalmail:只能为 数字或大写字母
kix:只能为 数字或大写字母
import treepoem
def generate_barcode(data,file,_type='code128',options=None):# 条形码或二维码
# _type 为码类型,有:code128、datamatrix,....
if options is None:
options={"includetext":True} # 默认显示内容
image = treepoem.generate_barcode(barcode_type=_type,data=data,options=options)
image.convert('1').save(file)
这是最简单的应用,_type 可以换成上述的码类,数据 data 也要按上面的要求来,否则将出错!
其中 options 也是很重要的参数,为字典数据,我把常用的 key 说明一下
- includetext : True 或 False 是否在条形码下方显示数据
- barcolor : ‘000000’ 码图案颜色,注意与 tkinter 表示颜色的不一样,前面不能加 ‘#’
- backgroundcolor : 背景颜色
- textcolor : 文本数据颜色
image.convert(‘1’).save(file) 表示将二维码保存为黑白图片,如果要改变二维码的颜色,需要将代码改为:
image.convert('RGB').save(file)RGB
如果你的代码不需要打包成 exe ,那后面的坑就直接无视了
封装打包
pyinstaller 命令就不细说了,好容易打包好后你就掉坑里了,试运行时会出现出错提示:
FileNotFoundError: [Errno 2] No such file or directory: C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\treepoem\\postscriptbarcode\\barcode.ps
也就是说,treepoem 模块相关的文件没有封装到 exe 中,我经过多次掉坑和埋坑才找到解决方法,大家直接回埋就好了!!
打开目录:
C:\Users\Administrator\AppData\Local\Programs\Python\Python3xx\Lib\site-packages\PyInstaller\hooks
自己写个 hook 文件,然后放进去,文件名:hook-treepoem.py
文件内容:
from PyInstaller.utils.hooks import collect_data_files
datas = collect_data_files("treepoem")
恭喜你终于埋完 treepoem 全部的坑,重新打包后就可以正常使用了!