Bücherlabels konfigurieren¶
Passe die Etiketten für deine Bücher an – Bogenformat, Layout und Inhalt.
Übersicht¶
Bücherlabels werden als PDF generiert und auf A4-Etikettenpapier gedruckt. Die Konfiguration erfolgt über:
- Bogen-Konfigurationen (JSON-Dateien) — beschreiben das physische Etikettenpapier
- Vorlagen (JSON-Dateien) — bestimmen, welche Daten auf dem Etikett erscheinen
- Visueller Editor — Vorlagen direkt im Browser bearbeiten mit Live-Vorschau
- API — PDF-Erzeugung auch ohne UI, z.B. per Skript
Alle Konfigurationsdateien liegen in database/custom/labels/ und werden beim Docker-Setup automatisch als Volume gemountet.
database/custom/labels/
├── sheets/ # Etikettenbögen (Papierformate)
│ ├── zweckform-3474.json
│ ├── avery-l7160.json
│ └── ...
└── templates/ # Vorlagen (Felderzuordnung)
├── default.json
└── ...
Schnellstart¶
- Gehe zu Berichte → Buchetiketten drucken
- Wähle eine Vorlage und einen Etikettenbogen aus
- Filtere die Bücher (neueste X, nach Thema, alle, oder bestimmte IDs)
- Optional: Startposition festlegen, falls der Bogen schon teilweise bedruckt ist
- Klicke PDF herunterladen
Fertig! Das PDF ist druckbereit.
Mitgelieferte Etikettenbögen¶
Diese Bögen werden mit OpenLibry ausgeliefert:
| Datei | Produkt | Etikettenmaß | Etiketten/Blatt | Raster |
|---|---|---|---|---|
zweckform-3474 |
Avery Zweckform 3474 | 70 × 37 mm | 24 | 3 × 8 |
zweckform-3475 |
Avery Zweckform 3475 | 70 × 36 mm | 24 | 3 × 8 |
zweckform-3490 |
Avery Zweckform 3490 | 70 × 36 mm | 24 | 3 × 8 |
zweckform-3422 |
Avery Zweckform 3422 | 70 × 35 mm | 24 | 3 × 8 |
zweckform-3420 |
Avery Zweckform 3420 | 70 × 16.9 mm | 51 | 3 × 17 |
zweckform-3659 |
Avery Zweckform 3659 | 97 × 42.3 mm | 12 | 2 × 6 |
avery-l7160 |
Avery L7160 | 63.5 × 38.1 mm | 21 | 3 × 7 |
avery-l7163 |
Avery L7163 | 99.1 × 38.1 mm | 14 | 2 × 7 |
herma-4360 |
HERMA 4360 | 70 × 37 mm | 24 | 3 × 8 |
Eigenen Etikettenbogen hinzufügen¶
Erstelle eine neue JSON-Datei in database/custom/labels/sheets/. Alle Maße sind in Millimetern.
{
"id": "mein-bogen",
"name": "Mein Etikettenbogen",
"description": "Beispiel 105 × 48 mm, 12 Stück/Blatt",
"pageSize": { "width": 210, "height": 297 },
"unit": "mm",
"label": { "width": 105, "height": 48 },
"grid": { "columns": 2, "rows": 6 },
"margins": { "top": 8.5, "left": 0, "right": 0, "bottom": 8.5 },
"gap": { "horizontal": 0, "vertical": 0 },
"labelsPerSheet": 12
}
Maße prüfen
Die Summe aus Rändern, Etiketten und Abständen muss die Seitengröße ergeben:
- Horizontal:
margins.left+ Spalten ×label.width+ (Spalten − 1) ×gap.horizontal+margins.right= 210 mm - Vertikal:
margins.top+ Reihen ×label.height+ (Reihen − 1) ×gap.vertical+margins.bottom= 297 mm
Etikett-Layout¶
Jedes Etikett hat vier Felder in einer L-Form:
┌──────────┬───────────────────────┐
│ │ Zeile 1 │
│Buchrücken├───────────────────────┤
│ (gedreht │ Zeile 2 │
│ 90° CCW)├───────────────────────┤
│ │ Zeile 3 │
└──────────┴───────────────────────┘
- Buchrücken — vertikales Feld links, Text um 90° gedreht (für den Buchrücken)
- Zeile 1–3 — drei horizontale Felder rechts (für die Buchrückseite)
Verfügbare Feldinhalte¶
| Inhalt | Beschreibung |
|---|---|
| Titel | Buchtitel |
| Untertitel | Untertitel des Buchs |
| Autor | Name des Autors |
| Buchnummer | Interne ID in der Bibliothek |
| Schulname | Wert von SCHOOL_NAME aus der .env-Datei |
| Themen (max. 3) | Die ersten drei Themen des Buchs, kommagetrennt |
| Barcode | Code128-Barcode der Buchnummer |
| Leer | Feld bleibt frei |
Vorlagen bearbeiten¶
Im Browser (empfohlen)¶
- Gehe zu Berichte → Etiketten-Vorlage bearbeiten
- Lade eine vorhandene Vorlage oder klicke Neu
- Wähle einen Etikettenbogen aus
- Ordne jedem der vier Felder einen Inhalt zu
- Stelle Schriftgrößen und Ausrichtung ein
- Passe die Buchrücken-Breite mit dem Schieberegler an
- Die Vorschau rechts zeigt das Ergebnis als echtes PDF
- Klicke Vorlage speichern
Die Vorschau wird direkt vom Server als PDF erzeugt — was du siehst, ist exakt das, was gedruckt wird.
Als JSON-Datei¶
Vorlagen liegen in database/custom/labels/templates/:
{
"id": "default",
"name": "Standard Buchetikett",
"sheetConfigId": "zweckform-3474",
"spineWidthPercent": 25,
"padding": 2,
"fields": {
"spine": { "content": "id", "fontSizeMax": 14, "align": "center" },
"horizontal1": { "content": "title", "fontSizeMax": 11, "align": "left" },
"horizontal2": { "content": "author", "fontSizeMax": 9, "align": "left" },
"horizontal3": { "content": "barcode", "fontSizeMax": 0, "align": "center" }
}
}
| Feld | Beschreibung |
|---|---|
spineWidthPercent |
Breite des Buchrücken-Felds in Prozent der Etikettenbreite (10–50) |
padding |
Innenabstand in mm |
fontSizeMax |
Maximale Schriftgröße in pt — Text wird automatisch verkleinert, wenn er nicht passt. Bei Barcode-Feldern auf 0 setzen. |
align |
Ausrichtung: left, center oder right |
content |
Einer der Werte: title, subtitle, author, id, school, topics, barcode, none |
Angefangene Bögen nutzen¶
Wenn ein Etikettenbogen schon teilweise bedruckt ist:
- Gehe zu Berichte → Buchetiketten drucken
- Wähle unter Position auf dem Bogen den Modus:
- Ab Position — klicke auf die Stelle, ab der gedruckt werden soll. Alle Felder davor bleiben leer.
- Einzelne Felder — klicke einzelne freie Felder an, die bedruckt werden sollen.
- Erzeuge das PDF
So verschwendest du keine Etikettenbögen!
API¶
Die Label-Erzeugung funktioniert auch ohne Browser — z.B. für Skripte oder Automatisierung.
PDF erzeugen¶
curl -X POST http://localhost:3000/api/labels/generate \
-H "Content-Type: application/json" \
-d '{
"sheetConfigId": "zweckform-3474",
"templateId": "default",
"bookFilter": { "type": "latest", "count": 24 }
}' \
-o etiketten.pdf
Bücher auswählen über bookFilter:
| Filter | Beispiel |
|---|---|
| Neueste N | { "type": "latest", "count": 50 } |
| Nach Schlagwort | { "type": "topic", "value": "Abenteuer" } |
| Alle Bücher | { "type": "all" } |
| Bestimmte IDs | { "type": "ids", "ids": [1, 5, 42] } |
Alternativ können Buchdaten direkt übergeben werden (ohne Datenbankzugriff):
curl -X POST http://localhost:3000/api/labels/generate \
-H "Content-Type: application/json" \
-d '{
"sheetConfigId": "zweckform-3474",
"templateId": "default",
"books": [
{ "id": "42", "title": "Der kleine Prinz", "author": "Saint-Exupéry", "topics": "Abenteuer; Freundschaft" }
]
}' \
-o etiketten.pdf
Startposition setzen (halb bedruckter Bogen):
{
"sheetConfigId": "zweckform-3474",
"templateId": "default",
"startPosition": { "row": 5, "col": 2 },
"bookFilter": { "type": "latest", "count": 10 }
}
Einzelne Positionen angeben (verstreute freie Etiketten):
{
"sheetConfigId": "zweckform-3474",
"templateId": "default",
"positions": [
{ "row": 2, "col": 1 },
{ "row": 2, "col": 3 },
{ "row": 5, "col": 2 }
],
"bookFilter": { "type": "ids", "ids": [1, 2, 3] }
}
Weitere Endpunkte¶
| Endpunkt | Beschreibung |
|---|---|
GET /api/labels/sheets |
Alle verfügbaren Etikettenbögen auflisten |
GET /api/labels/sheets?id=zweckform-3474 |
Einzelnen Bogen abrufen |
GET /api/labels/templates |
Alle Vorlagen auflisten |
GET /api/labels/templates?id=default |
Einzelne Vorlage abrufen |
POST /api/labels/templates |
Vorlage speichern (Body = JSON der Vorlage) |
Konfigurationsverzeichnis¶
Standardmäßig: ./database/custom/labels/. Kann über die .env-Datei geändert werden:
In Docker wird database/custom/ als Volume gemountet — eigene Bögen und Vorlagen bleiben bei Updates erhalten.
Ausrichten und Troubleshooting¶
Falls die Labels nicht perfekt auf dem Etikettenpapier sitzen:
Testdruck auf Normalpapier¶
- Drucke auf normales Papier
- Halte es gegen das Licht mit dem Etikettenbogen dahinter
- Prüfe die Ausrichtung
Ränder anpassen¶
Bearbeite die margins-Werte in der JSON-Datei des Bogens. Typische Anpassungen sind ±0.5 mm.
- Labels zu weit links →
margins.lefterhöhen - Labels zu weit oben →
margins.toperhöhen
Drucker-Einstellungen prüfen¶
- Drucke mit 100% Skalierung (keine Anpassung!)
- Deaktiviere „An Seite anpassen"
- Nutze randlosen Druck wenn möglich
Schulname auf dem Etikett¶
Um den Schulnamen auf dem Etikett anzuzeigen, setze in der .env-Datei:
Dann weise in der Vorlage einem Feld den Inhalt „Schulname" zu.
Migration von der alten Konfiguration¶
Falls du bisher die BOOKLABEL_*-Umgebungsvariablen verwendet hast: Die alte API unter /api/report/booklabels ist nicht mehr verfügbar. Du kannst aber auf das neue System umsteigen:
- Erstelle über den Editor eine Vorlage, die deinem bisherigen Layout entspricht
- Wähle den passenden Etikettenbogen aus der Liste (oder erstelle einen eigenen)
- Teste über Berichte → Buchetiketten drucken
- Wenn alles passt, können die alten
BOOKLABEL_*-Variablen entfernt werden
Nächste Schritte¶
- Reports & Labels – Labels drucken
- Benutzerausweise – Ausweise für Bibliotheksnutzer konfigurieren