前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python生成条形码

python生成条形码

作者头像
py3study
发布2020-01-10 11:33:44
4K0
发布2020-01-10 11:33:44
举报
文章被收录于专栏:python3python3

python生成条形码有很多第三方库,我大致尝试了几个常用的库,简单谈一下感受。 先说结果,如果你是用python3.x,建议使用pyStrich。

pyBarcode

能找到较多资料,使用也较简单 直接pip安装 pip install pyBarcode 这里以EAN13码举例

代码语言:javascript
复制
from barcode.writer import ImageWriter
from barcode.ean import EuropeanArticleNumber13
import barcode

生成EAN13条形码,保存到图片中,不写后缀默认是png格式,ImageWriter初始化方法中默认self.format = ‘PNG’

代码语言:javascript
复制
ean = EuropeanArticleNumber13("690123456789", writer=ImageWriter())
ean.save("image")
代码语言:javascript
复制
EAN = barcode.get_barcode_class("ean13")
ean = EAN("690123456789", writer=ImageWriter())
ean.save("image")

以上两种方法是等效的,效果如下图

pyBarcode
pyBarcode

但是pyBarcode的缺点也显而易见,就是没有画出EAN13的起始符和终止符

ReportLab

pip安装 pip install reportlab 对pdf操作方便,将条形码输出到pdf中,直接上代码

代码语言:javascript
复制
#引入所需要的基本包
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
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

代码语言:javascript
复制
from pystrich.ean13 import EAN13Encoder
encoder = EAN13Encoder("690123456789")
encoder.save("pyStrich.png")

效果如图

pyStrich
pyStrich
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • pyBarcode
  • ReportLab
  • huBarcode
  • pyStrich
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档