python生成条形码
python生成条形码有很多第三方库,我大致尝试了几个常用的库,简单谈一下感受。
先说结果,如果你是用python3.x,建议使用pyStrich。
pyBarcode
能找到较多资料,使用也较简单
直接pip安装 pip install pyBarcode
这里以EAN13码举例
from barcode.writer import ImageWriter
from barcode.ean import EuropeanArticleNumber13
import barcode
生成EAN13条形码,保存到图片中,不写后缀默认是png格式,ImageWriter初始化方法中默认self.fORMat = ‘PNG’
ean = EuropeanArticleNumber13("690123456789", writer=ImageWriter())
ean.save("image")
EAN = barcode.get_barcode_class("ean13")
ean = EAN("690123456789", writer=ImageWriter())
ean.save("image")
以上两种方法是等效的,效果如下图
但是pyBarcode的缺点也显而易见,就是没有画出EAN13的起始符和终止符
ReportLab
pip安装 pip install reportlab
对pdf操作方便,将条形码输出到pdf中,直接上代码
#引入所需要的基本包
from reportlab.pdfgen import canvas
from reportlab.graphics.barcode import code39, code128, code93
from reportlab.graphics.barcode import eanbc, qr, usps
from reportlab.graphics.shapes import Drawing
from reportlab.lib.units import mm
from reportlab.graphics import renderPDF
def createBarCodes(c):
barcode_value = "1234567890"
barcode39 = code39.Extended39(barcode_value)
barcode39Std = code39.Standard39(barcode_value, barHeight=20, stop=1)
# code93 also has an Extended and MultiWidth version
barcode93 = code93.Standard93(barcode_value)
barcode128 = code128.Code128(barcode_value)
# the multiwidth barcode appears to be broken
#barcode128Multi = code128.MultiWidthBarcode(barcode_value)
barcode_usps = usps.POSTNET("50158-9999")
codes = [barcode39, barcode39Std, barcode93, barcode128, barcode_usps]
x = 1 * mm
y = 285 * mm
for code in codes:
code.drawOn(c, x, y)
y = y - 15 * mm
# draw the eanbc8 code
barcode_eanbc8 = eanbc.Ean8BarcodeWidget(barcode_value)
d = Drawing(50, 10)
d.add(barcode_eanbc8)
renderPDF.draw(d, c, 15, 555)
# draw the eanbc13 code
barcode_eanbc13 = eanbc.Ean13BarcodeWidget(barcode_value)
d = Drawing(50, 10)
d.add(barcode_eanbc13)
renderPDF.draw(d, c, 15, 465)
# draw a QR code
qr_code = qr.QrCodeWidget('Http://blog.csdn.net/WEBzhuce')
bounds = qr_code.getBounds()
width = bounds[2] - bounds[0]
height = bounds[3] - bounds[1]
d = Drawing(45, 45, transform=[45./width,0,0,45./height,0,0])
d.add(qr_code)
renderPDF.draw(d, c, 15, 405)
#定义要生成的pdf的名称
c=canvas.Canvas("reportlab.pdf")
#调用函数生成条形码和二维码,并将canvas对象作为参数传递
createBarCodes(c)
#showPage函数:保存当前页的canvas
c.showPage()
#save函数:保存文件并关闭canvas
c.save()
效果如下图,EAN8和EAN13比例有点失调
huBarcode
不支持python3.x,13年已停止开发,由pyStrich代替
GitHub:https://github.com/hudora/huBarcode
Python setup.py install
pyStrich
GitHub:https://github.com/mmulqueen/pyStrich
可以直接pip安装 pip install pyStrich
from pystrich.ean13 import EAN13Encoder
encoder = EAN13Encoder("690123456789")
encoder.save("pyStrich.png")
效果如图
相关文章