171 lines
5.4 KiB
Markdown
171 lines
5.4 KiB
Markdown
# 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.
|