Código de Barras em Python
Estou trabalhando na geração de boletos bancários utilizando PIL e ReportLab, fiz uma pesquisada por ai e não havia um código de barras utilizando o padrão que precisava que era o padrão 2 de 5 intercalado. Por isso estou postando o código aqui! :)
Para executar é necessário do modulo PIL instalado!
import Image
import ImageDraw
class CodeBarPil:
"""
Classe base para implementação do código de barras
"""
def __init__(self):
pass
def drawCodeBarInterleaved2of5(self, value, posX=0, posY=0, height = 50):
"""
Desenha codigo de barras padrão intercalado 2 de 5
"""
im = Image.new('RGB',(750,80),'white')
draw = ImageDraw.Draw(im)
pattern = ('00110', '10001', '01001', '11000', '00101',
'10100', '01100', '00011', '10010', '01010')
# value deve possuir comprimento par, acrescenta 'zero' caso impar
if (len(value) % 2) != 0:
value= '0' + value
# faz intercalação dos pares
l=''
for i in range(0,len(value),2):
p1=pattern[int(value[i])]
p2=pattern[int(value[i+1])]
for p in range(0,5):
l+=p1[:1] + p2[:1]
p1=p1[1:]
p2=p2[1:]
# gera espacos e barras
barra=True
b=''
for i in range(0,len(l)):
if l[i] == '0':
if barra:
b+='B'
barra=False
else:
b+='E'
barra=True
else:
if barra:
b+='BBB'
barra=False
else:
b+='EEE'
barra=True
# concatena inicio e fim
b='BEBE' + b + 'BBBEB'
for i in range(0,len(b)):
if b[i] == 'B':
draw.line((posX,posY,posX,posY + height),'black')
else:
draw.line((posX,posY,posX,posY + height),'white')
posX+=1
return imagem
0 comentários:
Postar um comentário