Compare commits

..

No commits in common. "main" and "v0.1.2" have entirely different histories.
main ... v0.1.2

7 changed files with 163 additions and 798 deletions

View file

@ -1,38 +1,5 @@
# Changelog # Changelog
## 0.1.6 - 2026-02-08
### Changed
- Mehrere Layout-Profile auswählbar (`L4731`, `L7160`) in GUI und CLI.
- Profilverwaltung in der GUI hinzugefügt (Profil speichern/laden/löschen) ohne manuelles JSON-Editieren.
- Standard-Profilname ist jetzt `Brother MFC-L2710DW` (alte `default`-Einträge werden automatisch migriert).
- Profile können jetzt per Button als JSON exportiert werden.
- Optionaler CLI-Modus für PDF-Erzeugung ohne GUI (`--cli ...`) inkl. Layoutwahl und Seiten-/Labelmodus.
## 0.1.5 - 2026-02-08
### Changed
- Startposition auf angebrochenem Bogen ist jetzt einstellbar (`1..189`), inklusive korrekter Seitenberechnung und Druckplatzierung.
- Option nach PDF-Erzeugung eingeführt: `none`, `file` oder `folder` direkt öffnen.
- Ordner/Datei-Öffnen ist plattformstabil über `subprocess` umgesetzt (ohne `os.system`), auch bei Sonderzeichen im Pfad.
- Im Modus `A4 Blätter` wird jetzt exakt die gewählte Blattanzahl erzeugt (erstes Blatt ab Startposition auffüllen, kein zusätzlich angebrochenes Folgeblatt).
## 0.1.4 - 2026-02-08
### Changed
- Vorschau für `CODE128` rendert jetzt als echter Barcode statt Platzhalter.
- Vorschau-Layout wurde neu ausbalanciert: QR kleiner, Text deutlich größer/lesbarer, kein Überlappen von CODE128 und Text.
- Fensterbreite und Vorschaufläche wurden vergrößert, damit alle UI-Elemente und der Vorschau-Text vollständig sichtbar bleiben.
- Statusmeldungen in der UI sind vereinheitlicht (`[INFO]`, `[OK]`, `[WARN]`, `[ERROR]`) und farblich klar getrennt.
- Layout verhält sich auf kleineren Displays robuster (reduzierte `minsize`, bessere Spalten-Gewichtung, umbrochene Hilfstexte/Statuszeilen).
## 0.1.3 - 2026-02-08
### Changed
- Kalibrierungs-Eingaben sind jetzt als sichtbare Delta-Werte ausgelegt (Default `0.0` in der UI), während intern weiterhin die Basiswerte genutzt werden.
- Persistierte Kalibrierung speichert den Modus explizit als `calibration_mode = "delta"`; bestehende Legacy-Configs ohne Marker werden kompatibel übernommen.
- GUI-Titel zeigt jetzt die aktuelle App-Version an.
### Fixed
- Doppelten `_build_ui()`-Aufruf entfernt, damit beim Start keine doppelten Widgets oder Event-Bindings entstehen.
- Fehler beim Laden/Speichern der `config.json` werden in der Oberfläche sichtbar angezeigt statt still ignoriert.
## 0.1.2 - 2026-02-03 ## 0.1.2 - 2026-02-03
### Added ### Added
- Persistente Einstellungen (config.json) im User-Config-Verzeichnis (XDG_CONFIG_HOME / ~/.config, macOS Application Support, Windows APPDATA). - Persistente Einstellungen (config.json) im User-Config-Verzeichnis (XDG_CONFIG_HOME / ~/.config, macOS Application Support, Windows APPDATA).
@ -40,4 +7,4 @@
- Button "Config löschen": löscht config.json und setzt Standard-Preset-Werte zurück. - Button "Config löschen": löscht config.json und setzt Standard-Preset-Werte zurück.
### Fixed ### Fixed
- Stabileres Laden/Speichern (fehlerhafte config bricht GUI nicht ab). - Stabileres Laden/Speichern (fehlerhafte config bricht GUI nicht ab).

205
README.md
View file

