Skip to content

Frank-Jettenbach/QR-Code-creator

Repository files navigation

QR-Label Generator v3.0

QR-Code Label Generator fuer Paperless-ngx ASN-Labels (Archive Serial Number). Generiert druckfertige PDF-Boegen mit QR-Codes und lesbarem ASN-Text - fuer jedes beliebige Etikettenformat und jeden Drucker.

Im Gegensatz zu anderen ASN-Generatoren, die nur ein festes Etikettenformat unterstuetzen (z.B. Avery L4731), ist dieses Projekt vollstaendig konfigurierbar: Label-Groessen, Raster, Raender, Drucker-Skalierung und Offset lassen sich frei definieren - ueber das Web-Frontend oder per YAML.

Screenshots

Labels erstellen Generierte PDFs
Labels erstellen PDFs
Setup-Profile Drucker-Profile
Profile Drucker

Features

  • Beliebige Etikettenformate - Topstick, Avery, Herma, Zweckform oder jedes andere Raster-Etikett
  • Jeder Drucker - Individuelle Kalibrierung mit automatischer Skalierungsberechnung
  • Web-Frontend mit Dark Mode UI und Sidebar-Navigation
  • Setup-Profile - Konfiguriere einmal, nutze immer wieder
  • Drucker-Kalibrierung - Kompensiert druckerspezifische Abweichungen automatisch
  • Offset-Korrektur - Feinabstimmung fuer exakte Positionierung auf dem Bogen
  • Per-Run Overrides - Drucker, Format, Startposition etc. pro Generierungslauf anpassen
  • ASN-Text unter QR-Code - Nummer auch ohne Scanner lesbar
  • Mehrere Drucker - Verschiedene Drucker-Profile mit eigener Kalibrierung
  • PDF-Verwaltung - Download und Loeschen direkt im Web-Frontend
  • CLI-Zugang - Auch per Kommandozeile nutzbar

Installation

Voraussetzungen

  • Python 3.8+
  • Apache 2.4 mit PHP 8.x (fuer Web-Frontend)

Setup

# 1. Dateien kopieren
sudo mkdir -p /opt/qr_codes
sudo cp -r * /opt/qr_codes/
cd /opt/qr_codes

# 2. Python-Umgebung
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 3. Apache konfigurieren
sudo cp /opt/qr_codes/docs/qrcodes.conf /etc/apache2/conf-available/
sudo a2enconf qrcodes
sudo systemctl reload apache2

# 4. Berechtigungen
sudo chown -R www-data:www-data /opt/qr_codes/config /opt/qr_codes/output

Das Web-Frontend ist dann erreichbar unter http://<server-ip>/qr_codes/.

Web-Frontend

Das Frontend hat vier Bereiche:

Labels erstellen

  • Setup-Profil auswaehlen
  • Info-Panel zeigt aktuelle Einstellungen (Drucker, Format, Skalierung, Offset)
  • Optionale Overrides pro Generierungslauf (anderer Drucker, Format, Startposition, ASN-Prefix)
  • Start/End ASN-Nummer angeben
  • PDF wird generiert und unter "PDFs" gespeichert

PDFs

  • Liste aller generierten PDFs mit Dateigroesse und Datum
  • Download und Loeschen

Profile

  • Setup-Profile anlegen und bearbeiten
  • Jedes Profil verbindet Drucker + Label-Format + Workflow-Einstellungen
  • Workflow: Startposition, ASN-Format, Rahmen ein/aus

Drucker

  • Drucker-Profile mit Kalibrierungsdaten anlegen
  • Raender, Skalierung (gemessene Breite/Hoehe), Offset
  • Profile koennen geloescht werden

CLI-Verwendung

# Mit Setup-Profil
qr-labels --setup standard --start 1 --end 65 --output labels.pdf

# Test-Blatt
qr-labels --setup test --test-sheet

# Setups auflisten
qr-labels --list-setups

Projektstruktur

