Was macht A5-Münzcheckliste PDF-Generator?
Wann verwenden
- Der Benutzer möchte eine druckbare Münzsammlungs-Checkliste
- Der Benutzer erwähnt A5, Filofax, Binder oder Planerseiten für Münzen
- Der Benutzer möchte einen Numista-Export mit einer Serien-Masterliste abgleichen
- Der Benutzer arbeitet an einer zuvor generierten Münzcheckliste PDF
Seiteneinrichtung
from reportlab.lib.pagesizes import A5
PAGE_W, PAGE_H = A5 # 148mm x 210mm (419,53 x 595,28 Punkte)
LEFT_M = 18*mm # BREITER — lässt Platz für 6-Loch-Filofax-Stanzung
RIGHT_M = 6*mm
TOP_M = 9*mm
BOT_M = 8*mm
USABLE_W = PAGE_W - LEFT_M - RIGHT_M # ~124mm
6-Loch-Stanzhilfen
Auf jeder Seite zeichnen. Standard-Lochpositionen für Filofax A5, gemessen von der Oberkante:
HOLE_POSITIONS_MM = [19, 51, 70, 140, 159, 191]
for h in HOLE_POSITIONS_MM:
y = PAGE_H - h*mm
c.setStrokeColor(HexColor("#CCCCCC"))
c.setLineWidth(0.25)
c.circle(4.5*mm, y, 2.2*mm, stroke=1, fill=0)
Schriftart
Carlito verwenden (metrikkompatibel zu Calibri, kostenlos unter der SIL Open Font License). Unter Linux befindet es sich normalerweise unter:
/usr/share/fonts/truetype/crosextra/Carlito-Regular.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Bold.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Italic.ttf
Unter Windows oder macOS Carlito von Google Fonts herunterladen und stattdessen auf diese Dateien verweisen.
Alle drei Varianten registrieren. Niemals auf Helvetica ausweichen: Das Layout unten ist auf Calibri-ähnliche Metriken abgestimmt.
Typografische Regeln (HARTE EINSCHRÄNKUNGEN)
| Element | Schriftart | Größe | Hinweise |
|---|---|---|---|
| Titelseite-Überschrift | Carlito-Bold | 20pt | Zentriert in schwarzem Balken |
| Titelseite-Untertitel | Carlito-Bold | 16pt | Unter der Überschrift |
| Abschnittsüberschriften | Carlito-Bold | 8.5-9pt | Weiß auf schwarzem Balken |
| Spaltenüberschriften | Carlito-Bold | 7.5pt | Grau, oberhalb der Trennlinie |
| Fließtext — ALLE Spalten | Carlito / Carlito-Bold | 11pt | Einheitlich für Name, Zeitraum, Jetzt |
| Detailzeile gesammelt | Carlito-Italic | 8.5pt | Grau, unterhalb der gesammelten Zeile |
| Fußzeile | Carlito | 6pt | Seitenzahl + Checklistenname |
| Nennwert-Spalte | Carlito | 9pt | Rechtsbündig, abgekürzt (5Y, 10Y, 1J) |
Wichtig: Name-, Zeitraum- und Jetzt-Spalten auf der GLEICHEN Schriftgröße (11pt) halten. Unterschiedliche Größen wirken auf einer gedruckten Seite unprofessionell.
Zeilen-Layout
ROW_H = 16-18 # Punkte — großzügiger Abstand zwischen den Zeilen
SEC_H = 17 # Höhe der Abschnittsüberschrift
COL_H = 13 # Höhe der Spaltenüberschriften
COLLECTED_EXTRA = 11 # Zusätzliche Höhe für die Detailzeile bei gesammelten Zeilen
- Eine dezente Trennlinie (0,2pt, #DDDDDD) am unteren Rand jeder Zeile zeichnen
- Zeilenhintergründe abwechseln: jede gerade Zeile erhält #EBEBEB-Füllung
- Gesammelte Zeilen: fetter Text + Häkchen in der Checkbox
Spaltenpositionen (ab LEFT_M)
COL_CK = 0 # Checkbox
COL_YR = 11 # Jahr
COL_NM = 36 # Münzname (primäre Spalte)
# Rechte Spalten — nach rechts schieben, um Überlappung mit Zeitraumtext zu vermeiden
COL_ERA = 84*mm # Epochenmarker (B/P/N) oder Nennwert
COL_NOW = 89*mm # Aktueller Status / Sekundärinformation
Wichtige Lektion: Zeitraum-/Datumsstrings wie "300 BCE-1279" sind bei 11pt etwa 28mm breit. Der Epochenmarker und die NOW-Spalte MÜSSEN nach 84mm beginnen, um Überlappungen zu vermeiden. Dies war eine Korrektur über mehrere Iterationen.
Graustufen-Design (VERPFLICHTEND)
Für einen Graustufen-Laserdrucker ausgelegt. Niemals auf Farbe zur Bedeutungserklärung vertrauen.
| Visuelles Element | Graustufen-Ansatz |
|---|---|
| Hervorhebung gesammelter Zeilen | Diagonale Schraffur (keine Farbfüllung) |
| Abschnittsüberschriften | Weißer Text auf schwarzem Balken |
| Abwechselnde Zeilen | #EBEBEB vs. weiß |
| Epochenindikatoren | Textbuchstaben (B/P/N), keine farbigen Punkte |
| Gesammelte Münzstätten | Fett vs. normale Schriftstärke (nicht Farbe) |
| Checkboxen | Häkchen mit Linien gezeichnet, nicht Unicode |
Schraffur-Implementierung:
def schraffur(c, x, y, w, h):
c.saveState()
p = c.beginPath(); p.rect(x, y, w, h)
c.clipPath(p, stroke=0)
c.setStrokeColor(HexColor("#CCCCCC"))
c.setLineWidth(0.35)
for i in range(-int(h), int(w+h), 5):
c.line(x+i, y, x+i+h, y+h)
c.restoreState()
Häkchen (nicht X, nicht Unicode):
c.setStrokeColor(BLK); c.setLineWidth(1.2)
cx = LEFT_M + COL_CK + 1; cy = ty - 1
c.line(cx+2, cy+4, cx+4, cy+1.5)
c.line(cx+4, cy+1.5, cx+8, cy+7.5)
Seitenfluss (Durchgehend)
Jedem Abschnitt niemals eine eigene Seite geben. Abschnitte fließen durchgehend. Kleine Abschnitte (3-5 Elemente) müssen auf derselben Seite wie der vorherige Abschnittsende untergebracht werden.
# Waisen verhindern: Abschnittsüberschrift benötigt mindestens Überschrift + Spaltenüberschrift + 1 Zeile
if item_type == 'section_header':
needed = h + COL_H + 2 + ROW_H + 4
if y - needed < BOT_M:
y = new_page(c)
Titelseiten-Struktur
- Schwarzer Balken mit Überschrift (20pt) und Untertitel (16pt)
- Untertitelzeile unterhalb des Balkens (12pt, grau)
- Horizontale Linie
- Statistikbox (#EBEBEB-Füllung): "Gesamt: X Habe: Y Brauche: Z" (14pt fett)
- Abdeckungsprozentsatz (11pt, grau)
- Sammlername (14pt fett) + Numista-Handle (11pt)
- Legendenabschnitt (falls zutreffend)
- Serienzusammenfassung mit rechtsbündigen Zählern
Nicht einfügen
- Separate leere Notizenseite (Papierverbrauch)
- Farbabhängige Elemente
- Unicode-Häkchen oder Sonderzeichen (Probleme mit Schrifteinbettung)
- Schriftgrößen unter 7pt für irgendein Element
- Mehr als 1 Seite Leerraum an irgendeiner Stelle des Dokuments
Ausgabe
PDF dort speichern, wo der Benutzer es öffnen kann (auf claude.ai: /mnt/user-data/outputs/ und present_files aufrufen; in Claude Code: das Arbeitsverzeichnis). Seiten mit pdf2image für eine visuelle Qualitätskontrolle rendern, bevor sie ausgeliefert werden.