@ -1,205 +1,120 @@
# paperless-ngx ASN Label Generator (GUI + CLI) # paperless-ngx ASN Label Generator (GUI) Avery L4731 / L4731REV
Kleines Tool (Tkinter + CLI), das **ASN-Labels als PDF** erzeugt wahlweise **QR** oder **Code128** für mehrere **A4-Etikettenlayouts**. GUI-Tool (Tkinter), das ASN-Labels als PDF erzeugt QR oder Code128 inkl. Kalibrierung (Offset & Pitch-Drift) für saubere Ausdrucke auf echten Etikettenbögen.
✅ Ideal, um in paperless-ngx sauber mit ASN-Barcodes zu arbeiten
✅ Mit **Kalibrierung** (Offset X/Y + Pitch-Drift) für exakte Druckausrichtung
**Persistente Einstellungen**: Drucker-Kalibrierwerte werden automatisch gespeichert
**Mehrere Layouts** (z. B. `L4731`, `L7160`)
**Drucker-Profile** speichern/laden (ohne JSON-Edit)
**CLI-Modus** für Automatisierung
**Reset-Button**: “Config löschen” setzt alles auf Standardwerte zurück
> Hinweis: Inoffizielles Tool, nicht affiliated mit paperless-ngx. > Hinweis: Inoffizielles Tool, nicht affiliated mit paperless-ngx.
<p align="center">
<img src="assets/screenshot.png" alt="Screenshot der Anwendung" width="900">
</p>
--- ---
## Voraussetzungen ## Voraussetzungen
- **Python 3.10+** - **Python 3.10+**
- Optional: **Git** (nur wenn Installation direkt von GitHub erfolgt) - **Git** (nur nötig, wenn du direkt von GitHub installieren willst)
- **Linux**: `python3-tk` (Tkinter GUI Paket) - Auf **Linux** ggf. zusätzlich: **Tkinter** (siehe unten)
--- ---
## Installation & Start ## Installation & Start
> **Wichtig (Linux):** Viele Distributionen blockieren systemweite `pip3 install ...` Installationen (PEP 668). ### Windows (empfohlen)
> Nutze dort am besten **pipx** oder eine **virtuelle Umgebung**.
### Windows #### 1) Python installieren
- Lade Python von der offiziellen Seite.
- **Wichtig:** Beim Installer unbedingt **„Add Python to PATH“** aktivieren.
#### Empfohlen: pipx (sauber, isoliert) Prüfen:
1) Python installieren (bei python.org) und **„Add Python to PATH“** aktivieren.
2) pipx installieren:
```bash ```bash
python -m pip install --upgrade pip python --version
python -m pip install pipx pip --version
python -m pipx ensurepath
``` ```
Terminal neu öffnen.
3) Installieren & starten: #### 2) Installation direkt von GitHub
```bash ```bash
pipx install git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git pip install git+https://github.com/DEINNAME/paperless-asn-label-generator
paperless-asn-labels paperless-asn-labels
``` ```
#### Alternative: Virtualenv > Wenn `pip` meldet, dass `git` fehlt: Git für Windows installieren, dann nochmal versuchen.
```bash
python -m venv .venv
.venv\Scripts\activate
pip install git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git
paperless-asn-labels
```
--- ---
### macOS ### macOS
#### Empfohlen: pipx #### 1) Python prüfen/ installieren
1) (Optional) Python via Homebrew: Prüfen:
```bash
python3 --version
pip3 --version
```
Falls Python fehlt oder zu alt ist, am einfachsten über Homebrew:
```bash ```bash
brew install python brew install python
``` ```
2) pipx installieren: #### 2) Installation direkt von GitHub
```bash ```bash
python3 -m pip install --upgrade pip pip3 install git+https://github.com/DEINNAME/paperless-asn-label-generator
python3 -m pip install pipx
python3 -m pipx ensurepath
```
Terminal neu öffnen.
3) Installieren & starten:
```bash
pipx install git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git
paperless-asn-labels paperless-asn-labels
``` ```
> Falls `paperless-asn-labels` nicht gefunden wird, starte einmal neu das Terminal oder nutze:
```bash
python3 -m paperless_asn_label_generator
```
--- ---
### Linux (Debian/Ubuntu/Pop!_OS) ### Linux
#### 1) Tkinter installieren (GUI) #### 1) Python + pip prüfen
```bash ```bash
sudo apt update python3 --version
sudo apt install -y python3-tk pip3 --version
``` ```
#### 2) Empfohlen: pipx installieren Falls nötig (Debian/Ubuntu):
```bash ```bash
sudo apt install -y pipx sudo apt-get update
pipx ensurepath sudo apt-get install -y python3 python3-pip
``` ```
Terminal neu öffnen.
#### 3) Installieren & starten (GitHub) #### 2) Tkinter installieren (wichtig für GUI)
Debian/Ubuntu:
```bash ```bash
pipx install git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git sudo apt-get install -y python3-tk
```
Fedora:
```bash
sudo dnf install -y python3-tkinter
```
Arch:
```bash
sudo pacman -S tk
```
#### 3) Installation direkt von GitHub
```bash
pip3 install git+https://github.com/DEINNAME/paperless-asn-label-generator
paperless-asn-labels paperless-asn-labels
``` ```
#### Alternative: Virtuelle Umgebung (wenn du pipx nicht willst)
```bash
python3 -m venv ~/.venvs/paperless-asn
source ~/.venvs/paperless-asn/bin/activate
pip install --upgrade pip
pip install git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git
paperless-asn-labels
```
---
## Update
### Wenn mit pipx installiert
```bash
pipx upgrade paperless-asn-labels
```
Falls das Paket unter pipx anders heißt:
```bash
pipx upgrade-all
```
### Wenn in einer venv installiert
```bash
pip install -U --force-reinstall git+https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git
```
--- ---
## Nutzung ## Nutzung
- Start-Nummer wählen (z.B. 1 oder 190) - Start-Nummer wählen (z.B. 1 oder 190)
- Layout wählen (z. B. `L4731` oder `L7160`)
- Prefix setzen (muss zu paperless-ngx passen) - Prefix setzen (muss zu paperless-ngx passen)
- Führende Nullen einstellen (z.B. 7 → `ASN0000001`) - Führende Nullen einstellen (z.B. 7 → `ASN0000001`)
- Menge als **Labels** oder **A4-Blätter** - Menge als **Labels** oder **A4-Blätter**
- Optional: **Startposition auf Bogen** setzen (bei angebrochenem Blatt)
- Code-Typ: **QR** oder **CODE128** - Code-Typ: **QR** oder **CODE128**
- Optional: **Nach PDF öffnen** (`none`, `file`, `folder`) - Optional: Rahmen aktivieren (hilft beim Kalibrieren)
- Optional: **Rahmen aktivieren** (hilft beim Kalibrieren)
- Optional: Profil speichern/laden/löschen (z. B. je Drucker)
- „PDF erzeugen…“ → Datei speichern - „PDF erzeugen…“ → Datei speichern
--- ---
## Profile (Drucker-Profile)
Profile speichern deine aktuellen Einstellungen als Set (Layout, Kalibrierung, Startposition, Code-Typ usw.).
- Standardprofil: **`Brother MFC-L2710DW`**
- Buttons in der GUI:
- **Profil speichern**: aktuelle Einstellungen unter neuem Namen speichern
- **Profil laden**: gewähltes Profil aktivieren
- **Profil löschen**: Profil entfernen (Standardprofil ist geschützt)
- **Profile exportieren**: alle gespeicherten Profile als JSON-Datei exportieren
---
## CLI-Modus (Automatisierung)
Du kannst PDFs ohne GUI erzeugen:
```bash
paperless-asn-labels --cli --output /tmp/asn.pdf --layout L4731 --count 30 --prefix ASN --zeros 7 --kind QR
```
Seitenmodus (exakte Blattanzahl):
```bash
paperless-asn-labels --cli --output /tmp/asn_pages.pdf --layout L7160 --pages 2 --start-position 5 --kind CODE128
```
Alle Optionen:
```bash
paperless-asn-labels --help
```
Hinweis: Wenn CLI-Optionen gesetzt sind (z. B. `--output`, `--count`, `--pages`), läuft das Tool automatisch im CLI-Modus.
---
## Gespeicherte Einstellungen (Config)
Deine Kalibrierwerte & UI-Einstellungen werden automatisch gespeichert (persistente Config).
Der Speicherort ist:
- **Linux:** `~/.config/paperless-ngx-asn-labels/config.json` (oder `$XDG_CONFIG_HOME/...`)
- **macOS:** `~/Library/Application Support/paperless-ngx-asn-labels/config.json`
- **Windows:** `%APPDATA%\paperless-ngx-asn-labels\config.json`
Im Programm gibt es außerdem den Button **„Config löschen“**, der die Datei entfernt und auf Standardwerte zurücksetzt.
---
## Prefix in paperless-ngx ## Prefix in paperless-ngx
Der Prefix muss zu deiner paperless-ngx Einstellung passen: Der Prefix muss zu deiner paperless-ngx Einstellung passen:
@ -226,11 +141,15 @@ Wenn die Position nicht exakt passt:
## Entwicklung (Repo klonen & lokal starten) ## Entwicklung (Repo klonen & lokal starten)
```bash ```bash
git clone https://github.com/MrLetsPlay4Fun/paperless-asn-label-generator.git git clone https://github.com/DEINNAME/paperless-asn-label-generator
cd paperless-asn-label-generator cd paperless-asn-label-generator
python3 -m venv .venv # Virtuelle Umgebung
source .venv/bin/activate python -m venv .venv
# Windows:
# .venv\Scripts\activate
# macOS/Linux:
# source .venv/bin/activate
pip install -e . pip install -e .
paperless-asn-labels paperless-asn-labels

Binary file not shown.

Before

Width:  |  Height:  |  Size: 88 KiB

View file

@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project] [project]
name = "paperless-asn-label-generator" name = "paperless-asn-label-generator"
version = "0.1.6" version = "0.1.2"
description = "GUI tool to generate ASN barcode/QR labels for paperless-ngx (A4/Avery L4731) with calibration." description = "GUI tool to generate ASN barcode/QR labels for paperless-ngx (A4/Avery L4731) with calibration."
readme = "README.md" readme = "README.md"
requires-python = ">=3.10" requires-python = ">=3.10"
@ -31,3 +31,4 @@ package-dir = {"" = "src"}
[tool.setuptools.packages.find] [tool.setuptools.packages.find]
where = ["src"] where = ["src"]

View file

@ -1,2 +1,2 @@
__all__ = ["__version__"] __all__ = ["__version__"]
__version__ = "0.1.6" __version__ = "0.1.2"

View file

@ -1,4 +1,4 @@
from .app import main from .app import main
if __name__ == "__main__": if __name__ == "__main__":
raise SystemExit(main()) main()

File diff suppressed because it is too large Load diff