Scorecards: PNG-Render-Pfad ergänzen (Chromium oder pypdfium2) #180

Closed
opened 2026-05-07 07:58:50 +02:00 by tobias · 1 comment
Owner

Stand: Scorecard-Endpoint liefert PDF (/api/assessment/scorecard.pdf).
PNG-Endpoint hängt: Container hat kein Chromium/Playwright installiert.

Optionen

a) Chromium ins dev-Image bauen (~250 MB Image-Größe-Plus)

  • apt-get install chromium plus playwright install chromium
  • Danach klappt der Playwright-Render-Pfad analog zu OG-Card.

b) pdf→png ohne Browser via pypdfium2 oder pdf2image+poppler

  • kleiner Footprint (~10 MB)
  • WeasyPrint rendert das HTML zu PDF, PDF→PNG-Konvertierung danach.
  • Qualität evtl. nicht so scharf wie Browser-Screenshot bei Web-Fonts.

c) Externer Render-Service (Cloud-Funktion / dedizierter Container)

  • höchste Trennung, aber Komplexität.

Empfehlung: (b) — pypdfium2 ist Pure-Python, in Container ohne
weitere apt-Packages installierbar. Folge-Schritt: Endpoint
/api/assessment/scorecard.png?... → WeasyPrint→PDF→pypdfium2→PNG-Bytes.

Out of scope für diesen Issue: Live-Editing der Scorecard
(z.B. eigener Text, Farbschema-Wechsel). Erstmal nur statisch.

Refs: #179, ADR 0011 (PM-Generator).

**Stand:** Scorecard-Endpoint liefert PDF (`/api/assessment/scorecard.pdf`). PNG-Endpoint hängt: Container hat kein Chromium/Playwright installiert. ## Optionen a) **Chromium ins dev-Image bauen** (~250 MB Image-Größe-Plus) - `apt-get install chromium` plus `playwright install chromium` - Danach klappt der Playwright-Render-Pfad analog zu OG-Card. b) **pdf→png ohne Browser** via `pypdfium2` oder `pdf2image+poppler` - kleiner Footprint (~10 MB) - WeasyPrint rendert das HTML zu PDF, PDF→PNG-Konvertierung danach. - Qualität evtl. nicht so scharf wie Browser-Screenshot bei Web-Fonts. c) **Externer Render-Service** (Cloud-Funktion / dedizierter Container) - höchste Trennung, aber Komplexität. **Empfehlung:** (b) — `pypdfium2` ist Pure-Python, in Container ohne weitere apt-Packages installierbar. Folge-Schritt: Endpoint `/api/assessment/scorecard.png?...` → WeasyPrint→PDF→pypdfium2→PNG-Bytes. **Out of scope** für diesen Issue: Live-Editing der Scorecard (z.B. eigener Text, Farbschema-Wechsel). Erstmal nur statisch. Refs: #179, ADR 0011 (PM-Generator).
Author
Owner

Erledigt mit commits 52ff36a + d8999f8:

  • Endpoint `GET /api/assessment/scorecard.png?drucksache=&bundesland=&format=og|square&scale=2.0`
  • Pipeline: WeasyPrint (HTML→PDF) → PyMuPDF (PDF→Pixmap) → PNG-Bytes
  • Keine zusätzliche Dependency: PyMuPDF war schon in requirements.txt
  • Output: 1200×630 (og) / 1080×1080 (square) bei scale=1, doppelte Auflösung bei scale=2 (Default)
  • Gemeinsamer Helper `_render_scorecard_pdf()` für .pdf und .png

Verifiziert: beide Formate liefern korrekte Pixel-Dimensionen + saubere PNG.

Erledigt mit commits **52ff36a** + **d8999f8**: - Endpoint \`GET /api/assessment/scorecard.png?drucksache=&bundesland=&format=og|square&scale=2.0\` - Pipeline: WeasyPrint (HTML→PDF) → PyMuPDF (PDF→Pixmap) → PNG-Bytes - Keine zusätzliche Dependency: PyMuPDF war schon in requirements.txt - Output: 1200×630 (og) / 1080×1080 (square) bei scale=1, doppelte Auflösung bei scale=2 (Default) - Gemeinsamer Helper \`_render_scorecard_pdf()\` für .pdf und .png Verifiziert: beide Formate liefern korrekte Pixel-Dimensionen + saubere PNG.
Sign in to join this conversation.
No description provided.