From 273d45ea36a7464604ae311a83b65335d12cce3a Mon Sep 17 00:00:00 2001 From: Dotty Dotter Date: Sat, 25 Apr 2026 22:09:46 +0200 Subject: [PATCH] =?UTF-8?q?fix:=20PDF-Link=20mit=20#page=3DN-Hash=20?= =?UTF-8?q?=E2=80=94=20Browser-PDF-Viewer=20landet=20jetzt=20direkt=20auf?= =?UTF-8?q?=20der=20richtigen=20Seite?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Browser-PDF-Reader (Chrome, Firefox) ignorieren das von /OpenAction-Eintrag im PDF-Catalog (#88f9c7d) komplett. Der zuverlaessige Weg: URL-Hash-Anker '#page=N'. Drei Stellen angepasst: - redline_utils.build_pdf_href: haengt #page={seite} an die URL - embeddings._build_zitat_url (rebind): analog - v2/components/quote_card.html: bei alten DB-Eintraegen ohne Hash wird er on-the-fly aus dem 'seite='-Query-Param erzeugt Co-Authored-By: Claude Opus 4.7 (1M context) --- app/embeddings.py | 2 +- app/redline_utils.py | 4 +++- app/templates/v2/components/quote_card.html | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/embeddings.py b/app/embeddings.py index ea798c7..04baa93 100644 --- a/app/embeddings.py +++ b/app/embeddings.py @@ -714,7 +714,7 @@ def _chunk_pdf_url(chunk: dict) -> Optional[str]: # die URL bleibt bounded (sonst würden 500-Zeichen-Snippets in jeder # Zitat-URL stehen und das HTML-Report-JSON aufblähen). q = urllib.parse.quote_plus(text[:200]) - return f"/api/wahlprogramm-cite?pid={prog_id}&seite={seite}&q={q}" + return f"/api/wahlprogramm-cite?pid={prog_id}&seite={seite}&q={q}#page={seite}" if seite: return f"/static/referenzen/{pdf}#page={seite}" diff --git a/app/redline_utils.py b/app/redline_utils.py index f3f5951..118335e 100644 --- a/app/redline_utils.py +++ b/app/redline_utils.py @@ -85,4 +85,6 @@ def build_pdf_href(zitat: dict, bundesland: str = "") -> str: text = zitat.get("text", "") q = " ".join(text.split()[:5]) - return f"/api/wahlprogramm-cite?pid={pid}&seite={seite}&q={quote_plus(q)}" + # #page=N als URL-Hash, damit der Browser-PDF-Viewer direkt zur Seite + # springt — OpenAction im PDF wird von Chrome/Firefox ignoriert. + return f"/api/wahlprogramm-cite?pid={pid}&seite={seite}&q={quote_plus(q)}#page={seite}" diff --git a/app/templates/v2/components/quote_card.html b/app/templates/v2/components/quote_card.html index 1adc1e5..84cd5ab 100644 --- a/app/templates/v2/components/quote_card.html +++ b/app/templates/v2/components/quote_card.html @@ -27,7 +27,9 @@ {% endif %} {{ source }} {% if pdf_href %} - · PDF öffnen + {# Falls pdf_href noch keinen #page=…-Anker hat, aus seite= im Query-String einen anhaengen — Browser-PDF-Viewer ignorieren PDF-OpenAction, der Hash-Anker funktioniert zuverlaessig. #} + {% set _href = pdf_href if '#page=' in pdf_href else (pdf_href ~ ('#page=' ~ (pdf_href.split('seite=')[1].split('&')[0] if 'seite=' in pdf_href else '1'))) %} + · PDF öffnen {% endif %}