Générateur de Liste de Contrôle PDF A5 pour Pièces de Monnaie
Quand l'utiliser
- L'utilisateur souhaite une liste de contrôle de collection de pièces imprimable
- L'utilisateur mentionne A5, Filofax, classeur ou pages d'agenda pour pièces
- L'utilisateur veut recouper un export Numista avec une liste maîtresse de séries
- L'utilisateur itère sur un PDF de liste de contrôle de pièces déjà généré
Configuration de Page
from reportlab.lib.pagesizes import A5
PAGE_W, PAGE_H = A5 # 148mm x 210mm (419.53 x 595.28 pts)
LEFT_M = 18*mm # PLUS LARGE — dégage la perforation Filofax 6 trous
RIGHT_M = 6*mm
TOP_M = 9*mm
BOT_M = 8*mm
USABLE_W = PAGE_W - LEFT_M - RIGHT_M # ~124mm
Guides de Perforation 6 Trous
Dessiner sur chaque page. Positions standard des trous Filofax A5 depuis le bord supérieur :
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)
Police
Utiliser Carlito (compatible métrique avec Calibri, gratuite sous licence SIL Open Font License). Sous Linux, se trouve généralement à :
/usr/share/fonts/truetype/crosextra/Carlito-Regular.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Bold.ttf
/usr/share/fonts/truetype/crosextra/Carlito-Italic.ttf
Sous Windows ou macOS, télécharger Carlito depuis Google Fonts et pointer vers ces fichiers.
Enregistrer les trois variantes. Ne jamais basculer vers Helvetica : la disposition ci-dessous est calibrée pour les métriques de style Calibri.
Règles Typographiques (CONTRAINTES FERMES)
| Élément | Police | Taille | Notes |
|---|---|---|---|
| Titre de couverture | Carlito-Gras | 20pt | Centré dans une bannière noire |
| Sous-titre de couverture | Carlito-Gras | 16pt | Sous le titre |
| En-têtes de section | Carlito-Gras | 8.5-9pt | Blanc sur barre noire |
| En-têtes de colonnes | Carlito-Gras | 7.5pt | Gris, au-dessus de la ligne de séparation |
| Texte du corps — TOUTES les colonnes | Carlito / Carlito-Gras | 11pt | Uniforme sur Nom, Période, Maintenant |
| Ligne de détail collectionné | Carlito-Italique | 8.5pt | Gris, en dessous de la ligne collectionnée |
| Pied de page | Carlito | 6pt | Numéro de page + nom de la liste |
| Colonne valeur faciale | Carlito | 9pt | Aligné à droite, abrégé (5Y, 10Y, 1J) |
Critique : Garder les colonnes Nom, Période et Maintenant à la MÊME taille de police (11pt). Des tailles mélangées donnent un aspect peu professionnel sur une page imprimée.
Disposition des Lignes
ROW_H = 16-18 # pts — espacement généreux entre les lignes
SEC_H = 17 # hauteur de la barre d'en-tête de section
COL_H = 13 # hauteur de l'en-tête de colonne
COLLECTED_EXTRA = 11 # hauteur supplémentaire pour la ligne de détail sur les lignes collectionnées
- Dessiner une ligne de séparation subtile (0.2pt, #DDDDDD) en bas de chaque ligne
- Alterner les fonds de ligne : chaque ligne paire reçoit un remplissage #EBEBEB
- Lignes collectionnées : texte en gras + coche dans la case à cocher
Positions des Colonnes (depuis LEFT_M)
COL_CK = 0 # case à cocher
COL_YR = 11 # année
COL_NM = 36 # nom de la pièce (colonne principale)
# Colonnes de droite — pousser vers la droite pour éviter le chevauchement avec le texte de période
COL_ERA = 84*mm # marqueur d'époque (B/P/N) ou valeur faciale
COL_NOW = 89*mm # état actuel / information secondaire
Leçon clé : Les chaînes de date/période comme "300 BCE-1279" font ~28mm de large en 11pt. Le marqueur d'époque et la colonne MAINENANT doivent COMMENCER après 84mm pour éviter le chevauchement. Ceci a été corrigé après plusieurs itérations.
Conception en Niveaux de Gris (OBLIGATOIRE)
Conçu pour une imprimante laser en niveaux de gris. Ne jamais se fier à la couleur pour le sens.
| Élément visuel | Approche en niveaux de gris |
|---|---|
| Surbrillance ligne collectionnée | Hachures diagonales (pas de remplissage couleur) |
| En-têtes de section | Texte blanc sur barre noire unie |
| Lignes alternées | #EBEBEB vs blanc |
| Indicateurs d'époque | Lettres textuelles (B/P/N) pas de points de couleur |
| Marques d'atelier collectionnées | Gras vs poids normal (pas de couleur) |
| Cases à cocher | Coche dessinée avec des lignes, pas d'Unicode |
Implémentation des hachures :
def hatch(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()
Coche (pas de X, pas d'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)
Flux de Pages (Continu)
Ne jamais donner sa propre page à chaque section. Les sections s'enchaînent en continu. Les petites sections (3-5 éléments) doivent tenir sur la même page que la queue de la section précédente.
# Empêcher les orphelins : l'en-tête de section a besoin d'en-tête + en-tête_colonne + 1 ligne minimum
if item_type == 'section_header':
needed = h + COL_H + 2 + ROW_H + 4
if y - needed < BOT_M:
y = new_page(c)
Structure de la Page de Couverture
- Bannière noire avec titre (20pt) et sous-titre (16pt)
- Ligne de sous-titre sous la bannière (12pt, gris)
- Règle horizontale
- Boîte de statistiques (fond #EBEBEB) : "Total : X Possédé : Y Besoin : Z" (14pt gras)
- Pourcentage de couverture (11pt, gris)
- Nom du collectionneur (14pt gras) + pseudo Numista (11pt)
- Section légende (si applicable)
- Résumé de série avec compteurs alignés à droite
À NE PAS INCLURE
- Page de notes vierge séparée (gaspillage de papier)
- Éléments dépendants de la couleur
- Coches ou caractères spéciaux Unicode (problèmes de couverture de police)
- Tailles de police inférieures à 7pt pour un élément quelconque
- Plus d'une page d'espace blanc n'importe où dans le document
Sortie
Enregistrer le PDF à un emplacement accessible par l'utilisateur (sur claude.ai : /mnt/user-data/outputs/ et appeler present_files ; dans Claude Code : le dossier de travail). Rendre les pages avec pdf2image pour un contrôle qualité visuel avant livraison.