Gerando um código de barras postal(EUA): Difference between revisions
No edit summary |
|||
(3 intermediate revisions by 2 users not shown) | |||
Line 21: | Line 21: | ||
S = scribus.valueDialog('Postnet Barcode','Enter your Zip or Zip+4') | S = scribus.valueDialog('Postnet Barcode','Enter your Zip or Zip+4') | ||
</pre> | </pre> | ||
A última atualização adicionou o "caractere de correção" de acordo com as normas da USPS. | |||
<pre> | <pre> | ||
#!/usr/bin/env python | #!/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 | import scribus | ||
postcode = ['llsss','sssll','sslsl','sslls','slssl','slsls','sllss','lsssl','lssls','lslss'] | postcode = ['llsss','sssll','sslsl','sslls','slssl','slsls','sllss','lsssl','lssls','lslss'] | ||
a = 1.44 # | a = 1.44 #line width | ||
b="Black" # | b="Black" #line color | ||
relx= | relx=47 #Start X | ||
rely= | rely=323 #Start Y | ||
correctnum = 0 | |||
if scribus.haveDoc(): | if scribus.haveDoc(): | ||
S = scribus.valueDialog(' | S = scribus.valueDialog('Postnet Barcode','Enter your Zip or Zip+4') | ||
scribus.setRedraw(1) | scribus.setRedraw(1) | ||
scribus.setUnit(0) | scribus.setUnit(0) | ||
Line 47: | Line 53: | ||
if x.isdigit(): | if x.isdigit(): | ||
xnum = int(x) | xnum = int(x) | ||
correctnum += xnum # Fazendo a soma de todos os dígitos | |||
code = postcode[xnum] | code = postcode[xnum] | ||
for y in code[0:]: | for y in code[0:]: | ||
if y == 'l': | if y == 'l': | ||
d = scribus.createLine(relx,rely,relx+9,rely,) # | d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa | ||
scribus.setLineWidth(a, d) | scribus.setLineWidth(a, d) | ||
scribus.setLineColor(b, d) | scribus.setLineColor(b, d) | ||
Line 56: | Line 63: | ||
rely = rely + 3.4 | rely = rely + 3.4 | ||
elif y == 's': | elif y == 's': | ||
d = scribus.createLine(relx,rely,relx+3.6,rely,) # | d = scribus.createLine(relx,rely,relx+3.6,rely,) #linha curta | ||
scribus.setLineWidth(a, d) | scribus.setLineWidth(a, d) | ||
scribus.setLineColor(b, d) | scribus.setLineColor(b, d) | ||
scribus.setFillColor(b, d) | scribus.setFillColor(b, d) | ||
rely = rely + 3.4 | 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 | d = scribus.createLine(relx,rely,relx+9,rely,) #linha longa - Terminando linha circundante | ||
scribus.setLineWidth(a, d) | scribus.setLineWidth(a, d) | ||
Line 100: | Line 126: | ||
relx=130 #Início do X | relx=130 #Início do X | ||
rely=130 #Início do Y | rely=130 #Início do Y | ||
correctnum = 0 | |||
if scribus.haveDoc(): | if scribus.haveDoc(): | ||
scribus.setRedraw(1) | scribus.setRedraw(1) | ||
Line 111: | Line 138: | ||
if x.isdigit(): | if x.isdigit(): | ||
xnum = int(x) | xnum = int(x) | ||
correctnum += xnum # Fazendo a soma de todos os dígitos | |||
code = postcode[xnum] | code = postcode[xnum] | ||
for y in code[0:]: | for y in code[0:]: | ||
Line 125: | Line 153: | ||
scribus.setFillColor(b, d) | scribus.setFillColor(b, d) | ||
rely = rely + 3.4 | 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 | d = scribus.createLine(relx,rely,relx+9,rely,) #Linha longa | ||
scribus.setLineWidth(a, d) | scribus.setLineWidth(a, d) |
Latest revision as of 23:46, 11 March 2006
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)