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)