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

發佈了56 篇原創文章 · 獲贊 118 · 訪問量 22萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章