From 0a68a9995e387c1351b8f56a94d27e6f807a1348 Mon Sep 17 00:00:00 2001 From: "Adriano (daitarn)" Date: Sat, 17 Oct 2026 09:18:21 +0200 Subject: [PATCH] Pacchetto Windows: LEGGIMI dei report PDF (DLL, variabili, flag Nuitka, licenze) (TieMeasureFlow#78) Co-Authored-By: Claude Sonnet 5.5 --- packaging/windows/pdf/LEGGIMI.md | 149 +++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 packaging/windows/pdf/LEGGIMI.md diff --git a/packaging/windows/pdf/LEGGIMI.md b/packaging/windows/pdf/LEGGIMI.md new file mode 100644 index 0000000..a0bf8bd --- /dev/null +++ b/packaging/windows/pdf/LEGGIMI.md @@ -0,0 +1,149 @@ +# Report PDF nel pacchetto Windows + +Questa cartella contiene quello che serve perché i report PDF di TieMeasureFlow +(`src/backend/services/report_service.py`: Jinja2, Plotly con Kaleido 1.2.0, WeasyPrint 68.1) +funzionino su Windows, dentro il pacchetto, **senza Internet**. Riferimento: TieMeasureFlow#78 +(parte del pacchetto Windows, madre #76). + +## Come funziona + +Un report SPC passa da due componenti nativi che su Windows non arrivano con `pip`: + +1. **WeasyPrint** disegna il PDF e carica a runtime le DLL di Pango/GTK + (`libgobject-2.0-0`, `libpango-1.0-0`, `libharfbuzz-0`, `libharfbuzz-subset-0`, + `libfontconfig-1`, `libpangoft2-1.0-0` e le loro dipendenze). +2. **Kaleido 1.x** trasforma i grafici Plotly in SVG pilotando un browser Chromium già installato + (non porta più Chromium con sé). Su ogni Windows 10/11 c'è Edge. + +### Le DLL: `prendi-gtk.ps1` + +```powershell +powershell -NoProfile -ExecutionPolicy Bypass -File packaging\windows\pdf\prendi-gtk.ps1 -Destinazione +``` + +- Scarica da `repo.msys2.org` (ucrt64) 21 pacchetti **pinnati con sha256** (nome file e hash stanno nello + script), verifica l'hash, estrae solo le 27 DLL necessarie, `etc\fonts` di fontconfig e le licenze. +- Idempotente: se la cartella è già pronta (file `.gtk-pin` uguale ai pin dello script) esce subito. +- Se un hash non coincide fallisce e non lascia mezza cartella. +- I pacchetti scaricati stanno in `%LOCALAPPDATA%\Tielogic\tmf-gtk-cache` (`-Cache` per cambiarla). +- Serve Internet **solo alla build**. Estrae `.zst` con `tar.exe` di Windows (verificato: bsdtar 3.8.9 con + zstd); se `tar.exe` non sa di zstd ripiega su `uv run --with zstandard`. +- Gira da utente non admin con PowerShell 5.1. +- ⚠️ `repo.msys2.org` tiene solo le versioni recenti: se un file pinnato sparisce (404) vanno aggiornati nome + e sha256 dal db `https://repo.msys2.org/mingw/ucrt64/ucrt64.db` e rifatto il test. Conservare la cache + (Wasabi o NAS) evita la corsa contro il repository. + +Il piano C copia `` in `P\gtk\` (P = cartella programma). + +### Variabili d'ambiente (le imposta `avvio.py`, piano C) + +| Variabile | Valore | Perché | +|---|---|---| +| `WEASYPRINT_DLL_DIRECTORIES` | `

\gtk` | WeasyPrint chiama `os.add_dll_directory` su ogni cartella (separatore `;`) **prima** di caricare le DLL. Va impostata prima di importare `weasyprint` (lo fa `report_service` all'import). | +| `BROWSER_PATH` | `msedge.exe` o `chrome.exe` | Choreographer (sotto Kaleido) la legge da sé e ha la precedenza su ogni ricerca (verificato: un percorso inesistente dà `FileNotFoundError`). Senza la variabile Kaleido cerca Edge/Chrome da solo (registro e percorsi tipici). Nessun codice in `report_service.py` per questo. | + +Fontconfig non richiede variabili: trova `etc\fonts` accanto alle DLL (verificato). Se manca `etc\fonts` +WeasyPrint stampa "Fontconfig error: Cannot load default config file". I font dei report vengono da +`C:\Windows\Fonts`. + +### MathJax: la modifica a `report_service.py` + +Kaleido 1.x inserisce nella pagina di render uno `