Initial ZipBundler 1.0

This commit is contained in:
2026-07-02 19:57:28 +02:00
commit a9604023b3
4 changed files with 1655 additions and 0 deletions

149
README.md Normal file
View File

@@ -0,0 +1,149 @@
# 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.
Da valutare:
- inclusione o rilevamento esterno di Ghostscript;
- gestione piu esplicita di `pywin32`;
- eventuale icona applicativa;
- firma dell'eseguibile, se necessaria in ambiente aziendale.