Pacchetto Windows: report PDF su Windows offline (WeasyPrint DLL, Kaleido con Edge o Chrome) #78

Closed
opened 2026-10-17 07:03:07 +00:00 by Adriano · 2 comments
Owner

ANALISI (passo 1, Opus 5.5) — piano B del pacchetto Windows (issue madre e contratto: piano C, stessa serie)
COSA: i report PDF (src/backend/services/report_service.py: Jinja2 + Plotly/Kaleido 1.2.0 + WeasyPrint 68.1) devono funzionare su Windows offline, dentro il pacchetto.
PERCHÉ: WeasyPrint su Windows vuole le DLL di Pango/GTK; Kaleido 1.x non porta più Chromium e cerca un browser installato. Allo stand non c'è Internet.
FILE E MODIFICHE:

  1. packaging/windows/pdf/prendi-gtk.ps1 -Destinazione (nuovo): scarica pacchetti pinnati con sha256 (es. MSYS2 mingw-w64-ucrt-x86_64-pango e dipendenze, oppure un runtime GTK3 con licenza LGPL), estrae solo le DLL necessarie in . Idempotente, fallisce chiaro su sha256 diverso.
  2. report_service.py, solo il minimo: Kaleido usa il browser di BROWSER_PATH (Edge o Chrome, offline; se choreographer non legge BROWSER_PATH da sé, passarlo esplicitamente). Nessun cambio di layout dei report.
  3. packaging/windows/pdf/LEGGIMI.md (nuovo): come funziona, licenze delle DLL, variabili WEASYPRINT_DLL_DIRECTORIES e BROWSER_PATH, flag Nuitka e dati da includere (weasyprint css/html5, pyphen, fonttools, tinycss2, kaleido/choreographer, plotly) perché il piano C li metta in build.ps1.
    TEST:
  • src/backend/tests/test_report_windows.py (nuovo, skip fuori da Windows o senza DLL): con WEASYPRINT_DLL_DIRECTORIES sulla cartella di prendi-gtk.ps1 e BROWSER_PATH su Edge, il servizio produce un PDF vero di un report con carta di controllo e istogramma (byte iniziali %PDF, almeno una pagina, grafico presente).
  • Prova a mano: proxy finto (HTTP_PROXY e HTTPS_PROXY=http://127.0.0.1:9) durante la generazione, il PDF esce lo stesso.
  • Suite dei report esistente verde: uv run --python 3.13 --extra server --extra dev pytest src/backend/tests -q -k report.
    NON TOCCARE: pyproject.toml, uv.lock, packaging/windows/avvio.py, build.ps1, .iss, workflow, src/backend/config.py, database.py, src/frontend/, scripts/, vendor/. Se serve una dipendenza nuova, scriverla nel rapporto.
ANALISI (passo 1, Opus 5.5) — piano B del pacchetto Windows (issue madre e contratto: piano C, stessa serie) COSA: i report PDF (src/backend/services/report_service.py: Jinja2 + Plotly/Kaleido 1.2.0 + WeasyPrint 68.1) devono funzionare su Windows offline, dentro il pacchetto. PERCHÉ: WeasyPrint su Windows vuole le DLL di Pango/GTK; Kaleido 1.x non porta più Chromium e cerca un browser installato. Allo stand non c'è Internet. FILE E MODIFICHE: 1. packaging/windows/pdf/prendi-gtk.ps1 -Destinazione <cartella> (nuovo): scarica pacchetti pinnati con sha256 (es. MSYS2 mingw-w64-ucrt-x86_64-pango e dipendenze, oppure un runtime GTK3 con licenza LGPL), estrae solo le DLL necessarie in <cartella>. Idempotente, fallisce chiaro su sha256 diverso. 2. report_service.py, solo il minimo: Kaleido usa il browser di BROWSER_PATH (Edge o Chrome, offline; se choreographer non legge BROWSER_PATH da sé, passarlo esplicitamente). Nessun cambio di layout dei report. 3. packaging/windows/pdf/LEGGIMI.md (nuovo): come funziona, licenze delle DLL, variabili WEASYPRINT_DLL_DIRECTORIES e BROWSER_PATH, flag Nuitka e dati da includere (weasyprint css/html5, pyphen, fonttools, tinycss2, kaleido/choreographer, plotly) perché il piano C li metta in build.ps1. TEST: - src/backend/tests/test_report_windows.py (nuovo, skip fuori da Windows o senza DLL): con WEASYPRINT_DLL_DIRECTORIES sulla cartella di prendi-gtk.ps1 e BROWSER_PATH su Edge, il servizio produce un PDF vero di un report con carta di controllo e istogramma (byte iniziali %PDF, almeno una pagina, grafico presente). - Prova a mano: proxy finto (HTTP_PROXY e HTTPS_PROXY=http://127.0.0.1:9) durante la generazione, il PDF esce lo stesso. - Suite dei report esistente verde: `uv run --python 3.13 --extra server --extra dev pytest src/backend/tests -q -k report`. NON TOCCARE: pyproject.toml, uv.lock, packaging/windows/avvio.py, build.ps1, .iss, workflow, src/backend/config.py, database.py, src/frontend/, scripts/, vendor/. Se serve una dipendenza nuova, scriverla nel rapporto.
Adriano added the sviluppoassegnata:daitarn labels 2026-10-17 07:03:21 +00:00
Author
Owner

🔵 daitarn — preso in carico 2026-10-17T07:03:21Z
ramo: lavoro/daitarn · capacità: build-windows, gpu

🔵 daitarn — **preso in carico** 2026-10-17T07:03:21Z ramo: `lavoro/daitarn` · capacità: build-windows, gpu
Author
Owner

Soluzione

ESITO: fatto
COSA: report PDF su Windows offline (WeasyPrint con DLL MSYS2 pinnate, kaleido con Edge/Chrome locale, mathjax senza CDN).
FILE: packaging/windows/pdf/prendi-gtk.ps1 (21 pacchetti ucrt64 con sha256, 27 DLL + fonts + licenze), packaging/windows/pdf/LEGGIMI.md, src/backend/services/report_service.py (mathjax locale), src/backend/tests/test_report_windows.py.
COMMIT: 0a68a99 su lavoro/daitarn-tmf-pdf, unito in V3.0.0 con f23e87e (V3.0.0 a 0e92959), tag v3.0.0-rc1.
PROVA: ramo integrato, prendi-gtk.ps1 -> 27 DLL; test_report_windows con WEASYPRINT_DLL_DIRECTORIES -> 2 passati; dall'exe installato i report SPC e tabella escono in PDF (agente piano C).
MANCA: copia della cache %LOCALAPPDATA%\Tielogic\tmf-gtk-cache su Wasabi (MSYS2 elimina i pacchetti vecchi).

**Soluzione** ESITO: fatto COSA: report PDF su Windows offline (WeasyPrint con DLL MSYS2 pinnate, kaleido con Edge/Chrome locale, mathjax senza CDN). FILE: packaging/windows/pdf/prendi-gtk.ps1 (21 pacchetti ucrt64 con sha256, 27 DLL + fonts + licenze), packaging/windows/pdf/LEGGIMI.md, src/backend/services/report_service.py (mathjax locale), src/backend/tests/test_report_windows.py. COMMIT: 0a68a99 su lavoro/daitarn-tmf-pdf, unito in V3.0.0 con f23e87e (V3.0.0 a 0e92959), tag v3.0.0-rc1. PROVA: ramo integrato, prendi-gtk.ps1 -> 27 DLL; test_report_windows con WEASYPRINT_DLL_DIRECTORIES -> 2 passati; dall'exe installato i report SPC e tabella escono in PDF (agente piano C). MANCA: copia della cache %LOCALAPPDATA%\Tielogic\tmf-gtk-cache su Wasabi (MSYS2 elimina i pacchetti vecchi).
Adriano removed the assegnata:daitarn label 2026-10-17 10:54:27 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/TieMeasureFlow#78