python3转换ITF25(交叉25)条形码

继上篇的python3转换code128条形码之后,发现,由于code128密度太高,依然无法清晰打印。迫于无奈,只能选择这个密度低的条形码,就是:交叉25码(Interleaved 2of5)。这字库不好找啊。推荐:地址1 地址2 地址3而且这个ITF25的转换规则也很变态,看了几篇文章后才领悟,参考:文章1 文章2关键点是:要用括号包裹,用于标识开始和结束每2个数字分割一次,独立转换为Unicode文字 def conver_itf25(self, inputData): start_index = 0 datalist = [] if len(inputData) % 2 is not 0: start_index = 1 datalist.append(inputData[0]) datalist += re.findall(r’\d{2}’, inputData[start_index:]) result = ’’ for i, numStr in enumerate(datalist): intStr = int(numStr) if intStr <= 49: result += chr(intStr + 48) else: result += chr(intStr + 142) return ‘(’ + result + ‘)‘有需要的拿走,点个赞,谢了!

April 18, 2019 · 1 min · jiezi

python3转换code128条形码

干货不敢私藏,赶紧分享给大家。这年头如果用python3做条形码的,肯定(推荐)用pystrich。这货官方文档貌似都没写到支持Code128,但是居然有这个类(Code128Encoder)。。。。一些喷墨打印机,如果质量差一点的话,喷出来的条码,会沾到一起,不好识别。而用pystrich的话,会发觉宽度无法调节。于是想到了用条形码字体来自己控制大小,找是找到字库了,但是你会发觉,你生成的东西,无法被扫描识别,那是因为,这东西得转换后,才能打印啊。。。经过千辛万苦,终于找到一篇文章说到转换的,地址在这里我用的是Code128B,用python重写如下。 def conver_code128b(self, inputData): checksum = 104 for ii, char in enumerate(inputData): asciiStr = ord(char) if asciiStr >= 32: checksum += (asciiStr - 32) * (ii + 1) else: checksum += (asciiStr + 64) * (ii + 1) checksum = checksum % 103 if checksum < 95: checksum += 32 else: checksum += 100 result = chr(204) + str(inputData) + chr(checksum) + chr(206) return result有需要的拿走,点个赞,谢了!

April 17, 2019 · 1 min · jiezi