Files
LabelPrintAgent/README.md
T

152 lines
3.6 KiB
Markdown

# LabelPrintAgent
Windows-Tray-Connector für den PaperlessManager.
Der Agent speichert keine Layouts, keine Nummernserver-Regeln und keine MySQL-Queue-Logik mehr. Das Backend entscheidet, welche Etiketten gedruckt werden, rendert bzw. liefert das fertige Etikett als Bild, und der Agent druckt dieses Bild über einen installierten Windows-Drucker.
## Ablauf
```text
LabelPrintAgent
-> fragt alle X Sekunden PaperlessManager-Backend
-> erhält einen druckfertigen Etikettenjob
-> lädt/liest das Etikettbild
-> druckt über Windows-Drucker
-> meldet Erfolg oder Fehler ans Backend zurück
```
Optional kann später statt Polling Server-Sent Events ergänzt werden. Der aktuelle Stand nutzt bewusst Polling, weil es robuster und einfacher zu betreiben ist.
## Backend-Vertrag
Die ausführliche API-Beschreibung liegt in [BACKEND_API.md](BACKEND_API.md).
Der Agent fragt standardmäßig:
```http
GET /api/label-print-agent/jobs/next?agentId={agentId}
Authorization: Bearer {apiToken}
```
Wenn nichts zu drucken ist:
```http
204 No Content
```
Wenn ein Etikett vorhanden ist:
```json
{
"jobId": "12345",
"labelImageBase64": "...",
"labelImageContentType": "image/png",
"labelWidthMm": 57,
"labelHeightMm": 32
}
```
Alternativ darf das Backend statt `labelImageBase64` eine URL liefern:
```json
{
"jobId": "12345",
"labelImageUrl": "/api/label-print-agent/jobs/12345/image",
"labelImageContentType": "image/png",
"labelWidthMm": 57,
"labelHeightMm": 32
}
```
Der Agent meldet Erfolg:
```http
POST /api/label-print-agent/jobs/{jobId}/printed
Authorization: Bearer {apiToken}
Content-Type: application/json
{
"agentId": "PC-BUERO",
"printerName": "DYMO LabelWriter 450"
}
```
Der Agent meldet Fehler:
```http
POST /api/label-print-agent/jobs/{jobId}/error
Authorization: Bearer {apiToken}
Content-Type: application/json
{
"agentId": "PC-BUERO",
"printerName": "DYMO LabelWriter 450",
"errorMessage": "Drucker ist nicht verfügbar."
}
```
## Lokale Einstellungen
Die Einstellungen liegen unter:
```text
C:\ProgramData\LabelPrintAgent\settings.json
```
Beispiel:
```json
{
"backend": {
"baseUrl": "https://paperlessmanager.local",
"agentId": "PC-BUERO",
"encryptedApiToken": "",
"nextJobPath": "/api/label-print-agent/jobs/next",
"reportSuccessPath": "/api/label-print-agent/jobs/{jobId}/printed",
"reportErrorPath": "/api/label-print-agent/jobs/{jobId}/error"
},
"printer": {
"printerName": "DYMO LabelWriter 450",
"labelWidthMm": 57,
"labelHeightMm": 32,
"dpi": 300
},
"worker": {
"enabled": true,
"pollIntervalSeconds": 5
}
}
```
Der API-Token wird lokal mit Windows DPAPI verschlüsselt gespeichert.
## Dymo-Druck
Der Dymo LabelWriter muss in Windows als normaler Drucker eingerichtet sein. Das Backend liefert ein fertiges Bild für das Etikett, typischerweise PNG in `57 x 32 mm`.
Wichtig:
- Der Agent verwendet `PrintDocument`.
- Es wird kein ZPL, EPL oder TSPL verwendet.
- Das Bild wird auf die komplette Papierfläche gedruckt.
- Der Dymo-Treiber sollte auf das passende Etikettenformat eingestellt sein.
## Bedienung
1. Anwendung starten.
2. Tray-Symbol öffnen.
3. Im Tab `Backend` BaseUrl, AgentId und optional API-Token eintragen.
4. Im Tab `Drucker` den Dymo LabelWriter auswählen.
5. Im Tab `Allgemein` Polling aktivieren und Intervall setzen.
6. Mit `Jetzt prüfen` kann sofort ein einzelner Backend-Poll ausgelöst werden.
## Nicht mehr im Agent
- keine Layout-JSON-Verwaltung
- keine lokalen LabelTemplates
- keine MySQL-Verbindung
- keine Nummernserver-URLs
- keine Nummernreservierung im Agent
Diese Verantwortung liegt vollständig im PaperlessManager-Backend.