Gerando um código de barras postal(EUA)
Scripts para iniciantes • Scripts de extensão/PyQt • Questões sobre Py • Plugins • Outros |
Versão em inglês.
Básico
Esse script vai gerar um código de barra postal para o código postal que você fornecer (Serviço de Postágem dos Estados Unidos - USPS). Ele usa o Tkinter para o requisitar um valor. Você pode fornecer números e incluir hifens se desejar, já que qualquer caractere não numérico será ignorado.
O código de barra é um conjunto de linhas criadas de acordo com as especificações do USPS. Esse script criará o código na vertical, ou seja, deixando as linhas na horizontal, dispostas logo no início da página, na posição X = 130 e Y = 130 (em pontos) -- veja as linhas com os comentários Início do X e Início do Y.
Para realocar a posição do código de barras, transforme o código em um grupo, assim você poderá move-lo para qualquer lugar que desejar (você pode usar a janela de propriedades também).
postnet2.py (nova versão)
A nova versão do script utiliza a chamada 'valueDialog()' em vez do Tkinter (e toda sua complexidade).
Se você comparar os dois scripts, verá que esse é muito mais simples. Essa única linha substitui todo o código Tkinter:
S = scribus.valueDialog('Postnet Barcode','Enter your Zip or Zip+4')
A última atualização adicionou o "caractere de correção" de acordo com as normas da USPS.
#!/usr/bin/env python # Arquivo: postnet2.py # Criado originalmente 2006.03.06 - Gregory Pittman # Atualização 2006.03.07 # Adiciona o código de erro: # A soma de todos os dígitos # devem ser divisíveis por 10. import scribus postcode = ['llsss','sssll','sslsl','sslls','slssl','slsls','sllss','lsssl','lssls','lslss'] a = 1.44 #line width b="Black" #line color relx=47 #Start X rely=323 #Start Y correctnum = 0 if scribus.haveDoc(): S = scribus.valueDialog('Postnet Barcode','Enter your Zip or Zip+4') scribus.setRedraw(1) scribus.setUnit(0) d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa - Começando linha circundante scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 for x in S[0:]: if x.isdigit(): xnum = int(x) correctnum += xnum # Fazendo a soma de todos os dígitos code = postcode[xnum] for y in code[0:]: if y == 'l': d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 elif y == 's': d = scribus.createLine(relx,rely,relx+3.6,rely,) #linha curta scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 correctstr = str(correctnum) # Inicio do código de erro correctdig = int(correctstr[-1]) if correctdig != 0: correctdig = 10 - correctdig code = postcode[correctdig] for y in code[0:]: if y == 'l': d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 elif y == 's': d = scribus.createLine(relx,rely,relx+3.6,rely,) #linha curta scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa - Terminando linha circundante scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) scribus.redrawAll()
postnet.py (versão original)
#!/usr/bin/env python # Arquivo: postnet.py # criado originalmente 2006.02.26 - Gregory Pittman import scribus import Tkinter class ImageDialog(Tkinter.Toplevel): def __init__(self, parent): Tkinter.Toplevel.__init__(self, parent, bg="#bbbbff") Tkinter.Label(self, text='Forneça o Código Postal e clique no OK',bg="#bbbbff").grid(row=0,columnspan=6) self.e = Tkinter.Entry(self) self.e.grid(row=1,columnspan=6) b = Tkinter.Button(self, text='OK', bg="#55ff88", command=self.ok) b.grid(row=2,columnspan=6) self.protocol("WM_DELETE_WINDOW", self.quit) def ok(self): S = self.e.get() m = Tkinter.Message(root, text=self.e.get()+'\nClose this\n window') m.grid(row=0, columnspan=4) postcode = ['llsss','sssll','sslsl','sslls','slssl','slsls','sllss','lsssl','lssls','lslss'] a = 1.44 #largura da linha b="Black" #cor da linha relx=130 #Início do X rely=130 #Início do Y correctnum = 0 if scribus.haveDoc(): scribus.setRedraw(1) scribus.setUnit(0) d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 for x in S[0:]: if x.isdigit(): xnum = int(x) correctnum += xnum # Fazendo a soma de todos os dígitos code = postcode[xnum] for y in code[0:]: if y == 'l': d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 elif y == 's': d = scribus.createLine(relx,rely,relx+3.6,rely,) #Linha curta scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 correctstr = str(correctnum) # Início do código de erro correctdig = int(correctstr[-1]) if correctdig != 0: correctdig = 10 - correctdig code = postcode[correctdig] for y in code[0:]: if y == 'l': d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 elif y == 's': d = scribus.createLine(relx,rely,relx+3.6,rely,) #Linha curta scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) rely = rely + 3.4 d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa scribus.setLineWidth(a, d) scribus.setLineColor(b, d) scribus.setFillColor(b, d) redrawAll() self.Tkinter.Toplevel.destroy() root = Tkinter.Tk() root.update() z = ImageDialog(root) root.wait_window(z)