55 lines
1.8 KiB
Python
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
|