python3 reportlab代码39添加额外的字符

 手机用户2602932565 发布于 2023-01-18 10:18

我正在尝试使用python3和reportlab生成两列条形码:

from reportlab.graphics.barcode import code39
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.pdfgen import canvas

c = canvas.Canvas("barcode_example.pdf", pagesize=A4)

code_list = [
    'E100', 'RA100', 
    'E101', 'RA101', 
    'E102', 'RA102', 
    'E103', 'RA103', 
    'E104', 'RA104',
    'E105', 'RA105', 
    'E106', 'RA106', 
    'E107', 'RA107', 
    'E108', 'RA108', 
    'E109', 'RA109']
x = 1 * mm
y = 278 * mm
x1 = 6.4 * mm

for i, code in enumerate(code_list):
    barcode = code39.Extended39(code, barWidth=0.6*mm, barHeight=15*mm)

    if i % 2 == 0:
        barcode.drawOn(c, x, y)
        x1 = x + 6.4 * mm
        c.drawString(x1, y- 5 * mm, code)
    else:
        x1 = x + 100 * mm
        barcode.drawOn(c, x1, y)
        y = y - 5 * mm
        c.drawString(x1 + 6.4 * mm, y, code)
        y = y - 25 * mm


#    if int(y) == 0:
#        x = x + 50 * mm
#        y = 285 * mm

c.showPage()
c.save()

它会生成一个文件,看起来还不错,但是在使用条形码扫描仪对其进行扫描后,它们的内容如下:

E100F   RA100 
E101G   RA101$
E102H   RA102/
E103I   RA103+
E104J   RA104%
E105K   RA1050
E106L   RA1061
E107M   RA1072
E108N   RA1083
E109O   RA1094

RA100后有一个空格。显然是按照ASCII优先顺序进行的,我只是不知道为什么。我是否有要启用/禁用的设置?

另外,它绝对不是条形码扫描仪,我将其重置为读取代码39,并在其他非reportlab生成的条形码上进行了测试,它们工作得很好。

谢谢您的帮助!

另外,我从这里修改了代码:https : //stackoverflow.com/questions/2179269/python-barcode-generation-library

编辑 当我用code128测试时,它可以完美工作。因此,它似乎特定于代码39

编辑2:我是个白痴。我的条形码扫描仪不支持校验和选项。在reportlab中禁用校验和解决了我的问题。我要离开这个,以防其他人遇到这个问题。

通过以下方式禁用校验和:

barcode = code39.Extended39(code, barWidth=0.6*mm, barHeight=15*mm, checksum=0)

checksum = False可能会很好,但是在查看了它们的来源后,他们使用1和0表示是/否,并认为遵守他们的做法会更安全。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有