# LabelPrintAgent Windows-Tray-Anwendung für den späteren Etikettendruck aus JSON-Layouts. ## Etappe 1 Die erste Etappe enthält das lauffähige Grundgerüst: - .NET-9-Windows-Forms-Projekt - Tray-Icon mit Kontextmenü - Einstellungsdialog mit Tabs: - Allgemein - Datenbank - Drucker - Layout - Fehlerhafte Druckaufträge - lokale Konfiguration unter `C:\ProgramData\LabelPrintAgent\settings.json` - automatische Anlage von `C:\ProgramData\LabelPrintAgent` - Layout-Ordner unter `C:\ProgramData\LabelPrintAgent\layouts` - Log-Ordner unter `C:\ProgramData\LabelPrintAgent\logs` - verschlüsselte Passwortspeicherung per Windows DPAPI - Auflistung installierter Windows-Drucker - Beispiel-Layout `dymo_57x32_standard` - Layout-JSON laden und speichern ## Etappe 2 Die zweite Etappe ergänzt das Layoutmodell und die JSON-Validierung: - typisierte Layoutklassen für Text, Linie, Rechteck und QR-Code - JSON-Deserialisierung anhand der Element-Eigenschaft `type` - Validierung des Layoutkopfs und aller Elemente - Sammlung aller Validierungsfehler statt Abbruch beim ersten Fehler - Anzeige der Validierungsfehler im Layout-Tab - Speichern nur bei gültigem Layout - formatierte Speicherung des Layout-JSON ## Etappe 3 Die dritte Etappe ergänzt die Rendering-Engine und die Vorschau im Layout-Tab: - Bitmap-Rendering mit 300 dpi - Text, Linien, Rechtecke und QR-Codes - Platzhalterersetzung wie `{titel}`, `{datum:dd.MM.yyyy}` und `{menge:0.00}` - automatische Beispiel-Daten für Vorschauen - AutoShrink für Textfelder - Warnungen, wenn Platzhalter fehlen oder Text nicht vollständig passt Eine Vorschau erzeugst du im Tab `Layout` mit dem Button `Vorschau`. Zuerst wird das JSON validiert, dann wird das Etikett mit folgenden Beispiel-Daten gerendert: ```json { "titel": "Beleg privat", "beschreibung": "Dokument 2026-000123", "nummer": "2026-000123", "datum": "2026-05-07", "menge": 42.5, "qr": "bjoernprivat 0000123" } ``` ## Etappe 4 Die vierte Etappe ergänzt den Testdruck über installierte Windows-Drucker: - Druckerliste mit Standarddrucker-Erkennung - Prüfung, ob der konfigurierte Drucker noch vorhanden ist - Testdruck im Tab `Drucker` - Testdruck im Tab `Layout` direkt aus dem aktuell bearbeiteten JSON - Ausgabe des gerenderten Bitmaps über `System.Drawing.Printing.PrintDocument` - benutzerdefiniertes Papierformat aus dem Layout, beim Beispiel `57 x 32 mm` - keine zusätzlichen Druckränder; der Layout-Rand steckt bereits im gerenderten Bitmap Für den Dymo LabelWriter muss der Drucker in Windows bereits als normaler Windows-Drucker eingerichtet sein. Stelle im Dymo-Treiber möglichst ebenfalls das Etikettenformat `57 x 32 mm` bzw. das passende Dymo-Label ein. Die App sendet ein fertiges Bild an den Windows-Drucker; es wird kein ZPL, EPL oder TSPL verwendet. Einen Testdruck machst du so: 1. Im Tab `Drucker` den Dymo LabelWriter auswählen. 2. `Speichern` klicken. 3. `Testdruck` klicken, um das ausgewählte Beispiel-Layout zu drucken. 4. Alternativ im Tab `Layout` das JSON bearbeiten und dort `Testdruck` klicken. Typische Fehler: - Falscher Drucker gewählt: im Tab `Drucker` den Dymo LabelWriter auswählen. - Falsches Etikettenformat im Treiber: im Windows-Druckertreiber `57 x 32 mm` bzw. das passende Label einstellen. - Ausdruck zu groß oder zu klein: prüfen, ob Treiber-Skalierung deaktiviert ist und das Layout `57 x 32 mm` verwendet. - Etikett wird gedreht: im Dymo-Treiber das physische Label `57 x 32 mm` wählen. Die App setzt das Papierformat bereits quer als `57 x 32 mm` und sendet keine zusätzliche Windows-Landscape-Rotation. Noch nicht enthalten sind MySQL-Worker und automatische Datenbankabfrage. ## Startanleitung 1. `LabelPrintAgent.sln` in Visual Studio oder Rider öffnen. 2. Auf einem Windows-Rechner bauen und starten. 3. Das Tray-Symbol anklicken oder per Kontextmenü `Einstellungen` öffnen. 4. Im Tab `Drucker` einen installierten Windows-Drucker auswählen und speichern. 5. Im Tab `Layout` das Beispiel-Layout prüfen, bearbeiten und speichern. 6. Im Tab `Layout` oder `Drucker` einen Testdruck auslösen. Beim ersten Start werden die Programmdatenordner und das Beispiel-Layout automatisch angelegt. ## Spätere Etappen Die SQL-Datei für die spätere Druckwarteschlange liegt bereits unter: ```text sql/create_label_print_queue.sql ```