本文目录导读:

- 为什么需要脚本生成条形码?
- 条形码的核心原理与常见规范
- 环境搭建:Python库安装与选择
- 手把手实战:生成单个商品条形码
- 进阶技巧:批量生成、自定义尺寸、添加可读文本
- 避坑指南:常见报错与合规性检查
- 高频疑问解答(Q&A)
- 扩展思考:如何将脚本接入ERP/Web系统
**
《从零到一:用Python脚本批量生成条形码的实战指南(附Code128/QR码详解)》
目录导读
- 为什么需要脚本生成条形码?
- 条形码的核心原理与常见规范(Code128/EAN-13)
- 环境搭建:Python库安装与选择(python-barcode vs reportlab)
- 手把手实战:生成单个商品条形码
- 进阶技巧:批量生成、自定义尺寸、添加可读文本
- 避坑指南:常见报错与合规性检查(GS1前缀校验)
- 高频疑问解答(Q&A)
- 扩展思考:如何将脚本接入ERP/Web系统
为什么需要脚本生成条形码?
在电商、仓储或图书管理场景中,手动为每个SKU生成条形码效率极低,传统的方式是使用在线生成器,但每张图片需手动下载、重命名,且无法统一格式,而用脚本(如Python)生成条形码,可以实现:
- 批量自动化:一次跑完数千个SKU的条形码,按商品编号命名文件。
- 格式统一:所有条形码采用相同宽度、字体、留白,符合国际标准。
- 数据联动:直接从数据库或Excel读取商品信息,避免人工录入错误。
据搜索引擎聚合的信息:目前主流的解决方案是Python的python-barcode库,它支持EAN-13、Code39、Code128等常用格式,输出为SVG或PNG,另一个reportlab库则适合将条形码嵌入PDF标签打印。
条形码的核心原理与常见规范
条形码的本质是“宽度不等的黑条与空白,通过二进制编码表示数字”,以Code128为例:
- 可编码全ASCII字符,密度高,适合物流标签。
- 自带校验位,保证扫描准确性。
- 必须遵循“静区”(左右空白区)至少为10倍窄条宽度。
EAN-13则常用于零售商品,有固定的13位数字,前12位为数据,第13位为校验位,脚本生成时,校验位会自动计算。
环境搭建:Python库安装与选择
打开终端,执行以下命令:
pip install python-barcode pillow
python-barcode:核心生成逻辑。pillow:用于将SVG转换成更通用的PNG格式,或自定义分辨率。
若需要生成二维码(QR Code),则安装:
pip install qrcode
手把手实战:生成单个商品条形码
目标:为商品ID “690123456789” 生成Code128格式的PNG图片,尺寸为300×100像素。
import barcode
from barcode.writer import ImageWriter
from PIL import Image
# 选择编码格式
code = barcode.get('code128', '690123456789', writer=ImageWriter())
# 生成并保存(默认文件名含校验码)
filename = code.save('my_barcode')
print(f"生成成功: {filename}.png")
# 如果需要透明背景或修改线条颜色,可传参给ImageWriter
code = barcode.get('code128', '690123456789',
writer=ImageWriter())
options = {
'module_width': 0.2, # 单个模块宽度(mm)
'module_height': 15.0, # 条形码高度(mm)
'font_size': 10, # 下方文字大小
'text_distance': 5, # 文字与条码间距
'background': 'white', # 背景色
'foreground': 'black' # 条码颜色
}
code.save('custom_barcode', options=options)
注意:生成的图片会自动在下方附上可读的数字文本。
进阶技巧:批量生成、自定义尺寸、添加可读文本
场景:从CSV读取100个商品编号,批量生成并将图片重命名为“商品编号.png”
import csv
import barcode
from barcode.writer import ImageWriter
from pathlib import Path
output_dir = Path("./barcodes")
output_dir.mkdir(exist_ok=True)
with open('products.csv', newline='', encoding='utf-8') as f:
reader = csv.reader(f)
next(reader) # 跳过表头
for row in reader:
sku = row[0] # 假设第一列是SKU编号
product_name = row[1] # 用于日志输出
try:
# 生成Code128(兼容字母数字)
code = barcode.get('code128', sku, writer=ImageWriter())
code.save(output_dir / f"{sku}",
options={"module_height": 12})
print(f"✅ {product_name} - {sku} 已生成")
except Exception as e:
print(f"❌ {sku} 失败: {e}")
自定义尺寸(导出为矢量图SVG)
# 生成SVG矢量图,即可无限缩放不失真
code = barcode.get('code128', '123456', writer=SVGWriter())
code.save('vector_code') # 输出 vector_code.svg
避坑指南:常见报错与合规性检查
-
报错1:
TypeError: __init__() got an unexpected keyword argument 'writer'
原因:习惯性用了旧版API,解决:barcode.get('code128', data, writer=ImageWriter())。 -
报错2:校验码错误
python-barcode会自动校验,无需手工计算,但如果你试图生成不符合GS1规范的数字(如长度不对),它会抛出InvalidBarcode错误。 -
合规性关键点:
- 确保条码宽度不超过50mm(印刷要求)。
- 条码颜色不得接近红色或金色(易反光,扫描器误读)。
- 静区(左右空白)不得少于5mm。
高频疑问解答(Q&A)
问:脚本生成的条形码和印刷版一样清晰吗?
答:PNG的清晰度取决于dpi参数,建议设置dpi=300(打印标准),默认SVG是矢量,直接用于印刷最佳。
问:能否生成UPC-A格式?
答:可以,替换barcode.get('upca', '01234567890')即可,但仅限12位数字。
问:如果商品编号包含字母,应该用哪种格式?
答:用Code128或Code39,EAN不支持字母。
问:扫码枪扫不出生成的PNG图?
答:检查图片是否经过放大拉伸,导致条宽变形,需保持原始比例输出,或用SVG。
扩展思考:如何将脚本接入ERP/Web系统
- Web API化:将上述脚本封装成Flask接口,前端POST数据,返回生成的PNG流。
- 定时任务:每晚自动读取数据库新商品,生成标签发送到共享网盘。
- 与打印服务集成:直接生成PDF(用reportlab),实现“一键打印整箱条码”。
脚本生成条形码的核心价值在于可靠性与可追溯性,通过本文的指引,你已能独立实现批量生产,如果搭配GS1规范的自检逻辑,即可用于真实商业环境,希望这套方法论能极大提升你的库存管理效率。