fix: PDF-Endpoint setzt OpenAction auf gefundene Seite + Topbar weiter komprimiert
Vorher: /api/wahlprogramm-cite lieferte das gesamte PDF mit Highlight-Annot auf der gefundenen Seite, aber der Browser-PDF-Viewer landete auf Seite 1. Sieht User: 'PDF oeffnet, aber falsche Seite'. Jetzt: doc.xref_set_key(catalog, 'OpenAction', '[<page-ref> 0 R /Fit]') schreibt eine PDF-Open-Action ins Dokument-Catalog. Reader springt beim Oeffnen direkt auf target_page_idx, ohne dass Browser-Hash-Anker noetig sind. Plus: Topbar select/button padding-top/bottom 1px, links 0px (User: 'nur so hoch wie noetig'). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
489a1915f8
commit
88f9c7db6c
@ -797,8 +797,7 @@ def render_highlighted_page(programm_id: str, seite: int, query: str) -> Optiona
|
||||
target_page_idx = i
|
||||
break
|
||||
|
||||
# Volles PDF mit Highlight-Annotation. Der Browser öffnet das
|
||||
# vollständige Wahlprogramm; das Frontend hängt #page=N an die URL.
|
||||
# Volles PDF mit Highlight-Annotation.
|
||||
page = src[target_page_idx]
|
||||
if needle and rects:
|
||||
for rect in rects:
|
||||
@ -807,6 +806,16 @@ def render_highlighted_page(programm_id: str, seite: int, query: str) -> Optiona
|
||||
annot.set_colors(stroke=(1.0, 0.93, 0.0)) # gelb
|
||||
annot.update()
|
||||
|
||||
# PDF-OpenAction setzen, damit der Reader direkt auf der richtigen
|
||||
# Seite startet (statt Seite 1) — sonst sieht der User „PDF öffnet,
|
||||
# aber falsche Seite". /Fit = passt-zur-Größe.
|
||||
try:
|
||||
page_xref = page.xref
|
||||
catalog_xref = src.pdf_catalog()
|
||||
src.xref_set_key(catalog_xref, "OpenAction", f"[{page_xref} 0 R /Fit]")
|
||||
except Exception:
|
||||
logger.exception("render_highlighted_page: OpenAction-Setzen fehlgeschlagen")
|
||||
|
||||
highlighted = bool(needle and rects)
|
||||
try:
|
||||
return src.tobytes(), target_page_idx + 1, highlighted
|
||||
|
||||
@ -75,12 +75,13 @@ body.v2 :focus-visible {
|
||||
line-height: 1.2;
|
||||
color: var(--ecg-dark);
|
||||
}
|
||||
.v2-topbar > *,
|
||||
.v2-topbar button,
|
||||
.v2-topbar select {
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
.v2-topbar select,
|
||||
.v2-topbar button {
|
||||
padding-top: 1px;
|
||||
padding-bottom: 1px;
|
||||
margin: 0;
|
||||
}
|
||||
.v2-topbar a { padding: 0; }
|
||||
|
||||
.v2-topbar-spacer {
|
||||
flex: 1;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user