feat: Add Web iface with QR codes

This commit is contained in:
Piotr Gaczkowski 2026-03-24 14:27:32 +01:00
parent 3897d37f2a
commit 2a2b5973df
10 changed files with 1293 additions and 739 deletions

View file

@ -4,6 +4,7 @@ from math import inf
from brother_ql import BrotherQLRaster, create_label
from brother_ql.backends import guess_backend, backend_factory
from brother_ql.conversion import convert
from pysnmp.entity.engine import SnmpEngine
from pysnmp.hlapi import getCmd, CommunityData, UdpTransportTarget, ContextData
from pysnmp.smi.rfc1902 import ObjectType, ObjectIdentity
@ -43,9 +44,9 @@ class E550W(Printer):
im = PILImage.open(io.BytesIO(label.bytes))
qlr = BrotherQLRaster("PT-E550W")
create_label(
convert(
qlr,
im,
[im],
self.__media_width_to_type(label.height),
red=False,
threshold=70,

View file

@ -1,3 +1,4 @@
import qrcode
import textwrap
from string import ascii_letters
@ -7,9 +8,16 @@ from labeler.domain.objects import Image, LabelDefinition
from labeler.interfaces import Renderer
DPI = 360.0
def points_to_pixels(point_size: float):
return int(point_size * (72 / DPI))
class PILRenderer(Renderer):
def __init__(self):
self.font_path = "/Library/Fonts/Arial.ttf"
self.font_path = "/Library/Fonts/Arial Unicode.ttf"
def render_label(self, label_definition: LabelDefinition) -> Image:
if label_definition.length is None:
@ -47,7 +55,7 @@ class PILRenderer(Renderer):
while text_height > 0:
font = ImageFont.truetype(
"/Library/Fonts/Arial.ttf",
"/Library/Fonts/Arial Unicode.ttf",
text_height,
)
if lines_to_print > 1:
@ -74,6 +82,42 @@ class PILRenderer(Renderer):
)
return im
def render_qrcode(self, label_definition: LabelDefinition) -> Image:
width = label_definition.pixel_width
length = label_definition.pixel_length
text = label_definition.text
font = self.__get_font_for_qr()
qr = qrcode.QRCode(box_size=7)
qr.add_data(f"https://hs3.pl/db/{text}")
qr.make(fit=True)
qr_img = qr.make_image()
print(width, length)
pil_image = PILImage.new("1", (width, length), 1)
draw = ImageDraw.Draw(pil_image)
pil_image.paste(qr_img)
draw.text(
(width / 2, 232),
"HS3-DB",
font=font,
fill=0,
anchor="mm",
align="center",
)
draw.text(
(20, 232 + 34),
f"ID: {text}",
font=font,
fill=0,
align="left",
)
return Image.from_pil(pil_image.transpose(PILImage.Transpose.ROTATE_90))
def __get_font_for_qr(self):
font_size = int(360 / 9)
return ImageFont.truetype("fonts/SourceCodePro-SemiBold.ttf", font_size)
def __get_font(self, text: str, max_width: int, max_length: int):
font_size = max_width
step = max_width // 2