Gerando um código de barras postal(EUA)

From Scribus Wiki
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Este artigo é parte da seção de Scripts_e_Plugins.
Scripts para iniciantes Scripts de extensão/PyQt Questões sobre Py Plugins Outros
Voltar para a página principal

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)