QZ Tray thermal printing: PDF workflow, barcode fixes, margin adjustments, and layout improvements

This commit is contained in:
2025-09-27 23:54:18 +03:00
parent 1582e9363f
commit ea6364eb7b
9 changed files with 2681 additions and 818 deletions

View File

@@ -40,12 +40,12 @@ class LabelPDFGenerator:
# Position content in label - optimized for paper saving
if self.paper_saving_mode:
# Start content from top of label with minimal top margin
self.content_x = mm_to_points(2) # 2mm from left edge (was 3mm)
self.content_x = mm_to_points(4) # 4mm from left edge (was 3mm, moved 1mm right to ensure left border prints)
self.content_y = mm_to_points(20) # 20mm from bottom (more space at top)
self.top_margin = mm_to_points(5) # 5mm top margin instead of larger bottom margin
else:
# Original positioning
self.content_x = mm_to_points(3) # 3mm from left edge
self.content_x = mm_to_points(5) # 5mm from left edge (was 4mm, moved 1mm right to ensure left border prints)
self.content_y = mm_to_points(15) # 15mm from bottom (space for bottom barcode)
self.top_margin = mm_to_points(10)
@@ -85,8 +85,8 @@ class LabelPDFGenerator:
if printer_optimized:
self._optimize_for_label_printer(c)
# Create sequential label number: CP00000711-001, CP00000711-002, etc.
sequential_number = f"{prod_order}-{i:03d}"
# Create sequential label number: CP00000711/001, CP00000711/002, etc.
sequential_number = f"{prod_order}/{i:03d}"
# Draw single label
self._draw_label(c, order_data, sequential_number, i, quantity)
@@ -95,6 +95,36 @@ class LabelPDFGenerator:
buffer.seek(0)
return buffer
def generate_single_label_pdf(self, order_data, piece_number, total_pieces, printer_optimized=True):
"""
Generate PDF with single label for specific piece number
Creates sequential label: CP00000711-001, CP00000711-002, etc.
Optimized for thermal label printers via QZ Tray
"""
buffer = io.BytesIO()
# Create canvas with label dimensions
c = canvas.Canvas(buffer, pagesize=(self.label_width, self.label_height))
# Optimize PDF for label printers
if printer_optimized:
self._optimize_for_label_printer(c)
# Extract base production order number for sequential numbering
prod_order = order_data.get('comanda_productie', 'CP00000000')
# Create sequential label number with specific piece number
sequential_number = f"{prod_order}/{piece_number:03d}"
print(f"DEBUG: Generating label {sequential_number} (piece {piece_number} of {total_pieces})")
# Draw single label with specific piece number
self._draw_label(c, order_data, sequential_number, piece_number, total_pieces)
c.save()
buffer.seek(0)
return buffer
def _optimize_for_label_printer(self, canvas):
"""
Optimize PDF settings for thermal label printers
@@ -317,13 +347,13 @@ class LabelPDFGenerator:
try:
# Create vertical barcode code - CORRECTED to match HTML preview
# Use same format as customer order: com_achiz_client + "-" + nr_linie_com_client
# Use same format as customer order: com_achiz_client + "/" + nr_linie_com_client
com_achiz_client = str(order_data.get('com_achiz_client', ''))
nr_linie = str(order_data.get('nr_linie_com_client', ''))
if com_achiz_client and nr_linie:
vertical_code = f"{com_achiz_client}-{nr_linie}"
vertical_code = f"{com_achiz_client}/{nr_linie}"
else:
vertical_code = "000000-00"
vertical_code = "000000/00"
# Create a vertical barcode using Code128
v_barcode = code128.Code128(vertical_code,