我正在尝试使用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表示是/否,并认为遵守他们的做法会更安全。