qr_codes/
├── bin/
│   └── qr_label_generator.py    # CLI-Hauptprogramm
├── config/
│   ├── setup_profiles.yaml       # Setup-Profile
│   ├── printer_profiles.yaml     # Drucker-Profile
│   └── label_formats.yaml        # Label-Formate (Topstick 8697)
├── lib/
│   ├── qr_generator.py           # QR-Code Erzeugung
│   ├── setup_manager.py          # Profil-Verwaltung
│   └── pdf_builder.py            # PDF-Erzeugung mit Skalierung
├── web/
│   ├── index.php                 # Web-Frontend
│   ├── download.php              # PDF-Download Handler
│   └── assets/
│       ├── style.css             # Dark Mode CSS
│       └── app.js                # Frontend JavaScript
├── output/                       # Generierte PDFs
├── docs/screenshots/             # Screenshots
├── requirements.txt
└── docker-compose.yml            # Paperless-ngx Setup

Eigene Etikettenformate

Das Projekt wird mit Topstick 8697 als Beispiel ausgeliefert, unterstuetzt aber jedes beliebige Raster-Etikett. Neue Formate werden einfach in config/label_formats.yaml definiert:

mein-etikett:
  name: "Mein Etikett"
  page_width: 210              # Seitenbreite in mm (A4 = 210)
  page_height: 297             # Seitenhoehe in mm (A4 = 297)
  label_width: 38              # Etikettenbreite in mm
  label_height: 21.2           # Etikettenhoehe in mm
  columns: 5                   # Anzahl Spalten
  rows: 13                     # Anzahl Zeilen
  margin_left: 5               # Seitenrand links in mm
  margin_top: 5                # Seitenrand oben in mm
  gap_horizontal: 0            # Abstand zwischen Spalten in mm
  gap_vertical: 0              # Abstand zwischen Zeilen in mm
  qr_size_percent: 75          # QR-Code Groesse relativ zum Etikett

Beispiele kompatibler Etiketten

Format Groesse Raster Labels/Seite
Topstick 8697 38.1 x 21.2mm 5 x 13 65
Avery L4731 25.4 x 10mm 7 x 27 189
Avery L4732 35.6 x 16.9mm 5 x 16 80
Herma 4210 38.1 x 21.2mm 5 x 13 65
Zweckform 3666 38 x 21.2mm 5 x 13 65
Herma 10001 25.4 x 10mm 7 x 27 189

Jedes Etikett mit regelmaessigem Raster laesst sich verwenden - einfach die Masse vom Datenblatt des Herstellers uebernehmen.

Drucker-Anpassung

Jeder Drucker hat eigene Abweichungen bei Skalierung und Positionierung. Der Generator kompensiert das automatisch:

Drucker-Profil anlegen

Fuer jeden Drucker wird ein eigenes Profil mit Kalibrierungsdaten angelegt:

  • Raender - Nicht bedruckbarer Bereich des Druckers (links, rechts, oben, unten)
  • Skalierung - Gemessene Breite/Hoehe eines Testdrucks vs. Soll-Werte
  • Offset - Feinverschiebung in X/Y-Richtung fuer millimetergenaue Positionierung

Kalibrierung in 3 Schritten

  1. Test-Blatt drucken - Mit aktivierter Rahmen-Option (zeigt Label-Grenzen)
  2. Messen - Tatsaechliche Breite und Hoehe des Drucks mit Lineal messen
  3. Werte eintragen - Im Drucker-Profil (Web-Frontend oder YAML)

Das System berechnet automatisch die Skalierungsfaktoren. Beispiel:

Soll-Breite: 190mm    Gemessen: 182mm  -->  Scale X = 1.044 (+4.4%)
Soll-Hoehe:  275.6mm  Gemessen: 265mm  -->  Scale Y = 1.040 (+4.0%)

So passen die Labels auf jedem Drucker exakt auf die Etiketten - egal ob Laser, Tintenstrahl oder Buero-MFP.

Paperless-ngx Integration

Die generierten QR-Codes enthalten den ASN-String (z.B. ASN00001). Paperless-ngx erkennt diese beim Scannen automatisch und weist die Archivnummer zu.

Docker Compose fuer Paperless-ngx ist enthalten:

docker-compose up -d

Support

Wenn dir dieses Projekt gefaellt, kannst du mich gerne unterstuetzen:

Buy Me A Coffee

Lizenz

MIT

About

Python Script, um QR COdes zu erzeugen

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors