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")
效果如圖