From 7b751b4d47ba975984b41c1ea67b3cea3303f47d Mon Sep 17 00:00:00 2001 From: Florian Heinz Date: Mon, 13 Apr 2026 14:47:25 +0200 Subject: [PATCH] Improve PDF export line breaks --- nouri/main.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/nouri/main.py b/nouri/main.py index 65df970..5221731 100644 --- a/nouri/main.py +++ b/nouri/main.py @@ -2033,7 +2033,7 @@ def fetch_plan_entries_for_range_export(start_date: date, end_date: date, *, mod def format_week_pdf_entry(entry: dict, *, mode: str) -> str: - label = entry["item_name"] + label = format_pdf_cell_label(entry["item_name"]) if mode == "household": if entry.get("target_name"): return f"{label} (Für {entry['target_name']})" @@ -2046,6 +2046,23 @@ def format_week_pdf_entry(entry: dict, *, mode: str) -> str: return label +def format_pdf_cell_label(label: str) -> str: + cleaned = " ".join((label or "").split()) + if not cleaned: + return "" + + if " - " in cleaned: + return cleaned.replace(" - ", "\n") + + if ", " in cleaned and len(cleaned) > 20: + return cleaned.replace(", ", ",\n") + + if "-" in cleaned: + return "-\n".join(part for part in cleaned.split("-") if part) + + return cleaned + + def build_week_pdf_rows(week_start: date, *, mode: str) -> tuple[list, list[list[str]]]: days = [week_start + timedelta(days=index) for index in range(7)] grouped_entries = fetch_plan_entries_for_range_export(week_start, week_start + timedelta(days=6), mode=mode) @@ -2098,6 +2115,7 @@ def build_week_plan_pdf(week_start: date, *, mode: str = "mine") -> bytes: pdf.cell(0, 6, f"KW {week_number:02d}", new_x="LMARGIN", new_y="NEXT") pdf.ln(3) pdf.set_text_color(20, 20, 20) + pdf.set_font("Helvetica", "", 10) headings = [" "] + [f"{format_weekday(day)}\n{day.strftime('%d.%m.%Y')}" for day in days] first_column_width = 34