# ZipBundler versione 1.0 ZipBundler e un piccolo tool desktop per creare piu archivi ZIP indipendenti a partire da una cartella sorgente, mantenendo ogni pacchetto entro una dimensione massima configurabile. L'obiettivo pratico e preparare allegati gestibili per invio tramite posta elettronica aziendale, dove spesso il limite reale degli allegati e vicino a 20-25 MB. ## Funzioni principali - Scelta della cartella sorgente. - Scelta della cartella di destinazione. - Dimensione massima dei pacchetti tramite spinbox. - Default a 15 MB, piu prudente per l'invio email. - Avviso inline sopra 18 MB, con richiesta di accettazione esplicita. - Creazione di pacchetti `pacchetto_001.zip`, `pacchetto_002.zip`, ecc. - Verifica della dimensione reale dello ZIP finale, non della somma dei file originali. - Ottimizzazione guidata di PDF troppo grandi. - Ottimizzazione guidata di immagini troppo grandi. - Opzione esplicita per convertire formati immagine non compressi in JPEG. - Opzione esplicita per convertire file Office grandi in PDF. ## Scelta fondamentale sulla dimensione La dimensione limite viene controllata sul file `.zip` finale. Questo e importante perche la dimensione dei file originali non coincide con la dimensione dell'archivio compresso. Il programma crea ZIP temporanei di prova, misura il risultato reale e solo dopo decide se un file puo entrare nel pacchetto corrente. ## PDF troppo grandi Quando un PDF supera da solo il limite impostato, ZipBundler prova diversi approcci: 1. Ottimizzazione interna senza perdita tramite PyMuPDF. 2. Compressione tramite Ghostscript, se disponibile nel sistema. 3. Ricodifica a immagini/DPI ridotti solo per PDF che non sembrano contenere testo selezionabile significativo. La ricodifica raster dei PDF nativi e evitata quando possibile, perche puo aumentare la dimensione e far perdere testo selezionabile. Se viene creata una copia ridotta, l'originale non viene modificato. La copia viene salvata nella cartella di destinazione, dentro `_pdf_ridotti_email`. Nella GUI viene mostrata una preview affiancata originale/ridotto, con navigazione delle pagine. ## Ghostscript Ghostscript e usato come motore preferenziale per ridurre PDF nativi quando e disponibile. Il programma cerca: - `gswin64c` - `gswin32c` - `gs` Se Ghostscript non e presente, il programma salta quel passaggio e continua con le altre strategie. ## Immagini troppo grandi Per le immagini viene usata Pillow. Formati supportati: - JPG/JPEG - PNG - TIFF/TIF - BMP - WEBP Profili: - qualita alta: lato lungo massimo 2500 px - qualita email: lato lungo massimo 1800 px - massima compressione: lato lungo massimo 1200 px Per impostazione predefinita il formato originale viene mantenuto. Per esempio un TIFF ridotto resta TIFF. Esiste pero una checkbox esplicita: `Converti formati non compressi in JPEG (es. BMP/TIFF)` Solo se questa opzione e attiva, BMP e TIFF vengono convertiti in JPEG per ottenere file molto piu leggeri. Le copie ridotte vengono salvate in `_immagini_ridotte_email`. ## File Office troppo grandi ZipBundler puo convertire file Office grandi in PDF, ma solo se la checkbox dedicata e attiva: `Converti file Office grandi in PDF (es. DOCX -> PDF)` Formati previsti: - DOC/DOCX - XLS/XLSX - PPT/PPTX La conversione usa Microsoft Office tramite automazione COM (`win32com`). Quindi richiede Office installato e funzionante sul PC. Le copie PDF vengono salvate in `_office_convertiti_pdf`. LibreOffice headless e stato valutato come opzione futura, ma non e incluso per evitare di aumentare molto il peso di un eventuale eseguibile PyInstaller. ## Scelte conservative - Gli originali non vengono mai modificati. - Le conversioni di formato sono disattivate di default. - Una copia ottimizzata viene accettata solo se riduce davvero il file e permette allo ZIP finale di rientrare nel limite. - Sopra 18 MB viene richiesto consenso esplicito, perche la codifica email puo aumentare la dimensione effettiva del messaggio. - Se un file non puo essere ridotto sotto soglia, viene segnalato e inserito in un pacchetto fuori limite. ## Uso GUI ```powershell python .\zipbundler.py ``` ## Uso CLI ```powershell python .\zipbundler.py C:\percorso\cartella --output C:\percorso\output --size-mb 15 ``` Opzioni: ```powershell --convert-uncompressed-images --convert-office-to-pdf ``` ## Dipendenze Python ```powershell pip install -r requirements.txt ``` Dipendenze principali: - CustomTkinter - Pillow - PyMuPDF Per Office COM serve anche `pywin32`, installato nell'ambiente in cui viene eseguito il programma. ## Packaging futuro Il progetto e pensato per essere trasformato in un eseguibile Windows con PyInstaller. Script disponibile: ```powershell .\build_exe.ps1 -Clean ``` Lo script: - installa le dipendenze Python; - installa/aggiorna PyInstaller; - include lo splash screen `assets/splash.png`; - crea un eseguibile Windows `dist\ZipBundler.exe`; - prova a includere Ghostscript se trova `gswin64c`, `gswin32c` o `gs` nel PATH. Lo splash screen riporta `ZipBundler`, `versione 1.0` e `ai.teamstudio.it`. Componenti inclusi o gestiti: - CustomTkinter, Pillow e PyMuPDF vengono inclusi da PyInstaller come dipendenze Python; - Ghostscript viene incluso se rilevato in fase di build; - Microsoft Office non viene incluso: la conversione Office -> PDF usa Office COM e richiede Office installato sul PC di destinazione. Da valutare in futuro: - gestione piu esplicita di `pywin32`; - eventuale icona applicativa; - firma dell'eseguibile, se necessaria in ambiente aziendale.