Aller au contenu
PDFLove

comment fonctionne la compression pdf

Comment fonctionne vraiment la compression des PDF

« Compresser le PDF » exécute plusieurs opérations sans rapport derrière un seul bouton. L'une d'elles est sans perte et a d'ordinaire déjà été faite. L'une d'elles est d'où vient tout le poids, et elle n'est pas gratuite.

01

Couche un : la compression des flux, sans perte et déjà active

Chaque flux d'un PDF — flux de contenu, polices embarquées, données d'image — peut porter un filtre qui dit comment il est encodé. Le courant est `FlateDecode`, c'est-à-dire deflate, le même algorithme que le ZIP. Les instructions de dessin du texte sont très répétitives, alors deflate s'y comporte très bien : une page de commandes de dessin se comprime couramment au cinquième de sa taille.

Le point important, c'est que presque tout rédacteur de PDF applique cela au moment où il enregistre. Quand le fichier vous parvient, cette couche a déjà tourné. C'est pourquoi zipper un PDF ne rapporte presque rien, et pourquoi compresser un PDF de texte déjà petit vous rend un fichier de la même taille. Il ne restait rien à prendre.

Le PDF 1.5 a ajouté deux raffinements qui aident encore sur les fichiers antérieurs. Les flux d'objets empaquettent de nombreux petits dictionnaires dans un unique flux compressible au lieu de les laisser en texte non compressé épars. Les flux de références croisées font de même pour l'index. Sur un gros document comptant des dizaines de milliers d'objets, cela seul peut être une réduction notable, et cela ne coûte absolument rien.

02

Couche deux : le réencodage des images, où habite le poids

Deflate est inutile sur les photographies. Un scan n'offre aucune répétition exacte à exploiter — chaque pixel diffère légèrement de son voisin — si bien que la compression sans perte sur des données d'image ne rend presque rien. Les données d'image sont plutôt stockées avec `DCTDecode` (JPEG) ou, pour les scans bitonaux, avec `CCITTFaxDecode` ou `JBIG2Decode`.

Compresser un PDF chargé d'images signifie donc une seule chose : décoder chaque image, la modifier et la réencoder. Il y a trois leviers, et chacun est un vrai compromis.

Rééchantillonnage
Réduire les dimensions en pixels. Un scan à 300 PPP contient quatre fois les données d'un scan à 150 PPP, et un écran ne montre pas la différence. C'est le plus gros gain unitaire sur les documents scannés.
Qualité de réencodage
Augmenter la quantification JPEG. Passer de la qualité 95 à 80 divise en général les données par deux et se voit difficilement ; descendre sous 60 commence à faire apparaître des halos autour du texte.
Réduction de couleur
Convertir la couleur en niveaux de gris, ou un scan en niveaux de gris de texte propre en bitonal. Du noir sur papier blanc ne porte aucune couleur qui vaille d'être gardée.
Ce que cela coûte
Les trois sont à sens unique. Les pixels jetés sont perdus, et recompresser le résultat réencode des données déjà dégradées.

03

Couche trois : jeter des choses que vous ne regardiez pas

Une part surprenante d'un PDF est souvent du superflu dont personne ne veut. Les polices sont le cas d'école : une police entièrement embarquée peut atteindre plusieurs centaines de kilooctets, et un document qui en emploie onze caractères dans un titre transporte tout le caractère. Le sous-ensemble réécrit la police pour ne contenir que les glyphes réellement dessinés.

Ensuite vient la duplication. Un logo placé dans l'en-tête de chaque page est fréquemment embarqué une fois par page au lieu d'être stocké une fois et référencé quatre-vingts fois. Dédoublonner des objets identiques sur un long rapport peut retirer un tiers du fichier sans le moindre changement visuel.

Le reste est plus petit mais s'additionne : vignettes de page mises en cache par le rédacteur, blocs de métadonnées XMP, objets inutilisés laissés orphelins par des modifications antérieures, JavaScript, et tout l'historique d'édition laissé par les enregistrements incrémentaux. Rien de tout cela ne s'affiche. Tout cela voyage.

04

Pourquoi le même réglage donne des résultats si différents

Parce que l'issue dépend entièrement de la couche qui a quelque chose à faire. Passez un compresseur sur un scan de 40 Mo et il réencodera 200 images pour vous rendre 4 Mo. Passez exactement les mêmes réglages sur un rapport texte de 400 Ko et il ne trouvera ni images, ni polices non réduites, ni objets en double, et vous rendra 390 Ko.

Aucun de ces deux résultats n'est l'outil qui marche bien ou mal. C'est la même opération rencontrant deux fichiers entièrement différents, et c'est pourquoi la première question utile est toujours de quoi le fichier est fait, et non avec quelle force le presser.

05

Perte de génération, et pourquoi deux fois ne vaut pas deux fois mieux

La quantification JPEG n'est pas idempotente. Réencoder une image déjà quantifiée requantifie des coefficients déjà arrondis, si bien que l'erreur s'accumule tandis que la taille bouge à peine. La seconde passe retire d'ordinaire quelques pour cent et ajoute des artefacts visibles autour de chaque bord franc.

Si une passe n'a pas atteint votre objectif, le geste productif est de changer quelque chose de structurel — rééchantillonner davantage, passer en niveaux de gris, retirer des pages — plutôt que de relancer la même compression.

Questions

Questions liées

La compression des PDF est-elle sans perte ou avec perte ?

Les deux, dans le même fichier. Texte, graphiques vectoriels et polices sont compressés sans perte et ressortent identiques. Photographies et scans sont réencodés et perdent réellement du détail. C'est pourquoi compresser un document texte est gratuit et compresser un scan est un compromis.

Pourquoi compresser mon PDF n'a-t-il presque rien changé ?

Parce que la couche sans perte avait déjà été appliquée à l'écriture du fichier, et qu'il n'y avait pas d'images sur lesquelles la couche avec perte puisse travailler. Un fichier presque entièrement textuel est déjà proche de sa taille minimale.

Compresser un PDF réduit-il la qualité d'impression ?

Cela réduit la résolution des images, donc pour un livre de photos destiné à l'impression, oui, visiblement. Pour un document scanné destiné à un écran ou à une imprimante de bureau, rééchantillonner de 300 PPP à 150 est d'ordinaire indiscernable. Le texte dessiné comme du texte reste intact quel que soit le réglage.

Pourquoi mon PDF fusionné est-il plus lourd que les deux fichiers additionnés ?

Ce sont d'ordinaire les polices. Si les deux fichiers embarquent des sous-ensembles du même caractère sous des noms internes différents, le fichier fusionné porte les deux sous-ensembles, parce que rien ne peut prouver sans risque qu'ils sont interchangeables. Passer ensuite une compression le récupère souvent.