import sys from reportlab.lib.pagesizes import A4 from reportlab.lib.units import mm from reportlab.pdfgen import canvas from reportlab.graphics.barcode import qr from reportlab.graphics.shapes import Drawing def generate_xxl_qr_pdf(start_num, count): end_num = start_num + count - 1 filename = f"Homebox_QR_XXL_HB{start_num:03d}_bis_HB{end_num:03d}.pdf" c = canvas.Canvas(filename, pagesize=A4) page_width, page_height = A4 # Layout: 2 Spalten x 4 Zeilen = 8 Labels pro A4-Seite cols, rows = 2, 4 col_width = page_width / cols row_height = page_height / rows current_num = start_num for i in range(count): page_idx = i % 8 if i > 0 and page_idx == 0: c.showPage() col = page_idx % cols row = rows - 1 - (page_idx // cols) x_center = col * col_width + (col_width / 2) y_center = row * row_height + (row_height / 2) code_str = f"HB-{current_num:03d}" # Gestrichelte Schnittlinie c.setDash(2, 2) c.setStrokeColorRGB(0.6, 0.6, 0.6) c.rect(col * col_width + 3*mm, row * row_height + 3*mm, col_width - 6*mm, row_height - 6*mm) # QR-Code (50mm x 50mm XXL) qr_size = 50 * mm qr_widget = qr.QrCodeWidget(code_str) bounds = qr_widget.getBounds() w = bounds[2] - bounds[0] h = bounds[3] - bounds[1] d = Drawing(qr_size, qr_size, transform=[qr_size/w, 0, 0, qr_size/h, 0, 0]) d.add(qr_widget) render_x = x_center - (qr_size / 2) render_y = y_center - (qr_size / 2) + 2*mm d.drawOn(c, render_x, render_y) # Große Beschriftung darunter (Courier-Bold 16pt) c.setFont("Courier-Bold", 16) c.setFillColorRGB(0, 0, 0) c.drawCentredString(x_center, render_y - 7*mm, code_str) current_num += 1 c.save() print(f"\n✅ PDF wurde erfolgreich erstellt: {filename}") if __name__ == "__main__": # Fall 1: Parameter wurden direkt im Befehl übergeben (z.B. python generate_qr.py 17 16) if len(sys.argv) >= 3: try: start = int(sys.argv[1]) anzahl = int(sys.argv[2]) except ValueError: print("❌ Fehler: Bitte gültige Zahlen angeben.") sys.exit(1) # Fall 2: Keine Parameter -> Interaktive Eingabe auffordern else: print("--- Homebox XXL Label Generierung ---") try: start_input = input("Startnummer eingeben (z. B. 17): ").strip() start = int(start_input) if start_input else 1 anzahl_input = input("Anzahl Etiketten eingeben (z. B. 16): ").strip() anzahl = int(anzahl_input) if anzahl_input else 16 except ValueError: print("❌ Fehler: Bitte gültige Zahlen eingeben.") sys.exit(1) generate_xxl_qr_pdf(start, anzahl)