Cosa succede davvero quando comprimi un PDF
PDF123 Compress ricomprime gli stream con qpdf e impacchetta gli oggetti in object stream: niente downsampling delle immagini, niente ricodifica JPEG lossy, niente subsetting dei font. La linearizzazione non cambia quasi il peso del file.

Due PDF possono sembrare identici sullo schermo e differire di tre ordini di grandezza: 50 KB contro 50 MB. Il divario quasi mai sta negli operatori di testo. In un contratto di venti pagine quegli operatori occupano di solito qualche decina di kilobyte; tutto il resto sono campioni di immagine, un programma di font incorporato per intero e la maggiore o minore compattezza con cui stream e oggetti sono impacchettati.
Ne segue una conseguenza che vale la pena mettere subito in chiaro: «comprimere un PDF» non è una sola azione, ma quattro. Riducono cose diverse e costano prezzi diversi, e trattarle come una sola produce esperienze contraddittorie: il file compresso che non si è rimpicciolito, oppure rimpicciolito ma con le pagine diventate sfocate.
Il peso viene da immagini, font e impacchettamento
La maggior parte dei casi «perché questo PDF è enorme?» parte da una scansione o da una foto ad alta risoluzione ancora incorporata alle dimensioni di acquisizione. Vale la pena fare il calcolo una volta: una pagina formato lettera da 8,5 × 11 pollici acquisita a 300 DPI misura circa 2550 × 3300 pixel e, a tre byte per pixel, pesa all’incirca 25 MB non compressi. Venti pagine così arrivano spesso a 60–80 MB prima che qualcuno tocchi la compressione.
La seconda fonte sono i font. Un PDF può incorporare un intero programma di font perché qualsiasi macchina renderizzi il testo allo stesso modo, e quel costo si misura sulla dimensione delle tabelle dei glifi, non su quanto testo venga effettivamente letto. È per questo che il subsetting dei font è una leva di peso a sé stante.
La terza è l’impacchettamento in sé. Lo stesso contenuto può essere memorizzato con impostazioni di compressione dispendiose, oppure i suoi oggetti possono restare sparsi nel file, ognuno con il proprio overhead contabile. Nulla di tutto ciò cambia un pixel o un glifo, ed è esattamente la parte che la ricompressione degli stream riesce a raggiungere.
«Comprimere» copre quattro leve distinte
Sul peso si può agire con quattro leve; operano a livelli diversi e i loro costi quasi non si sovrappongono. Scegliere quella sbagliata è il motivo più comune per cui una compressione sembra non fare nulla.
| Leva | Cosa tocca | Guadagno di peso | Costo |
|---|---|---|---|
| Ricompressione degli stream e object stream | Come sono compressi gli stream di contenuto, come sono memorizzati e impacchettati gli oggetti | Dipende da quanto era lasco l’originale | Aspetto delle pagine invariato |
| Downsampling delle immagini | Il numero di pixel, cioè la risoluzione | Grande | Risoluzione ridotta in modo permanente |
| Ricodifica lossy delle immagini | La rappresentazione in byte della bitmap | Grande | Qualità dell’immagine ridotta |
| Subsetting dei font | Le tabelle dei glifi incorporate | Moderato | I glifi non usati non sono più modificabili |
| Linearizzazione | L’ordine degli oggetti | Quasi nullo | In cambio dà il tempo di caricamento della prima pagina |
Le prime quattro righe vengono tutte chiamate «compressione» in senso lato, ma solo la prima lascia intatto il contenuto. È anche la riga il cui rendimento è più facile da giudicare male: una scansione il cui peso è fatto soprattutto di campioni di immagine grezzi ha poca ridondanza da togliere, e le leve che la ridurrebbero davvero sono il downsampling e la ricodifica lossy, al prezzo di perdere per sempre quella risoluzione e quella qualità.
PDF123 Compress ne aziona uno solo dei quattro
Comprimere un PDF (POST /api/v1/misc/compress-pdf) esegue solo la prima riga. Esegue qpdf con la compressione degli stream non compressi (--compress-streams=y), una seconda passata sugli stream già compressi con Flate (--recompress-flate) e il raggruppamento degli oggetti in object stream (--object-streams=generate).
Non esegue il downsampling delle immagini, non ricodifica le bitmap a una qualità JPEG inferiore e non applica il subsetting dei font. Le pagine dovrebbero restare identiche, e il risparmio viene dalla ricompressione Flate e dal packing degli object stream.
La condizione di fallimento merita la stessa chiarezza. Quando il peso di un file è in gran parte dati immagine già compressi in JPEG, Flate non ha più nulla da spremere, perché quei byte di immagine stanno fuori dalla portata dei tre interruttori qui sopra. Ecco perché un pacchetto di scansioni può tornare più leggero solo di qualche punto percentuale, mentre un PDF a prevalenza testuale di dimensioni simili guadagna molto di più.
Il percorso inverso è Decomprimere un PDF, che espande gli stream per l’ispezione (--qdf, object stream disattivati) e allo stesso modo non cambia l’aspetto delle pagine.
Quando la risposta giusta è un altro percorso
| Cosa ti serve | Il percorso da usare |
|---|---|
| Aspetto identico, solo togliere l’overhead di impacchettamento | Comprimere |
| Un pacchetto di scansioni davvero troppo grande e una perdita di qualità accettabile | Downsampling o ricodifica lossy, non questo Compress |
| Ancora modificabile, ma il prossimo carattere non verrà digitato | Impostazioni di esportazione o file di origine diversi, vedi subsetting dei font |
| Il browser dovrebbe vedere prima la prima pagina | La linearizzazione risolve il primo paint, non il peso |
| Il file non si apre affatto | Ripara, un problema strutturale più che di peso |
Una trappola si nasconde in quest’ultima riga: Linearizzare un PDF non è un’implementazione separata, è un alias di Compress. Entrambi puntano alla stessa operazione, l’id canonico è misc/compress-pdf con linearize-pdf come alias, il portale invia sempre linearize=true e optimizeLevel=1 per quello strumento, il server non legge nessuno dei due campi e a qpdf non viene mai passato --linearize. L’operazione che linearizza davvero un file è Proteggi, quando cifra.
Quindi, se vuoi lo stesso aspetto in un file più piccolo, Comprimere è la risposta completa. Se vuoi una riduzione lossy delle immagini o il subsetting dei font, questo percorso è la leva sbagliata. Il file torna indietro direttamente, senza alcun account. Per vedere dove vivono davvero oggetti, stream e tabella delle referenze incrociate, prosegui con Cosa c’è dentro un PDF.