88 lines
2.8 KiB
Python
88 lines
2.8 KiB
Python
import os
|
|
|
|
import barcode
|
|
import datetime
|
|
from PIL import Image
|
|
from PIL import ImageDraw
|
|
from PIL import ImageFont
|
|
from brother_ql import BrotherQLRaster
|
|
from brother_ql import create_label
|
|
from brother_ql.backends import backend_factory
|
|
from brother_ql.devicedependent import label_type_specs
|
|
|
|
from barcode_helpers import BrotherLabelWriter
|
|
|
|
|
|
def print_name_label(text, margin=10, rotate=False, label_type="62", printer_type="QL-700",):
|
|
if not rotate:
|
|
width, height = label_type_specs[label_type]['dots_printable']
|
|
else:
|
|
height, width = label_type_specs[label_type]['dots_printable']
|
|
|
|
font_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), "Stranger back in the Night.ttf")
|
|
fs = 2000
|
|
tw, th = width, height
|
|
if width == 0:
|
|
while th + 2*margin > height:
|
|
font = ImageFont.truetype(font_path, fs)
|
|
tw, th = font.getsize(text)
|
|
fs -= 1
|
|
width = tw+2*margin
|
|
elif height == 0:
|
|
while tw + 2*margin > width:
|
|
font = ImageFont.truetype(font_path, fs)
|
|
tw, th = font.getsize(text)
|
|
fs -= 1
|
|
height = th+2*margin
|
|
else:
|
|
while tw + 2*margin > width or th + 2*margin > height:
|
|
font = ImageFont.truetype(font_path, fs)
|
|
tw, th = font.getsize(text)
|
|
fs -= 1
|
|
|
|
xp = (width//2)-(tw//2)
|
|
yp = (height//2)-(th//2)
|
|
|
|
im = Image.new("RGB", (width, height), (255, 255, 255))
|
|
dr = ImageDraw.Draw(im)
|
|
|
|
dr.text((xp, yp), text, fill=(0, 0, 0), font=font)
|
|
now = datetime.datetime.now()
|
|
date = now.strftime("%Y-%m-%d")
|
|
dr.text((0, 0), date, fill=(0, 0, 0))
|
|
|
|
base_path = os.path.dirname(os.path.realpath(__file__))
|
|
fn = os.path.join(base_path, "bar_codes", text + ".png")
|
|
|
|
im.save(fn, "PNG")
|
|
print_image(fn, printer_type, label_type)
|
|
|
|
|
|
def print_bar_code(barcode_value, barcode_text, barcode_type="ean13", rotate=False, printer_type="QL-700",
|
|
label_type="62"):
|
|
bar_coder = barcode.get_barcode_class(barcode_type)
|
|
wr = BrotherLabelWriter(typ=label_type, rot=rotate, text=barcode_text, max_height=1000)
|
|
|
|
test = bar_coder(barcode_value, writer=wr)
|
|
base_path = os.path.dirname(os.path.realpath(__file__))
|
|
fn = test.save(os.path.join(base_path, "bar_codes", barcode_value))
|
|
print_image(fn, printer_type, label_type)
|
|
|
|
|
|
def print_image(fn, printer_type="QL-700", label_type="62"):
|
|
qlr = BrotherQLRaster(printer_type)
|
|
qlr.exception_on_warning = True
|
|
create_label(qlr, fn, label_type, threshold=70, cut=True)
|
|
|
|
be = backend_factory("pyusb")
|
|
list_available_devices = be['list_available_devices']
|
|
BrotherQLBackend = be['backend_class']
|
|
|
|
ad = list_available_devices()
|
|
assert ad
|
|
string_descr = ad[0]['string_descr']
|
|
|
|
printer = BrotherQLBackend(string_descr)
|
|
|
|
printer.write(qlr.data)
|