Package mcbase :: Package libs :: Package barcodegenerator :: Module code39
[hide private]
[frames] | no frames]

Source Code for Module mcbase.libs.barcodegenerator.code39

  1  # -*- coding: utf-8 -*- 
  2   
  3  ############################################################################ 
  4  # code39.py 
  5  # 
  6  # Code39 barkod üretme araçları 
  7  # 
  8  # (C) 2008 Likya Yazılım ve Bilişim Hizmetleri Ltd. 
  9  ############################################################################ 
 10   
 11  from barcodegenerator import BarcodeGenerator 
 12   
13 -class Code39(BarcodeGenerator):
14
15 - def __init__(self, code):
16 ''' 17 Code39 için temel tanımlarını yapar. Bu sınıfta kullanılan Code39 üreticisi, checksum kullanmayan Code39 18 için barkod üretmektedir. 19 ''' 20 BarcodeGenerator.__init__(self) 21 22 # Gelen kodu büyük harfe çeviriyoruz. 23 code = code.upper() 24 25 # Code39'da kullanılabilecek karakterler. 26 self._charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%" 27 28 self._charEncoding = { 29 '*': 'bWbwBwBwb', '-': 'bWbwbwBwB', '$': 'bWbWbWbwb', '%': 'bwbWbWbWb', ' ': 'bWBwbwBwb', 30 '.': 'BWbwbwBwb', '/': 'bWbWbwbWb', '+': 'bWbwbWbWb', '0': 'bwbWBwBwb', '1': 'BwbWbwbwB', 31 '2': 'bwBWbwbwB', '3': 'BwBWbwbwb', '4': 'bwbWBwbwB', '5': 'BwbWBwbwb', '6': 'bwBWBwbwb', 32 '7': 'bwbWbwBwB', '8': 'BwbWbwBwb', '9': 'bwBWbwBwb', 'A': 'BwbwbWbwB', 'B': 'bwBwbWbwB', 33 'C': 'BwBwbWbwb', 'D': 'bwbwBWbwB', 'E': 'BwbwBWbwb', 'F': 'bwBwBWbwb', 'G': 'bwbwbWBwB', 34 'H': 'BwbwbWBwb', 'I': 'bwBwbWBwb', 'J': 'bwbwBWBwb', 'K': 'BwbwbwbWB', 'L': 'bwBwbwbWB', 35 'M': 'BwBwbwbWb', 'N': 'bwbwBwbWB', 'O': 'BwbwBwbWb', 'P': 'bwBwBwbWb', 'Q': 'bwbwbwBWB', 36 'R': 'BwbwbwBWb', 'S': 'bwBwbwBWb', 'T': 'bwbwBwBWb', 'U': 'BWbwbwbwB', 'V': 'bWBwbwbwB', 37 'W': 'BWBwbwbwb', 'X': 'bWbwBwbwB', 'Y': 'BWbwBwbwb', 'Z': 'bWBwBwbwb', 38 } 39 40 # Geniş formatların kaç bit olacağını belirtiyoruz. 41 self._wideRatio = 2 42 43 # Verilen kodun hatalı olup olmadığına bakıyoruz. 44 for c in code: 45 if c not in self._charSet: 46 raise Exception('Hatali barkod kodu') 47 48 # Kodun başına ve sonuna '*' karakteri ekliyoruz. 49 self._code = code 50 self._bits = None
51
52 - def makeBits(self):
53 ''' 54 Barkodun ikili kodlamasını yapar. 55 w -> dar beyaz 56 b -> dar siyah 57 W -> geniş beyaz 58 B -> geniş siyah 59 ''' 60 if self._bits is not None: 61 return self._bits 62 63 # Kod içindeki karakterleri map ediyoruz. 64 format = map(lambda x: self._charEncoding[x], self._code) 65 66 # Her karakter arasına ince bir boşluk ekliyoruz. 67 format = "w".join(format) 68 69 formatToBit = { 70 'w': '0', 71 'b': '1', 72 'W': '0' * self._wideRatio, 73 'B': '1' * self._wideRatio, 74 } 75 76 self._bits = "".join(map(lambda x: formatToBit[x], format)) 77 78 # '*' karakterinin bit kodunu hazırlıyoruz. 79 asteriskFormat = self._charEncoding['*'] 80 asteriskBits = ''.join(map(lambda x: formatToBit[x], asteriskFormat)) 81 82 # Kısa çizgileri uzunları ile değiştiriyoruz. 83 asteriskBits = asteriskBits.replace('1', 'L') 84 85 # Asıl kodun başına ve sonuna '*' ekliyoruz. 86 self._bits = asteriskBits + '0' + self._bits + '0' + asteriskBits 87 88 return self._bits
89
90 - def digitLocations(self):
91 ''' 92 Yazılacak rakamların bit olarak yerlerini gösterir. 93 ''' 94 start = (len(self._bits) - (7 * len(self._code))) / 2 95 96 locations = range(start, start + (7 * len(self._code)), 7) 97 98 return locations
99
100 - def leftMargin(self):
101 return 1
102
103 - def rightMargin(self):
104 return 1
105