def print_text(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {"success": False} try: context = get_label_context(request) except LookupError as e: return_dict["error"] = e.msg return return_dict if context["text"] is None: return_dict["error"] = "Please provide the text for the label" return return_dict im = create_label_im(**context) if DEBUG: im.save("sample-out.png") if context["kind"] == ENDLESS_LABEL: rotate = 0 if context["orientation"] == "standard" else 90 elif context["kind"] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = "auto" qlr = BrotherQLRaster(CONFIG["PRINTER"]["MODEL"]) red = False if "red" in context["label_size"]: red = True create_label( qlr, im, context["label_size"], red=red, threshold=context["threshold"], cut=True, rotate=rotate, ) if not DEBUG: try: be = BACKEND_CLASS(CONFIG["PRINTER"]["PRINTER"]) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict["message"] = str(e) logger.warning("Exception happened: %s", e) return return_dict return_dict["success"] = True if DEBUG: return_dict["data"] = str(qlr.data) return return_dict
def print_task(printer, label): selected_backend = guess_backend(printer.connection) BACKEND_CLASS = backend_factory(selected_backend)['backend_class'] image = img_label(label) # from brother_ql qlr = BrotherQLRaster(printer.model) create_label(qlr, image, printer.width, threshold=70, cut=True, dither=False, compress=False, red=False) try: be = BACKEND_CLASS(printer.connection) be.write(qlr.data) be.dispose() del be except Exception as e: raise NameError(str(e)) return True
def print_text(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {'success': False} try: context = get_label_context(request) except LookupError as e: return_dict['error'] = e.msg return return_dict if context['text'] is None: return_dict['error'] = 'Please provide the text for the label' return return_dict im = create_label_im(**context) if DEBUG: im.save('sample-out.png') if context['kind'] == ENDLESS_LABEL: rotate = 0 if context['orientation'] == 'standard' else 90 elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = 'auto' red = False if context['color'] == 'redandblack': red = True qlr = BrotherQLRaster(CONFIG['PRINTER']['MODEL']) create_label(qlr, im, context['label_size'], threshold=context['threshold'], cut=True, red=red, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(CONFIG['PRINTER']['PRINTER']) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
def print_image(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {'success': False} try: context = get_label_context(request) except LookupError as e: return_dict['error'] = e.msg return return_dict if not image_exists(context["file_name"]): return_dict['message'] = "Image not in directory" logger.warning('Exception happened: Image not in directory') return return_dict im = Image.open(os.path.join(IMG_DIR, context["file_name"])) if context['kind'] == ENDLESS_LABEL: rotate = 0 if context['orientation'] == 'standard' else 90 elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = 'auto' qlr = BrotherQLRaster(CONFIG['PRINTER']['MODEL']) create_label(qlr, im, context['label_size'], cut=True, red=True if "red" in context['label_size'] else False, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(CONFIG['PRINTER']['PRINTER']) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
def do_print(): """ Receive the image from the frontend and print it :return: string a simple 'ok' when no exception was thrown """ im = Image.open(request.files['data']) qlr = BrotherQLRaster(MODEL) create_label(qlr, im, request.form['size'], threshold=70, cut=False, rotate=0) # noinspection PyCallingNonCallable be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) be.dispose() del be return 'ok'
def do_print(): """ Receive the image from the frontend and print it :return: string a simple 'ok' when no exception was thrown """ im = Image.open(request.files['data']) qlr = BrotherQLRaster(MODEL) create_label(qlr, im, request.form['size'], threshold=70, cut=True, rotate=0) # noinspection PyCallingNonCallable be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) be.dispose() del be return 'ok'
def printLabel(name): width = 500 height = 100 d = Drawing(width, height) d.add(String(5, 5, name, fontSize=40, fontName='Helvetica')) #d.add(String(5, 5, name, fontSize=60, fontName='Helvetica')) qlr = BrotherQLRaster('QL-1050') #qlr = BrotherQLRaster('QL-800') create_label(qlr, renderPM.drawToPIL(d), LABEL_NAME, rotate=0, cut=True, dpi_600=DPI_600) send(qlr.data, PRINTER)
def print_text(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {'success': False} try: context = get_label_context(request) except LookupError as e: return_dict['error'] = e.msg return return_dict if context['text'] is None: return_dict['error'] = 'Please provide the text for the label' return return_dict im = create_label_im(**context) if DEBUG: im.save('sample-out.png') qlr = BrotherQLRaster(MODEL) rotate = 0 if context['orientation'] == 'standard' else 90 create_label(qlr, im, context['label_size'], threshold=context['threshold'], cut=True, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
def print_label(self): # Prints the generated label for the wine as long as it has been generated image = self.temp_dir + '/' + str(self.wine_id) + '.png' # If the image file doesn't exist, generate it first if not os.path.isfile(image): self.generate_label() ql_printer = brother_ql.BrotherQLRaster(model='QL-500') ql_printer.cut_at_end = False brother_ql.create_label(ql_printer, image, label_size='12', cut=False, dither=True, compress=False, red=False, rotate=90) printer = brother_ql.backends.pyusb.list_available_devices( )[0]['identifier'] brother_ql.backends.helpers.send(ql_printer.data, printer_identifier=printer, backend_identifier='pyusb')
def prt(self): print(label_type_specs[self.size]) if label_type_specs[self.size]['kind'] == ENDLESS_LABEL: rot = 0 if not self.rotated else 90 else: rot = 'auto' if label_type_specs[self.size]['kind'] != 2: label_type_specs[ self.size]['feed_margin'] = config['label']['feed_margin'] qlr = BrotherQLRaster(config['printer']['model']) if config['printer']['model'] in cuttingsupport: logger.debug('Printer is capable of automatic cutting.') cutting = True else: logger.debug('Printer is not capable of automatic cutting.') cutting = False create_label(qlr, self.image, self.size, threshold=30, cut=cutting, rotate=rot) try: backend_class = backend_factory(backend)['backend_class'] be = backend_class(config['printer']['device']) pprint(vars(be)) be.write(qlr.data) be.dispose() del be # TODO better feedback from printer return "alert-success", "<b>Success:</b>Label printed" except Exception as e: logger.warning("unable tp print") logger.warning(e) return "danger", "unable to print"
def create_raster_file(label_size, in_file, out_file, cut=True): qlr = brother_ql.BrotherQLRaster(PRINTER_MODEL) brother_ql.create_label(qlr, in_file, label_size, cut=cut) with open(out_file, 'wb') as f: f.write(qlr.data)
def print_text(**data): global DEBUG, FONTS, DEFAULT_FONT, MODEL, BACKEND_CLASS, BACKEND_STRING_DESCR, DEFAULT_ORIENTATION, DEFAULT_LABEL_SIZE BACKEND_STRING_DESCR = data["printer_uri"] # "tcp://192.168.0.10:9100" font_folder = "./static/fonts" selected_backend = guess_backend(BACKEND_STRING_DESCR) BACKEND_CLASS = backend_factory(selected_backend)["backend_class"] MODEL = data["printer_model"] # "QL-720NW" DEFAULT_LABEL_SIZE = data["label_size"] # "62x100" DEFAULT_ORIENTATION = data["orientation"] # "rotated" FONTS = get_fonts() if font_folder: FONTS.update(get_fonts(font_folder)) status = False try: context = get_label_context( data["first_name"], data["last_name"], data["company"], data["label_size"] ) except LookupError as e: return status if context["name"] is None: return status if context["company"] is None: context["company"] = "" if context["last_name"] is None: context["name"] = context["first_name"] context["event_name"] = data["event_name"] context["logo"] = data["logo"] context["label_tpl"] = data["label_tpl"] context["ticket_type"] = data["ticket_type"] im = eval("create_label_im_" + data["label_size"])(**context) if data["debug"]: data["image"] = im try: im.save( settings.MEDIA_ROOT + "/cache/label-%s_%s.png" % (data["first_name"], data["last_name"]) ) except FileNotFoundError: os.mkdir(settings.MEDIA_ROOT + "/cache") im.save( settings.MEDIA_ROOT + "/cache/label-%s_%s.png" % (data["first_name"], data["last_name"]) ) else: qlr = BrotherQLRaster(MODEL) rotate = 0 if data["orientation"] == "standard" else 90 if context["label_size"] == "62x29": rotate = 0 create_label( qlr, im, context["label_size"], threshold=context["threshold"], cut=True, rotate=rotate, ) try: be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) be.dispose() del be except Exception as e: return status status = True return status
def run(self): inputTwitter = window.rootObject().findChild(QObject, 'inputTwitter') inputTwitter.select(0,0) if inputTwitter.property('text') == "@twitter" or len(inputTwitter.property("text")) < 1: inputTwitter.setProperty("visible", False) inputName = window.rootObject().findChild(QObject, 'inputName') inputName.select(0,0) checkboxSelected = True#window.rootObject().findChild(QObject, 'checkboxSelected').property('visible') label = window.rootObject().findChild(QObject, 'textLos') ticket = '' if checkboxSelected: ticket = self.get_ticket_number() label.setProperty("text", "Los #%s" % ticket) #label.setProperty("visible", True) inputName.setProperty('focus', False) inputTwitter.setProperty('focus', False) badge = window.rootObject().findChild(QObject, 'badge') image = QPixmap.grabWidget(window, badge.x(), badge.y(), badge.width(), badge.height()) window.rootObject().findChild(QObject, "animateNameBadgeOff").start() self.app.processEvents(QEventLoop.AllEvents, 2000) bytes = QByteArray() buffer = QBuffer(bytes) buffer.open(QIODevice.WriteOnly) image.save(buffer, "PNG") buffer.close() img = PIL.Image.open(BytesIO(bytes.data())) img.thumbnail((2000, 413)) img = img.rotate(90) print (img.size) qlr = BrotherQLRaster(config['type']) qlr.exception_on_warning=True create_label(qlr, img, '38') selected_backend = 'linux_kernel' be = backend_factory(selected_backend) list_available_devices = be['list_available_devices'] BrotherQLBackend = be['backend_class'] printer = BrotherQLBackend(config['device']) printer.write(qlr.data) r = ">" while r: r = printer.read() print (r) print ("\nDone printing!") c = self.conn.cursor() c.execute(""" INSERT INTO badges (created, name, twitter, ticket) VALUES (datetime('now'),?,?,?) """, (inputName.property('text'), inputTwitter.property('text'), ticket)) self.conn.commit() c.close() QTimer.singleShot(2000, lambda: self.reset_ui())
def print_text(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {'success': False} try: context = get_label_context(request) except LookupError as e: return_dict['message'] = e.msg return return_dict if not context['text'] or context['text'] is None: return_dict['message'] = 'Please provide the text for the label' return return_dict if not context['printer_name'] or context['printer_name'] is None: return_dict['message'] = 'Please select a printer' return return_dict im = create_label_im(**context) if DEBUG: im.save('sample-out.png') if context['kind'] == ENDLESS_LABEL: rotate = 0 if context['orientation'] == 'standard' else 90 elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = 'auto' qlr = BrotherQLRaster(PRINTERS[context['printer_name']]["MODEL"]) create_label(qlr, im, context['label_size'], threshold=context['threshold'], cut=True, rotate=rotate) try: selected_backend = guess_backend( PRINTERS[context['printer_name']]["LOCATION"]) except Exception as e: return_dict['message'] = str(e) return return_dict BACKEND_CLASS = backend_factory(selected_backend)['backend_class'] if not DEBUG: try: be = BACKEND_CLASS(PRINTERS[context['printer_name']]["LOCATION"]) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
def print_text(): """ API to print a label returns: JSON Ideas for additional URL parameters: - alignment """ return_dict = {'success': False} try: context = get_label_context(request) except LookupError as e: return_dict['error'] = e.msg return return_dict if context['text'] is None: return_dict['error'] = 'Please provide the text for the label' return return_dict im = create_label_im(**context) if DEBUG: im.save('sample-out.png') if context['kind'] == ENDLESS_LABEL: rotate = 0 if context['orientation'] == 'standard' else 90 elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = 'auto' qlr = BrotherQLRaster(CONFIG['PRINTER']['MODEL']) red = False if 'red' in context['label_size']: red = True if context['image_mode'] == 'grayscale': dither = True else: dither = False threshold = (context['image_bw_threshold'] / 255) * 100 for cnt in range(1, context['print_count'] + 1): if context['cut_mode'] == 'cut': cut = True elif context['cut_mode'] == 'cut_once' and cnt == context[ 'print_count']: cut = True else: cut = False create_label(qlr, im, context['label_size'], red=red, dither=dither, threshold=threshold, cut=cut, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(CONFIG['PRINTER']['PRINTER']) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
img = Image.new('L', (696, 128), 255) # Add DataMatrix barcode code = barcode('datamatrix', text, options={'rows': 16, 'columns': 16}, margins=10) # type: Image img.paste(code.rotate(90).resize((128,128)), (0,0)) # Add ID text txt = Image.new('L', (128,35), 255) draw = ImageDraw.Draw(txt) font = ImageFont.truetype("Ubuntu-Regular.ttf", 30) tw,th = draw.textsize(text, font) draw.text(((128-tw)//2, 0), text, 0, font=font) draw.line((0,34,128,34)) txt = txt.rotate(90, expand=1) img.paste(txt, (128,0)) img.paste(img, (128+35+15,0)) img.paste(img, ((128+35+15)*2,0)) # Save image img.save('label.bmp') if not TESTING: # Print label qlr = BrotherQLRaster('QL-700') create_label(qlr, img, '62', threshold=70, cut=True) printer.write(qlr.data)
def print_image(): return_dict = {'success': False} logger.warning(request) try: #context = get_label_context(request) context = {} logger.warning(context) except LookupError as e: return_dict['error'] = e.msg return return_dict import requests from PIL import Image, ImageOps from io import BytesIO import os # load image from the upload request .. print('file names:') for k in request.files.keys(): print(k) upload = request.files.get('photos') name = upload.filename image_name = 'last-image-%s' % name if (os.path.exists(image_name)): os.remove(image_name) upload.save(image_name) im = Image.open(image_name) width, height = im.size i2 = Image.new('RGB', (696, height), '#ffffff') context['width'] = 696 context['height'] = height context['label_size'] = "62" context['threshold'] = 70 rotate = 0 print('image height: %d' % height) qlr = BrotherQLRaster(CONFIG['PRINTER']['MODEL']) create_label(qlr, im, context['label_size'], threshold=context['threshold'], cut=True, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(CONFIG['PRINTER']['PRINTER']) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict
draw = ImageDraw.Draw(titleImage) font = ImageFont.truetype("arial.ttf", int(y / 5)) draw.text((0, 0), title_text, font=font) titleImage.save("tmp4.bmp") newImage.paste(titleImage, (0, 0)) newImage.paste(img, (0, int(y // 4 + 1))) newImage.save("tmp1.bmp") newImage.paste(textImage, (x, int(y // 4 + 1))) newImage.save("tmp3.bmp") # 29x90 Codes 306x 991 qlr = brother_ql.BrotherQLRaster('QL-700') qlr.exception_on_warning = True brother_ql.create_label(qlr, newImage, '62') fo = open(mypath2, 'wb') fo.write(qlr.data) fo.close() be = backend_factory('pyusb') list_available_devices = be['list_available_devices'] BrotherQLBackend = be['backend_class'] ad = list_available_devices() for printer in ad: print("HERE") print(ad) print(printer['identifier']) string_descr = ad[0]['identifier']
def print_text(**data): global DEBUG, FONTS, DEFAULT_FONT, MODEL, BACKEND_CLASS, BACKEND_STRING_DESCR, DEFAULT_ORIENTATION, DEFAULT_LABEL_SIZE BACKEND_STRING_DESCR = data['printer_uri'] # "tcp://192.168.0.10:9100" font_folder = "./static/fonts" selected_backend = guess_backend(BACKEND_STRING_DESCR) BACKEND_CLASS = backend_factory(selected_backend)['backend_class'] MODEL = data['printer_model'] # "QL-720NW" DEFAULT_LABEL_SIZE = data['label_size'] # "62x100" DEFAULT_ORIENTATION = data['orientation'] # "rotated" FONTS = get_fonts() if font_folder: FONTS.update(get_fonts(font_folder)) status = False try: context = get_label_context(data['first_name'], data['last_name'], data['company'], data['label_size']) except LookupError as e: return status if context['name'] is None: return status if context['company'] is None: context['company'] = '' if context['last_name'] is None: context['name'] = context['first_name'] context['event_name'] = data['event_name'] context['logo'] = data['logo'] context['label_tpl'] = data['label_tpl'] context['ticket_type'] = data['ticket_type'] im = eval('create_label_im_' + data['label_size'])(**context) if data['debug']: data['image'] = im try: im.save(settings.MEDIA_ROOT + '/cache/label-%s_%s.png' % (data['first_name'], data['last_name'])) except FileNotFoundError: os.mkdir(settings.MEDIA_ROOT + '/cache') im.save(settings.MEDIA_ROOT + '/cache/label-%s_%s.png' % (data['first_name'], data['last_name'])) else: qlr = BrotherQLRaster(MODEL) rotate = 0 if data['orientation'] == 'standard' else 90 if context['label_size'] == '62x29': rotate = 0 create_label(qlr, im, context['label_size'], threshold=context['threshold'], cut=True, rotate=rotate) try: be = BACKEND_CLASS(BACKEND_STRING_DESCR) be.write(qlr.data) be.dispose() del be except Exception as e: return status status = True return status
def print_qrcodetracker(): return_dict = {'success': False} try: context = get_label_context(request) logger.warning(context) except LookupError as e: return_dict['error'] = e.msg return return_dict import requests from PIL import Image, ImageOps from io import BytesIO r = requests.get('https://api.qrserver.com/v1/create-qr-code/', params={ 'data': context['qr'], 'size': '%sx%s' % (context['qrsize'], context['qrsize']) }) logger.warning('REQUEST URL: %s' % (r.url)) logger.warning(r) logger.warning('contents:') logger.warning(r.content) im = Image.open(BytesIO(r.content)) im = im.convert('RGB') im.save('last-qrcode.png') if context['kind'] == ENDLESS_LABEL: rotate = 0 if context['orientation'] == 'standard' else 90 elif context['kind'] in (ROUND_DIE_CUT_LABEL, DIE_CUT_LABEL): rotate = 'auto' if rotate == 0: i2 = Image.new('RGB', (696, context['qrsize']), '#ffffff') else: i2 = Image.new('RGB', (context['qrsize'], 696), '#ffffff') # i2 = ImageOps.expand(im, border=300, fill='#ffffff') # im = i2.crop((0,300, 696,300+context['qrsize'])) # create multiple qrcodes on the label ... xoffset = 0 im3 = create_label_im(**context) im33 = im3.convert('RGB') im33.save('last-text-0.png') i2.paste(im3, (0, 0)) im33 = i2.convert('RGB') im33.save('last-text-1.png') i2.paste(im, (0, 100)) im33 = i2.convert('RGB') im33.save('last-text-2.png') context['width'] = 696 context['height'] = context['qrsize'] qlr = BrotherQLRaster(CONFIG['PRINTER']['MODEL']) create_label(qlr, i2, context['label_size'], threshold=context['threshold'], cut=True, rotate=rotate) if not DEBUG: try: be = BACKEND_CLASS(CONFIG['PRINTER']['PRINTER']) be.write(qlr.data) be.dispose() del be except Exception as e: return_dict['message'] = str(e) logger.warning('Exception happened: %s', e) return return_dict return_dict['success'] = True if DEBUG: return_dict['data'] = str(qlr.data) return return_dict