From 9107ba11995a826e040b1442af3d6761562912f3 Mon Sep 17 00:00:00 2001 From: gkonoplya Date: Fri, 8 May 2026 14:03:40 +0300 Subject: [PATCH] New size of pictures for better speed --- build_pdf.py | 14 +++++++------- resources/ШАблон для загрузки этикеток.xlsx | Bin 22777 -> 22900 bytes 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/build_pdf.py b/build_pdf.py index d4c42ca..8aff85b 100644 --- a/build_pdf.py +++ b/build_pdf.py @@ -122,7 +122,7 @@ def create_datamatrix_in_memory(raw_bytes: bytes) -> ImageReader: ) # Очищаем картинку для термопринтера (убираем сглаживание) - img = img.resize((img.width * 10, img.height * 10), Image.Resampling.NEAREST) + img = img.resize((img.width * 5, img.height * 5), Image.Resampling.NEAREST) return ImageReader(img) @@ -236,7 +236,7 @@ def draw_label_page(c: canvas.Canvas, font_name: str, dm_image: ImageReader, lab # ========================================================= # DataMatrix (крупный квадрат слева сверху) img_size = 23 * mm - img_x = 2 * mm + img_x = 4 * mm img_y = label_height - img_size - 2 * mm # Верхний левый угол c.drawImage(dm_image, img_x, img_y, width=img_size, height=img_size) @@ -282,13 +282,13 @@ def draw_label_page(c: canvas.Canvas, font_name: str, dm_image: ImageReader, lab # 7. EAN Текст (самый низ) ean_text_h = 2.5 * mm - ean_text_y = 1 * mm + ean_text_y = 3 * mm place_text(c, f"{label_data.ean}", font_name, x=right_x, y=ean_text_y, width=right_w, height=ean_text_h, font_size=6, font_type='regular', align='center', auto_resize=True) # 6. EAN Штрихкод (Серый прямоугольник-заглушка) - ean_barcode_h = 9 * mm + ean_barcode_h = 8 * mm ean_barcode_y = ean_text_y + ean_text_h code128_image = render_code128(label_data.ean) c.drawImage(code128_image, right_x, ean_barcode_y, width=right_w, height=ean_barcode_h) @@ -300,21 +300,21 @@ def draw_label_page(c: canvas.Canvas, font_name: str, dm_image: ImageReader, lab art_y = ean_barcode_y + ean_barcode_h place_text(c, f"арт.: {label_data.article}", font_name, x=right_x, y=art_y, width=right_w, height=art_h, - font_size=7, font_type='bold', align='center') + font_size=7, font_type='bold', align='center', auto_resize=True) # 4. Размер (одна строка, жирно) size_h = 3 * mm size_y = art_y + art_h place_text(c, f"размер: {label_data.size}", font_name, x=right_x, y=size_y, width=right_w, height=size_h, - font_size=7, font_type='bold', align='center') + font_size=7, font_type='bold', align='center', auto_resize=True) # 3. Цвет (одна строка, жирно) color_h = 3 * mm color_y = size_y + size_h place_text(c, f"цвет: {label_data.color}", font_name, x=right_x, y=color_y, width=right_w, height=color_h, - font_size=7, font_type='bold', align='center') + font_size=7, font_type='bold', align='center', auto_resize=True) # 2. Описание (Крупно, жирно, центр, занимает всё среднее пространство) desc_h = 13 * mm diff --git a/resources/ШАблон для загрузки этикеток.xlsx b/resources/ШАблон для загрузки этикеток.xlsx index 53c240c93929a54a85689088ed3b3b3d65b360ae..ddd8ea8860f409a8112964e4cf3350e3cb004a23 100644 GIT binary patch delta 8912 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 awc0|URON&#Z2@T01Qs0;_<8kz6#oOx-<7Wb