python生成条形码

2023-01-31 02:01:30 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

但是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比例有点失调
ReportLab

huBarcode

不支持python3.x,13年已停止开发,由pyStrich代替
GitHubhttps://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")

效果如图
pyStrich

相关文章