def generateBarCode(self): if self.sku.text is None or self.sku.text is "" and self.skulist is None: self.errorLabel = "Please enter suvs or browse a file" else: skuarr = None inputStr = self.sku.text inputlist = inputStr.split(',') if self.barCodePath is None or self.barCodePath is "": self.errorLabel = "Go to settings and specify folder location to save the codes" return try: if self.skulist is not None: skuarr = self.skulist else: inputStr = self.sku.text skuarr = inputStr.split(',') for s in skuarr: str = self.now.strftime("%Y-%m-%d") fullPath = self.barCodePath + '/' + str if not os.path.exists(fullPath): os.makedirs(fullPath) code128.image(s).save(fullPath + "/" + s + ".png") if self.skulist is not None: self.skulist = None self.errorLabel = "Done" except Exception as e: print(e) self.errorLabel = "Error in generating SKU's"
def generate_labels(prefix, start, end): for image in range(start, end + 1): code128.image(prefix.format(image), height=238, thickness=7, quiet_zone=True).save("{0}{1}{2}.png".format( prefix, path, image), compress_level=6)
def main(): """entry point for command line users""" parser = argparse.ArgumentParser() parser.add_argument("data", help="Data, that should be encoded") parser.add_argument("output", help="File to store the barcode") parser.add_argument("-H", "--height", default=100, type=int, help="height of generated picture in pixel, default: 100") parser.add_argument("-T", "--thickness", default=3, type=int, help="width of a bar with weight=1 in pixel, default: 3") parser.add_argument("-q", "--no_quiet", action="store_false", default=True, help="Do not include the quiet zone " "before and after the code in the picture") args = parser.parse_args() ftype = splitext(args.output)[1] suptypes = ".bmp .dib .gif .im .jpg .jpe .jpeg .pcx .png .pbm " \ ".pgm .ppm .tif .tiff .xbm .xpm .svg".split() if ftype == ".svg": print("Barcode '%s' created" % args.data) with open(args.output, "w") as f: f.write(code128.svg(args.data, args.height, args.thickness, args.no_quiet)) print("Barcode successfully saved as", args.output) elif ftype in suptypes: img = code128.image(args.data, args.height, args.thickness, args.no_quiet) print("Barcode '%s' created" % args.data) img.save(args.output) print("Barcode successfully saved as", args.output) else: print("Type '%s' is not supportet, use one of these: %s" % (ftype, " ".join(suptypes)) )
def generate_barcode(counter=0): """Generate the barcode, which shows a running counter and the current time. :param counter: sequence number to embed in the barcode :returns: tuple of * the incremented counter, * the data to display and * the filename of the saved barcode """ now = datetime.datetime.now() timestr = now.strftime("%H:%M:%S.%f") data_to_display = "#%05d %s" % (counter, timestr) counter += 1 # print(f"{data_to_display=}") pil_image = code128.image(data_to_display) # Resize the image to maximum 640x120 maxsize = (640, 120) pil_image.thumbnail(maxsize, PIL.Image.ANTIALIAS) filename = 'generated_barcode.jpg' pil_image.save(filename) # qt_image = ImageQt.ImageQt(pil_image) # Make it an QT image # pix = QPixmap.fromImage(qt_image) return counter, data_to_display, filename
def make_barcode_image(guid): pdf_file = tempfile.NamedTemporaryFile() pdf_file.name += '.pdf' imgTemp = BytesIO() img = code128.image('%s%s' % (PREFIX, guid)) options = { 'page-width': '120mm', 'page-height': '120mm', 'encoding': "UTF-8" } img.save(imgTemp, format='PNG') sourceHtml = """ <body style="text-align: center;"> <div> <img style="inline" src='data:image/png;base64,{0}' /> </div> </body> """.format(base64.b64encode(imgTemp.getvalue()).decode()) pdfkit.from_string(sourceHtml, 'app/testpdf.pdf', options=options) pdfkit.from_string(sourceHtml, pdf_file.name, options=options) _send_barcodeimage_to_printer(pdf_file)
def index(request): form = FormCodigo(request.POST) if form.is_valid(): form_data = form.cleaned_data v_descripcion = form_data.get('descripcion') v_modelo = form_data.get("modelo") v_serial = form_data.get("serial") obj = Equipos.objects.create(descripcion=v_descripcion, modelo=v_modelo, serial=v_serial) ruta = r'static/imagen_codigo/' if not os.path.exists(ruta): os.makedirs(ruta) code128.image(v_descripcion + ' ' + v_modelo + ' ' + v_serial).save(ruta + v_serial + ".png") context = { "el_form": form, } return render(request, "index.html", context)
def generateBarcodes(country, number, protocol, dryrun=False): os.mkdir('TEMP') ctry = country[0].upper() if not dryrun: usedcodes = [line.rstrip() for line in open('used_codes.txt')] combos = [] for a1 in list(string.ascii_lowercase): for a2 in list(string.ascii_lowercase): for a3 in list(string.ascii_lowercase): combos.append(a1+a2+a3) if not dryrun: cleancombos = [x for x in combos if x not in usedcodes] else: cleancombos = [x for x in combos] selectcombos = random.sample(cleancombos, int(number)) barcodes = [] if protocol=='Eplot': for i in selectcombos: for d in ['1', '2', '3', '4']: barcode = ctry + '-' + i + '-' + d barcodes.append(barcode) elif protocol=='FFS': for i in selectcombos: barcode = ctry + '-' + i barcodes.append(barcode) if not dryrun: f = open('used_codes.txt', 'a') for i in selectcombos: f.write(i + '\n') f.close() for b in barcodes: code128.image(b).save('TEMP/' + b + '.png') return barcodes
def SendEmail(request): if request.method == "GET": bar_code = request.GET.get('bar_code') code128.image(bar_code).save( os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + "/static/svg/" + bar_code + ".png") bar_code = BarCodes.objects.filter(bar_code=bar_code, code__isnull=False)[0] ctx = { 'message': 'success', 'code': bar_code.bar_code, 'server_name': settings.SERVER_NAME, 'valid_till': bar_code.valid_till, } message = render_to_string('email.html', ctx) email_message = EmailMessage("Coupon Details", message, settings.DEFAULT_FROM_EMAIL, [bar_code.code.email_address]) email_message.content_subtype = 'html' email_message.send(fail_silently=True) return HttpResponse(json.dumps({'msg': 'sucess'}), content_type="application/json")
def form_valid(self, form): self.object = form.save(commit=False) name_bar_code_extension = str(self.object.code) + ".png" img = code128.image(self.object.code) f = open(name_bar_code_extension, "wb") img.save(name_bar_code_extension) f.close() reopen = open(name_bar_code_extension, "rb") django_file = File(reopen) self.object.bar_code.save(name_bar_code_extension, django_file, save=True) reopen.close() self.object.save() os.remove(name_bar_code_extension) return super(BarCodeCreateView, self).form_valid(form)
def barcode_factory(address, nonce): return code128.image("(" + str(address) + "," + str(nonce) + ")")
def generate_code128(self, part, data): code128.image(data).save(part + self.name + ".png") # with PIL present
def cApply(): global result, T, photo result = code128.image(T.get("1.0", 'end-1c')) photo = scaleImage(result.convert("RGB")) updateDisplay()
def generate(data): """Generates barcode from parsed data.""" return code128.image(data).save("utils/temp/barcode.png")
from PIL import Image, ImageDraw, ImageFont import re with open('roll.txt', 'r') as roll: for i in roll: i = i.strip().strip('\n') '''i_lst=list(i) fstN=re.findall(r'\d',i)[0] pstn=i_lst.index(fstN) i_lst.insert(pstn,'1') i_new=''.join(i_lst) print (i_new)''' #code128.image("LX14164152").save("LX14164152.jpg") ttfont = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 20) bar = code128.image(i) org_width, org_height = bar.size print(org_width, ' ', org_height) new_im = Image.new("RGB", (org_width, org_height + 90), "white") #396,200 new_im.paste(bar, (0, 35)) #30 draw = ImageDraw.Draw(new_im) w, h = draw.textsize(i, font=ttfont) draw.text((org_width / 2 - w / 2, org_height + 50), i, fill="black", font=ttfont) #new_im.show() new_im.save('%s.jpg' % i)
# -*- coding: utf-8 -*- # @Time : 2019/7/23 16:51 # @Author : Yo # @Email : [email protected] # @File : createcode128png.py # @Software: PyCharm # @models: .. # @function: ... # @Git: https://gitee.com/m7n9/PyCharm.git # @Edit: yo import code128 with open("code.txt", 'r', encoding='utf-8') as f: y = f.read() for i in y.split("\n"): print(i) if len(i): file = "./code/{}.png".format(i) code128.image(str(i)).save(file) # with PIL present
# -*- coding: utf-8 -*- # @Time : 2019/7/23 16:46 # @Author : Yo # @Email : [email protected] # @File : code128demo.py # @Software: PyCharm # @models: .. # @function: ... # @Git: https://gitee.com/m7n9/PyCharm.git # @Edit: yo import code128 code128.image("CUKe3DGg").save("Hello World.png") # with PIL present # with open("Hello World.svg", "w") as f: f.write(code128.svg("Hello World"))
def render(self): #logging.INFO('rendering '+str(self.barcode.value)) refdict = self.dicts[self.type] self.tag = Image.new('RGB', self.imsize, color="White") self.dr = ImageDraw.Draw(self.tag) if self.barcode.value != '': bar = code128.image( self.barcode.value, thickness=round(self.res / 100 * refdict['barcode']['shape'][0]), height=round(self.res / 100 * refdict['barcode']['shape'][1])) bar = bar.convert('RGB') #convert to RGB just in case bar = bar.rotate(refdict['barcode']['rot'], expand=1) #paste barcode onto canvas barbox = [ round(dyn_look(self, "barcode.pos")[0]), round(dyn_look(self, "barcode.pos")[1]), 0, 0 ] barbox[2] = barbox[0] + bar.size[0] barbox[3] = barbox[1] + bar.size[1] self.tag.paste(bar, barbox) #go through all the ones that have font defined and make that text for attrs in refdict.T['font'].dropna().keys(): attr = getattr(self, attrs) if str(attrs) == 'combo': if 'combo' in self.spec.types: #if this barcode has C in it, then allow the combo value to be set from the window try: print(self.combo.value) except: print('no combo set') else: #not in barcode, nothing happens on tag self.combo.value = '' if str(attrs) == 'underbar': if refdict['barcode'][ 'underbar'] == True and self.barcode.value != '': #if underbar is shown for this tag style attr.pos = [ round((barbox[2] + barbox[0]) / 2), round(barbox[3] + self.res / 100 * refdict['underbar']['underdist']) ] #print('set'+str(self.underbar.pos)) else: #print('broke') break elif str( attrs ) == 'price': #puts price in right format, this is rly thrown together needs to b better (only changes if tag is actualized) try: #if it can be turned into a float make it into dollars setattr(attr, 'value', '$%.2f' % float(getattr(attr, 'value'))) except ValueError: #else it's already been done pass attag = Image.new('L', self.imsize, color="White") d = ImageDraw.Draw(attag) #print(attrs) #useful for debugging try: attsize = ImageDraw.ImageDraw.multiline_textsize( d, text=str(attr.value), font=getattr(attr, "font")) if attsize > self.imsize: #attr.value=str(attr.value.split(' ') #attsize=ImageDraw.ImageDraw.multiline_textsize(d,text=str(attr.value), ffont=getattr(attr,"font")) print('too big' + str(attsize)) variableprice = True #need to include varprice from csv if attrs == 'price' and self.price.value == "$0.00" and variableprice: attsize = ImageDraw.ImageDraw.multiline_textsize( d, text='$__.00', font=getattr(attr, "font")) aftsize = ImageDraw.ImageDraw.textsize(d, text='.00', font=getattr( attr, "font")) dolsize = ImageDraw.ImageDraw.textsize(d, text='$', font=getattr( attr, "font")) d.line((dolsize[0], attsize[1], attsize[0] - aftsize[0], attsize[1]), width=10) d.text([0, 0], text='$__.00', font=getattr(attr, "font")) else: d.multiline_text([0, 0], text=str(getattr(attr, 'value')), font=getattr(attr, "font")) attbox = [0, 0] attbox.append(attbox[0] + attsize[0]) attbox.append(attbox[1] + attsize[1]) box = [ round(dyn_look(attr, "pos")[i] - attsize[i] / 2) for i in [0, 1] ] box.append(box[0] + attsize[0]) box.append(box[1] + attsize[1]) self.tag.paste(attag.crop(attbox), box, mask=ImageOps.invert(attag.crop(attbox))) except: pass # self.dr.text([dyn_look(self,"month.pos")[i].get() for i in [0,1]],str(self.month.get()),0,font=dyn_look(self,"month.font")) return self.tag
def _save_barcode(self, address, nonce): barcode = code128.image(str(address) + "," + str(nonce)) factor = 4 barcode = barcode.resize( (int(barcode.width * factor), int(barcode.height * factor))) barcode.save(str(BAR_CODE_FILE_PATH))
def soldTag(res=100, n=(2,6),lbl=None,side='oldsold-front',orientation='portrait',**kw): o=ORIENTATIONS[orientation] relres=res/100 tagsize=(round(res*o[0]/n[0]),round(res*o[1]/n[1])) tag=Image.new('L',tagsize,color="white") dtag=ImageDraw.Draw(tag) if 'lbl' in TEMPLATES[side].keys(): TEMPLATES[side]['lbl'][0]['text']=str(lbl) def centertext(d,justify='center',line=0,autopar=False): for att in d: if 'c' in att.keys(): locrat=att['c'] font=ImageFont.truetype(att['font'][0],round(att['font'][1]*relres)) attsize=ImageDraw.ImageDraw.multiline_textsize(dtag,text=att['text'], font=font) if justify=='center': justamt=[.5*i for i in attsize] elif justify=='left': justamt=(attsize[0]/2,0) loc=[round((tagsize[i]*locrat[i]-justamt[i])) for i in range(2)] dtag.multiline_text(loc,att['text'],anchor='center',font=font)#takes the size of the tag, multiplies it by location ratio, then subtracts pixelsize of text - needed bc default action of text is to go from top-left corner, this ends up doing from the center if 'bar' in att.keys(): if att['bar'][0]=='after': barloc=(loc[0]+attsize[0],loc[1]+attsize[1]) lineloc=(barloc[0],barloc[1],(barloc[0]+10*relres*att['bar'][1]),barloc[1]) dtag.line(lineloc) #add line here if side.upper() in TEMPLATES.keys(): if side.upper()=='NEWSOLD': corns=((.025,.05),(.975,.95)) coords=[round(tagsize[i]*corns[j][i]) for j in range(2) for i in range(2)] logo=Image.open(os.path.join(wd,"Logo","NewLogoCentered.png")) tag.paste(logo.resize((round(tagsize[0]/2),round(tagsize[1]/(8)))),(round(tagsize[0]/4),round(tagsize[1]*.05))) dtag.rectangle(coords,width=2,outline='black') elif side.upper()in ['FURN','TAG']: s=side.upper() if 'price' in kw.keys(): PR=TEMPLATES[s]['price'][0] p=kw['price'] try: P="%.2f" %round(float(p),2) PR['text']='$'+P except:#not a number print('whoops') centertext(TEMPLATES[s]['price']) if 'barcode' in kw.keys(): BC=TEMPLATES[s]['barcode'][0] BC['code']=kw['barcode'] bar=code128.image(BC['code'],thickness=round(relres*BC['shape'][0]),height=round(relres*BC['shape'][1])) bar=bar.convert('RGB') #convert to RGB just in case bar=bar.rotate(BC['rot'],expand=1) #paste barcode onto canvas barbox=[round(BC['c'][0]*tag.size[0]),round(BC['c'][1]*tag.size[1]),0,0] barbox[2]=barbox[0]+bar.size[0] barbox[3]=barbox[1]+bar.size[1] tag.paste(bar,barbox) if 'category' in kw.keys(): if 'category' in TEMPLATES[s].keys(): CT=TEMPLATES[s]['category'][0] CT['text']=kw['category'] for t in TEMPLATES[side.upper()].keys(): for field in TEMPLATES[side.upper()][t]: if 'text' in field.keys(): centertext(TEMPLATES[side.upper()][t]) # else: # print(side) # if side=='front': # frnt=TEMPLATES['FRONT'] ## centertext(frnt['fs'], font=) ## centertext(frnt['fyn'], font=) ## centertext(frnt['frontbtm'], ) ## centertext(frnt['frontfields'], font=ImageFont.truetype(ubuntum,12)) # centertext(frnt['lbltxt'], font=ImageFont.truetype(ubuntum,15)) # elif side=='back': # bck=TEMPLATES['BACK'] # centertext(bck['backmgmt'], font=ImageFont.truetype(ubuntum,9),justify='center') # centertext(bck['backfields'], font=ImageFont.truetype(ubuntum,9),justify='center') # centertext(bck['backblurb'], font=ImageFont.truetype(ubuntum,9),justify='center') # else: return None return tag
def stickers_simple(col = 3, rows = 7, skip = 0, comp = [], store = None, pozice = None): page = 0 page_cols = col page_rows = rows page_cells = page_cols * page_rows cell_w = 210/page_cols cell_h = 297/page_rows stock_identificator = store print ("pozadovany format je 70x42") pdf = FPDF('P', 'mm', format='A4') pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans-bold', '', 12) pdf.set_auto_page_break(False) pdf.add_page() for i, component in enumerate(comp): i += skip # id = component['name'].strip().replace('/', '_') id = str(component['_id']) barcode = str(int(id, 16)) code128.image(barcode).save("static/tmp/barcode/%s.png"%(id)) if i != 0 and i%(page_cells) == 0: page += 1 pdf.add_page() print("New PAGE --- ", i, i%page_cells) row = int(i/page_cols)-page*page_rows column = i%page_cols cell_x = column*cell_w cell_y = row*cell_h pdf.set_xy(cell_x+3, cell_y+6.75) if len(component['name'])<23: pdf.set_font('pt_sans-bold', '', 14) else: pdf.set_font('pt_sans-bold', '', 10) pdf.cell(cell_w-10, 0, component['name'][:35]) pdf.set_xy(cell_x+1, cell_y+9) pdf.image('static/tmp/barcode/%s.png'%(id), w = cell_w-2, h=6) pdf.set_font('pt_sans', '', 9.5) pdf.set_xy(cell_x+3, cell_y+22) try: pdf.multi_cell(cell_w-6, 3.4, component['description'][:190]) except Exception as e: pdf.multi_cell(cell_w-10, 5, "ERR" + repr(e)) #pdf.set_xy(cell_x+3, cell_y+12) #pdf.set_font('pt_sans', '', 7.5) #pdf.cell(cell_w-10, 10, id + " | " + str(datetime.date.today()) ) pos = pozice(bson.ObjectId(id), stock = stock_identificator['_id'], primary = True) if len(pos) > 0: pos = pos[0]['info'][0]['name'] print("POZ", pos) else: pos = "" pdf.set_font('pt_sans', '', 7.5) #pdf.set_xy(cell_x+3, cell_y+15) #pdf.cell(cell_w-10, 10, str(stock_identificator['code']) + " | " + str(pos) + " | " + ','.join(component['category'])) pdf.set_xy(cell_x+3, cell_y+12) pdf.cell(cell_w-10, 10, str(datetime.date.today()) + " | " + ','.join(component['category'])) pdf.set_xy(cell_x+3, cell_y+15) pdf.cell(cell_w-10, 10, str(stock_identificator['code']) + " | " + str(pos)) print("Generovani pozice...") return pdf
def get(self, data = None): out_type = self.get_argument('type', 'html') components = [] components = self.get_query_arguments('action[]', []) multiply = int(self.get_argument('multiply', 5)) layout = self.get_argument('template', '70x40_simple') skip = int(self.get_argument('skip', 0)) #print("Soucastky..",components) if len(components) > 0: comp = list(self.mdb.stock.find({'_id' : {'$in' : components}})) else: comp = list(self.mdb.stock.find().sort([("category", 1), ("_id",1)])) page = 0 #print("Budeme tisknout:", comp) if layout == 'souhrn_01': autori = self.get_query_argument('autor', None) if not autori: autori = ['autory vlozite pridanim autoru do adresy s parametrem "autor"', 'autoru muze byt vice, pouzijte vice parametru', 'Například pridanim tohoto na konec adresy: &autor=Tester První'] datum = self.get_argument('datum', ">>pro specifikovani pridejte parametr 'datum' do GET parametru<<") page = 1 money_sum = 0 Err = [] print ("pozadovany format je:", layout) pdf = FPDF('P', 'mm', format='A4') pdf.set_auto_page_break(False) pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans', '', 12) pdf.add_page() pdf.set_xy(0, 40) pdf.cell(pdf.w, 0, 'Celkový přehled skladu', align='C', ln=2) pdf.set_xy(0, 46) pdf.cell(pdf.w, 0, 'Universal Scientific Technologies s.r.o.', align='C', ln=2) pdf.set_xy(20, 200) pdf.cell(1,0, 'Inventuru provedli:', ln=2) for x in autori: pdf.cell(1,20, x, ln=2) pdf.set_font('pt_sans', '', 8) pdf.set_xy(120, 288) pdf.cell(10, 0, "Generováno %s, strana %s z %s" %(datetime.datetime.now(), page, pdf.alias_nb_pages()) ) pdf.add_page() data = self.mdb.stock.aggregate([ {'$addFields': {'count': {'$sum': '$history.bilance'}}} ]) gen_time = datetime.datetime(2018, 10, 1) lastOid = ObjectId.from_datetime(gen_time) for i, component in enumerate(data): #for i, component in enumerate(list(data)[:30]): print(i, "=============================") print(component['_id']) try: ## Pokud je konec stránky if pdf.get_y() > pdf.h-20: pdf.line(10, pdf.get_y()+0.5, pdf.w-10, pdf.get_y()+0.5) pdf.set_font('pt_sans', '', 10) pdf.set_xy(150, pdf.get_y()+1) pdf.cell(100, 5, 'Součet strany: {:6.2f} Kč'.format(page_sum)) pdf.add_page() ## Pokud je nová strana if page != pdf.page_no(): pdf.set_font('pt_sans', '', 8) page = pdf.page_no() pdf.set_xy(120, 288) pdf.cell(10, 0, "Generováno %s, strana %s z %s" %(datetime.datetime.now(), page, pdf.alias_nb_pages()) ) pdf.set_font('pt_sans', '', 11) pdf.set_xy(10, 10) pdf.cell(100, 5, 'Skladová položka') pdf.set_x(95) pdf.cell(10, 5, "Počet kusů", align='R') pdf.set_x(120) pdf.cell(10, 5, "Cena za 1ks", align='R') pdf.set_x(180) pdf.cell(10, 5, "Cena položky (bez DPH)", align='R', ln=2) pdf.line(10, 15, pdf.w-10, 15) pdf.set_y(18) page_sum = 0 pdf.set_font('pt_sans', '', 10) count = component['count'] if count >0: price = 0 price_ks = 0 first_price = 0 pdf.set_x(10) pdf.cell(100, 5, component['_id']) pdf.set_x(95) pdf.cell(10, 5, "%5.d" %(count), align='R') pdf.set_x(10) pdf.cell(100, 5, "{:5.0f} {}".format(i, component['_id'])) inventura = False for x in reversed(component.get('history', [])): if x.get('operation', None) == 'inventory': print("inventura", x) if x['_id'].generation_time > lastOid.generation_time: print("#############") inventura = True count = x['absolute'] pdf.set_x(110) pdf.cell(1, 5, "i") break; pdf.set_font('pt_sans', '', 10) pdf.set_x(95) pdf.cell(10, 5, "{} j".format(count), align='R') rest = count for x in reversed(component.get('history', [])): if x.get('price', 0) > 0: if first_price == 0: first_price = x['price'] if x['bilance'] > 0: if x['bilance'] <= rest: price += x['price']*x['bilance'] rest -= x['bilance'] else: price += x['price']*rest rest = 0 print("Zbývá", rest, "ks, secteno", count-rest, "za cenu", price) if(count-rest): price += rest*first_price money_sum += price page_sum +=price if price == 0.0 and x.get('count', 0) > 0: Err.append('Polozka >%s< nulová cena, nenulový počet' %(component['_id'])) pdf.set_x(120) if count > 0: pdf.cell(10, 5, "%6.2f Kč" %(price/count), align='R') else: pdf.cell(10, 5, "%6.2f Kč" %(0), align='R') pdf.set_font('pt_sans-bold', '', 10) pdf.set_x(180) pdf.cell(10, 5, "%6.2f Kč" %(price), align='R') except Exception as e: Err.append('Err' + repr(e) + component['_id']) print(e) pdf.set_y(pdf.get_y()+4) pdf.line(10, pdf.get_y(), pdf.w-10, pdf.get_y()) pdf.set_font('pt_sans', '', 8) pdf.set_x(180) pdf.cell(10, 5, "Konec souhrnu", align='R') pdf.set_font('pt_sans', '', 10) pdf.set_xy(150, pdf.get_y()+3) pdf.cell(100, 5, 'Součet strany: {:6.2f} Kč'.format(page_sum)) pdf.page = 1 pdf.set_xy(20,175) pdf.set_font('pt_sans', '', 12) pdf.cell(20,20, "Cena skladových zásob k %s je %0.2f Kč (bez DPH)" %(datum, money_sum)) if len(Err) > 0: pdf.set_xy(30,80) pdf.cell(1,6,"Pozor, chyby ve skladu:", ln=2) pdf.set_x(32) for ch in Err: pdf.cell(1,5,ch,ln=2) pdf.page = page print(autori) if layout == '105x74_simple': page = 0 page_cols = 2 page_rows = 4 page_cells = page_cols * page_rows cell_w = 105 cell_h = 75 print ("pozadovany format je:", layout) pdf = FPDF('P', 'mm', format='A4') pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans-bold', '', 12) pdf.set_auto_page_break(False) pdf.add_page() for i, component in enumerate(comp): i += skip id = component['_id'].strip().replace('/', '') code128.image(component['_id']).save("static/barcode/%s.png"%(id)) if i != 0 and i%(page_cells) == 0: page += 1 pdf.add_page() print("New PAGE --- ", i, i%page_cells) row = int(i/page_cols)-page*page_rows column = i%page_cols cell_x = column*cell_w cell_y = row*cell_h print(component) pdf.set_font('pt_sans-bold', '', 14) pdf.set_xy(cell_x+5, cell_y+5) pdf.cell(cell_w-10, 0, component['_id']) pdf.set_xy(cell_x, cell_y+10) pdf.image('static/barcode/%s.png'%(id), w = cell_w, h=10) pdf.set_font('pt_sans', '', 11) pdf.set_xy(cell_x+5, cell_y+23) try: pdf.multi_cell(cell_w-10, 5, component['description']) except Exception as e: pdf.multi_cell(cell_w-10, 5, "ERR" + repr(e)) pdf.set_xy(cell_x+5, cell_y+cell_h-15) pdf.set_font('pt_sans', '', 8) pdf.cell(cell_w-10, 10, ', '.join(component['category']) + " | " + str(datetime.datetime.now()) + " | " + "UST") if layout == '70x42-3_simple': page = 0 page_cols = 3 page_rows = 7 page_cells = page_cols * page_rows cell_w = 210/page_cols cell_h = 297/page_rows print ("pozadovany format je:", layout) pdf = FPDF('P', 'mm', format='A4') pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans-bold', '', 12) pdf.set_auto_page_break(False) pdf.add_page() for i, component in enumerate(comp): i += skip id = component['name'].strip().replace('/', '_') code128.image(component['_id']).save("static/barcode/%s.png"%(id)) if i != 0 and i%(page_cells) == 0: page += 1 pdf.add_page() print("New PAGE --- ", i, i%page_cells) row = int(i/page_cols)-page*page_rows column = i%page_cols cell_x = column*cell_w cell_y = row*cell_h pdf.set_xy(cell_x+5, cell_y+6.75) if len(component['name'])<23: pdf.set_font('pt_sans-bold', '', 14) else: pdf.set_font('pt_sans-bold', '', 10) pdf.cell(cell_w-10, 0, component['name'][:35]) pdf.set_xy(cell_x+2.5, cell_y+9) pdf.image('static/barcode/%s.png'%(id), w = cell_w-5, h=7) pdf.set_font('pt_sans', '', 11) pdf.set_xy(cell_x+4, cell_y+20) try: pdf.multi_cell(cell_w-8, 4, component['description'][:185]) except Exception as e: pdf.multi_cell(cell_w-10, 5, "ERR" + repr(e)) pdf.set_xy(cell_x+5, cell_y+cell_h-7) pdf.set_xy(cell_x+5, cell_y+13) pdf.set_font('pt_sans', '', 7.5) pdf.cell(cell_w-10, 10, ', '.join(component['category']) + " |" + str(datetime.date.today()) + "| " + component['_id']) if layout == '105x48_simple': page = 0 page_cols = 2 page_rows = 6 page_cells = page_cols * page_rows #cell_w = 105 #cell_h = 48 cell_w = 210/page_cols cell_h = 297/page_rows print ("pozadovany format je:", layout) pdf = FPDF('P', 'mm', format='A4') pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans-bold', '', 12) pdf.set_auto_page_break(False) pdf.add_page() for i, component in enumerate(comp): i += skip id = component['_id'].strip().replace('/', '') code128.image(component['_id']).save("static/barcode/%s.png"%(id)) if i != 0 and i%(page_cells) == 0: page += 1 pdf.add_page() print("New PAGE --- ", i, i%page_cells) row = int(i/page_cols)-page*page_rows column = i%page_cols cell_x = column*cell_w cell_y = row*cell_h print(component) pdf.set_font('pt_sans-bold', '', 14) pdf.set_xy(cell_x+5, cell_y+5) pdf.cell(cell_w-10, 0, component['_id']) pdf.set_xy(cell_x, cell_y+10) pdf.image('static/barcode/%s.png'%(id), w = cell_w, h=10) pdf.set_font('pt_sans', '', 10) pdf.set_xy(cell_x+5, cell_y+20) try: pdf.multi_cell(cell_w-10, 4, component['description'][:275]) except Exception as e: pdf.multi_cell(cell_w-10, 4, "ERR" + repr(e)) pdf.set_xy(cell_x+5, cell_y+cell_h-10) pdf.set_font('pt_sans', '', 8) pdf.cell(cell_w-10, 10, ', '.join(component['category']) + " | " + str(datetime.datetime.now()) + " | " + "UST") elif layout == '105x48_panorama': page = 0 page_cols = 6 page_rows = 2 page_cells = page_cols * page_rows cell_w = 48 cell_h = 105 print ("pozadovany format je:", layout) pdf = FPDF('L', 'mm', format='A4') pdf.add_font('pt_sans', '', 'static/pt_sans/PT_Sans-Web-Regular.ttf', uni=True) pdf.add_font('pt_sans-bold', '', 'static/pt_sans/PT_Sans-Web-Bold.ttf', uni=True) pdf.set_font('pt_sans-bold', '', 12) pdf.set_auto_page_break(False) pdf.add_page() for i, component in enumerate(comp): i += skip id = component['_id'].strip().replace('/', '') code128.image(component['_id']).save("static/barcode/%s.png"%(id)) if i != 0 and i%(page_cells) == 0: page += 1 pdf.add_page() print("New PAGE --- ", i, i%page_cells) row = int(i/page_cols)-page*page_rows column = i%page_cols cell_x = column*cell_w cell_y = row*cell_h print(component) pdf.set_font('pt_sans-bold', '', 14) pdf.set_xy(cell_x+5, cell_y+5) pdf.cell(cell_w-10, 0, component['_id']) pdf.set_xy(cell_x, cell_y+cell_h) pdf.rotate(90) pdf.image('static/barcode/%s.png'%(id), w = cell_h-5, h=10) pdf.rotate(0) pdf.set_font('pt_sans', '', 11) pdf.set_xy(cell_x+8, cell_y+20) try: pdf.multi_cell(cell_w-10, 5, component['description']) except Exception as e: pdf.multi_cell(cell_w-10, 5, "ERR" + repr(e)) pdf.set_xy(cell_x+5, cell_y+cell_h-15) pdf.set_font('pt_sans', '', 8) pdf.cell(cell_w-10, 10, ', '.join(component['category']) + " | " + str(datetime.datetime.now()) + " | " + "UST") pdf.output("static/tmp/sestava.pdf") with open('static/tmp/sestava.pdf', 'rb') as f: self.set_header("Content-Type", 'application/pdf; charset="utf-8"') self.set_header("Content-Disposition", "inline; filename=UST_tiskova_sestava.pdf") self.write(f.read()) f.close()