客户需要生成一批条码,询问其条码格式的时候,客户不仅告知是code128格式,还很贴心的发过来一个网站,直接在网站上填入数据,点击生成就可以生成一个条形码。然而这一批产品总计有100多台,而站点一次只能生成一个条码,挨个生成后改名(为了后续方便导入coreldraw)并保存,这个工作量有点繁重。
尝试了利用jquery挨个修改数据,将图片保存到本地的时候又犯了难,保存文件的时候不知道如何跳过下载窗口。虽然免去了修改的步骤,连按100多次下载保存,连带还要修改文件名,这显然不是一个靠谱的方式。
折腾了大半天,突然想起来python这个万能的工具,都说“人生苦短,我用python”,没准python直接就有现成的库呢,没法从站点批量下载到本地,我直接本地生成总可以了吧。
python的安装
python的编程用的不多,单位甚至没有安装,好在python的站点访问速度一直很不错,重新下载一个也耗费不了太多时间。博主用的python2.7.18版本,安装基本无脑点“next”,只是选择组件的时候记得要把环境变量给勾选上,方便后续利用pip命令安装一些库,比如本文中需要利用到的pybarcode。
pybarcode的安装
pybarcode是一个python的条形码生成工具库,这个库默认并不包含在python安装包之中,需要自行下载。python的好用就是依赖其千奇百怪的库,但是难用也难用在这里,什么功能需要用到什么库博主基本只能依赖百度查询。打开windows的命令行窗口,直接输入以下命令,如果命令无法正确执行,大概率是因为安装时没有勾选将python的几个关键path添加进环境变量:
pip install pybarcode
python的程序
python的语法早就还给了百度,一边百度一边修改,最终完成了以下程序,在博客里做个记录,方便复用与查询,python的语法很有意思,判断与循环的结果利用了缩进,取消了传统的大括号。关于python,网上有很多的教程,总体上感觉用的人太多,包含的库太多,百度能搜索到的内容不成体系,往往需要翻阅多篇文章,才能尝试出一个正确的结果。
import barcode
code=barcode.get_barcode_class("code128")
min="test-001-00"
mid="test-001-0"
max="test-001-"
for i in range(1,150):
if i<10:
bar=code(min+str(i))
elif i<100:
bar=code(mid+str(i))
else:
bar=code(max+str(i))
bar.save(str(i),{'text_distance':4})
设置参数
save函数有两个参数:save(filename,options=None),filename参数为保存文件名,不需要加扩展名,将根据设置自动添加扩展名,由函数返回文件全名。当前面构造函数使用默认writer时,保存为SVG文件,扩展名为.svg。options参数默认值为None,此时使用默认参数。如果需要修改设置,使用字典传入参数,例如:save("d:\barcode",{'text':
'ABCD','format':'JPEG'})。可用参数如下:
- 'module_width':默认值0.2,每个条码宽度,单位为毫米;
- 'module_height':默认值15.0,条码高度,单位为毫米;
- 'quiet_zone':默认值6.5,两端空白宽度,单位为毫米;
- 'font_size':默认值10,文本字体大小,单位为磅;
- 'text_distance':默认值5.0,文本和条码之间的距离,单位为毫米;
- 'background':默认值'white',背景色;
- 'foreground':默认值'black',前景色;
- 'text':默认值'',显示文本,默认显示编码,也可以自行设定;
- 'write_text':默认值True,是否显示文本,如果为True自动生成text的值,如果为False则不生成(如果此时手工设置了text的值,仍然会显示文本);
- 'center_text':默认值True,是否居中显示文本;
- 'format':默认值'PNG',保存文件格式,默认为PNG,也可以设为JPEG、BMP等,只在使用ImageWriter时有效;
- 'dpi':默认值300,图片分辨率,,只在使用ImageWriter时有效。
后续打印
博主的条码需要导入coreldraw中排版打印,事实上coreldraw也自带条码工具,但不知道什么原因,博主的条码工具生成的条码经常无法正确被扫描。倒是python生成的条码,博主拿来与客户提供站点的图片对比了一下,图形基本一致,扫码结果也是相同的。
条码数据的校验
记得早先,微信与支付宝都可以方便的扫描条码并显示数据,后面微信扫描后不再显示条码信息,仅显示关联的结果。支付宝倒是一如既往,显示关联信息之余也会显示条码自身的内容。