Files
2026-08-11 15:41:55 +02:00

55 lines
1.8 KiB
Python

"""Options de mise en forme du PDF exporté, réglables depuis la fenêtre
d'aperçu (voir preview_window.py) et appliquées par pdf_builder.build_pdf.
On s'appuie uniquement sur les 14 polices standard PDF (toujours
disponibles sans embarquer de fichier de police), ce qui évite toute
dépendance supplémentaire.
"""
from __future__ import annotations
from dataclasses import dataclass
# Libellé affiché dans l'UI -> nom de police reportlab (base, non-gras).
FONT_CHOICES: dict[str, str] = {
"Helvetica (sans-serif)": "Helvetica",
"Times (serif)": "Times-Roman",
"Courier (monospace)": "Courier",
}
# Variante grasse de chaque police de base, utilisée pour les titres.
BOLD_FONT_VARIANTS: dict[str, str] = {
"Helvetica": "Helvetica-Bold",
"Times-Roman": "Times-Bold",
"Courier": "Courier-Bold",
}
# Libellé affiché dans l'UI -> clé interne du format de page.
PAGE_SIZE_CHOICES: dict[str, str] = {
"A4": "A4",
"Letter (US)": "LETTER",
}
def bold_variant(font_name: str) -> str:
"""Retourne la variante grasse d'une police de base, avec repli sûr."""
return BOLD_FONT_VARIANTS.get(font_name, font_name)
@dataclass
class PdfStyle:
"""Ensemble des réglages de mise en forme appliqués à l'export PDF."""
book_title: str = "Extraits capturés"
page_size: str = "A4" # une clé de PAGE_SIZE_CHOICES
font_name: str = "Helvetica" # une valeur de FONT_CHOICES, appliquée à tout le document
body_font_size: int = 11
heading_font_size: int = 14
heading_color: str = "#1a1a2e"
text_color: str = "#000000"
background_color: str = "#ffffff"
margin_cm: float = 2.0
show_meta: bool = True # afficher l'URL + la date sous chaque titre
page_break_between_clips: bool = True
include_toc: bool = True # sommaire avec liens cliquables vers chaque section