python生成条形码

发布时间:2019-08-17 08:50:46编辑:auto阅读(4046)

    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代替
    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")

    效果如图
    pyStrich

关键字