diff --git a/README.md b/README.md index dc70cf8..1871519 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Generate label and print them via brother_ql to ``` + `brother_ql print -l 62 Untitled.png` ## Printer/Paper Info ## @@ -23,5 +24,6 @@ Paper With: 62mm or 696px see https://github.com/pklaus/brother_ql +pip install qrcode diff --git a/layouter.py b/layouter.py index 62e2f31..a502ca6 100644 --- a/layouter.py +++ b/layouter.py @@ -3,31 +3,18 @@ """ Author: Hendrik Schutter, localhorst@mosad.xyz Date of creation: 2022/11/16 - Date of last modification: 2022/11/16 - - pip install qrcode - + Date of last modification: 2022/11/23 """ import re -import os -import sys -import time -import subprocess -import shlex -import shutil import dataclasses import glob -import PIL -from PIL import Image -from PIL import ImageFont -from PIL import ImageDraw import datetime import json import qrcode - - - +from PIL import Image +from PIL import ImageFont +from PIL import ImageDraw @dataclasses.dataclass class DriveData: @@ -64,13 +51,6 @@ class ReHddInfo: class DriveDataJson: drive: DriveData rehdd: ReHddInfo - -rehdd_info = ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process - -temp_drive = DriveData(drive_index=0, drive_state="shredded", modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\ - modelname="TOSHIBA MK3265GSDX", capacity=343597383680, serialnumber="YG6742U56UDRL123", power_on_hours=7074,\ - power_cycle=4792, smart_error_count=1, shred_timestamp=1647937421, shred_duration=81718) - def get_font_path_regular(): path = "/usr/share/fonts" @@ -99,17 +79,6 @@ def cut_string(max_lenght, data): return data def format_to_printable(drive): - - #print(cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamiliy))) - #print(cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname))) - #print(cut_string(20, human_readable_capacity(drive.capacity))) - #print(cut_string(20, re.sub(r"[^a-zA-Z0-9.-_]", "", drive.serialnumber))) - #print(cut_string(30, human_readable_power_on_hours(drive.power_on_hours))) - #print(cut_string(10, str(drive.power_cycle))) - #print(cut_string(10, str(drive.smart_error_count))) - #print(cut_string(30, datetime.datetime.utcfromtimestamp(drive.shred_timestamp).strftime('%Y-%m-%d %H:%M:%S'))) - #print(cut_string(30, str(datetime.timedelta(seconds = drive.shred_duration)))) - return DriveDataPrintable( cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamiliy)),\ cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname)),\ @@ -122,8 +91,13 @@ def format_to_printable(drive): cut_string(30, str(datetime.timedelta(seconds = drive.shred_duration)))) def draw_text(drawable, printable_data, text_x_offset): - font_file_regular = get_font_path_regular() - font_file_bold = get_font_path_bold() + try: + font_file_regular = get_font_path_regular() + font_file_bold = get_font_path_bold() + except Exception as ex: + print("unable to find font: " + str(ex)) + return + font_size = 20 text_y_offset = 10 text_y_offset_increment = 25 @@ -172,27 +146,57 @@ def draw_qr_code(image, data): image.paste(qr_img, (7, 7)) -def main(): - output_width = 696 - output_height = 300 +def generate_image(drive, rehdd_info, output_file): + output_width = 696 #in px set by used paper + output_height = 300 #in px + text_x_offset= 300 #in px - printable_data = format_to_printable(temp_drive) - - qr_data = DriveDataJson(temp_drive, rehdd_info) - json_qr_daten = json.dumps(dataclasses.asdict(qr_data)) + qr_data = DriveDataJson(drive, rehdd_info) + try: + json_qr_daten = json.dumps(dataclasses.asdict(qr_data)) + except Exception as ex: + print("unable to generate json: " + str(ex)) + return + try: + printable_data = format_to_printable(drive) + except Exception as ex: + print("unable to format data: " + str(ex)) + return + #print(printable_data) - text_x_offset= 300 - + #create black and white (binary) image with white background output_image = Image.new('1', (output_width, output_height), "white") + + #create draw pane draw = ImageDraw.Draw(output_image) draw_outline(draw, 1, 4, output_width, output_height) draw_text(draw, printable_data, text_x_offset) draw_qr_code(output_image, str(json_qr_daten).replace(" ", "")) - output_image.save("output.png") + output_image.save(output_file) + + +def main(): + + rehdd_info = ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process + + temp_drive = DriveData( + drive_index=0,\ + drive_state="shredded",\ + modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\ + modelname="TOSHIBA MK3265GSDX",\ + capacity=343597383680,\ + serialnumber="YG6742U56UDRL123",\ + power_on_hours=7074,\ + power_cycle=4792,\ + smart_error_count=1,\ + shred_timestamp=1647937421,\ + shred_duration=81718) + + generate_image(temp_drive, rehdd_info, "output.png") if __name__ == "__main__": diff --git a/reHDDPrinter.py b/reHDDPrinter.py new file mode 100644 index 0000000..c901f39 --- /dev/null +++ b/reHDDPrinter.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +""" Author: Hendrik Schutter, localhorst@mosad.xyz + Date of creation: 2022/11/23 + Date of last modification: 2022/11/23 +""" + +import layouter + + +def main(): + + rehdd_info = layouter.ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process + + temp_drive = layouter.DriveData( + drive_index=0,\ + drive_state="shredded",\ + modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\ + modelname="TOSHIBA MK3265GSDX",\ + capacity=343597383680,\ + serialnumber="YG6742U56UDRL123",\ + power_on_hours=7074,\ + power_cycle=4792,\ + smart_error_count=1,\ + shred_timestamp=1647937421,\ + shred_duration=81718) + + layouter.generate_image(temp_drive, rehdd_info, "output.png") + + + +if __name__ == "__main__": + main() \ No newline at end of file