Initial ZipBundler 1.0
This commit is contained in:
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
|
||||
# Local test/source data and generated packages
|
||||
SDS/
|
||||
SDS_*/
|
||||
*_zip_*/
|
||||
*_zip_*mb/
|
||||
*_zipped/
|
||||
|
||||
# Generated optimized copies inside output folders
|
||||
_pdf_ridotti_email/
|
||||
_immagini_ridotte_email/
|
||||
_office_convertiti_pdf/
|
||||
|
||||
# Local build outputs
|
||||
build/
|
||||
dist/
|
||||
*.spec
|
||||
149
README.md
Normal file
149
README.md
Normal 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.
|
||||
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
customtkinter>=5.2.2
|
||||
Pillow>=12.2.0
|
||||
PyMuPDF>=1.28.0
|
||||
pywin32>=306; platform_system == "Windows"
|
||||
1483
zipbundler.py
Normal file
1483
zipbundler.py
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user