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(domain, start_num, count): # URL-Formatierung sicherstellen domain = domain.strip().rstrip('/') if not domain.startswith("http"): domain = f"https://{domain}" 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 # 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}" # Der Direkt-Such-Link für die Homebox-Weboberfläche qr_url = f"{domain}/items?q={code_str}" # 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) qr_size = 50 * mm qr_widget = qr.QrCodeWidget(qr_url) 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) # Leserlicher Text darunter 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 mit Homebox-Links wurde erstellt: {filename}") if __name__ == "__main__": print("--- Homebox XXL Label Generierung (mit URL) ---") domain_input = "homebox.prinz-pilaw.de".strip() try: start_input = input("Startnummer (Standard 1): ").strip() start = int(start_input) if start_input else 1 anzahl_input = input("Anzahl Etiketten (Standard 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(domain_input, start, anzahl)