Ce qui se passe réellement quand on compresse un PDF
PDF123 Compress recompresse les flux avec qpdf et range les objets en flux d’objets : ni sous-échantillonnage des images, ni réencodage JPEG avec perte, ni mise en sous-ensemble des polices. La linéarisation ne change presque pas la taille du fichier.

Deux PDF peuvent sembler identiques à l’écran et différer de trois ordres de grandeur : 50 Ko contre 50 Mo. L’écart ne se situe presque jamais dans les opérateurs de texte. Dans un contrat de vingt pages, ceux-ci occupent en général quelques dizaines de kilooctets ; tout le reste, ce sont des échantillons d’image, un programme de police entièrement incorporé, et la manière plus ou moins serrée dont les flux et les objets sont rangés.
Cela entraîne une conséquence qu’il vaut mieux poser d’emblée : « compresser un PDF » n’est pas une action, mais quatre. Elles réduisent des choses différentes et coûtent des prix différents, et les confondre produit des expériences contradictoires : le fichier compressé qui n’a pas maigri, ou bien amaigri mais avec des pages devenues floues.
Le poids vient des images, des polices et du rangement
La plupart des « pourquoi ce PDF est-il énorme ? » partent d’un scan ou d’une photo haute résolution encore incorporé à sa taille de capture. Le calcul vaut la peine d’être fait une fois : une page Letter de 8,5 × 11 pouces numérisée à 300 DPI fait environ 2550 × 3300 pixels et, à trois octets par pixel, à peu près 25 Mo non compressés. Vingt pages de ce type atteignent souvent 60 à 80 Mo avant que quiconque touche à la compression.
La deuxième source, ce sont les polices. Un PDF peut incorporer tout un programme de police pour que n’importe quelle machine rende le texte à l’identique, et ce coût se mesure à la taille des tables de glyphes, non à la quantité de texte réellement lue. C’est pourquoi la mise en sous-ensemble des polices est un levier de taille à part entière.
La troisième, c’est le rangement lui-même. Un même contenu peut être stocké avec des réglages de compression gaspilleurs, ou ses objets disséminés dans le fichier, chacun traînant sa propre comptabilité. Rien de tout cela ne change un pixel ni un glyphe, et c’est exactement la partie que la recompression des flux peut atteindre.
« Compresser » recouvre quatre leviers distincts
Il existe quatre leviers sur la taille ; ils agissent à des couches différentes et leurs coûts ne se recouvrent presque pas. Choisir le mauvais est la raison la plus fréquente pour laquelle une compression semble ne rien faire.
| Levier | Ce qu’il touche | Gain de taille | Coût |
|---|---|---|---|
| Recompression des flux et flux d’objets | La compression des flux de contenu, le stockage et le rangement des objets | Dépend du laisser-aller de l’original | Apparence des pages inchangée |
| Sous-échantillonnage des images | Le nombre de pixels, c’est-à-dire la résolution | Important | Résolution définitivement réduite |
| Réencodage d’image avec perte | La représentation en octets du bitmap | Important | Qualité d’image réduite |
| Mise en sous-ensemble des polices | Les tables de glyphes incorporées | Modéré | Les glyphes non utilisés ne sont plus modifiables |
| Linéarisation | L’ordre des objets | Quasi nul | Achète plutôt le temps de chargement de la première page |
Les quatre premières lignes sont toutes appelées « compression » par approximation, mais seule la première laisse le contenu intact. C’est aussi celle dont le rendement est le plus facile à mal juger : un scan dont le poids vient surtout d’échantillons d’image bruts offre peu de redondance à supprimer, et les leviers qui le réduiraient vraiment sont le sous-échantillonnage et le réencodage avec perte, au prix d’une résolution et d’une qualité perdues pour de bon.
PDF123 Compress n’actionne qu’un seul des quatre leviers
Compresser un PDF (POST /api/v1/misc/compress-pdf) n’exécute que la première ligne. Il lance qpdf avec la compression des flux non compressés (--compress-streams=y), une seconde passe sur les flux déjà compressés en Flate (--recompress-flate) et le rangement des objets en flux d’objets (--object-streams=generate).
Il ne sous-échantillonne pas les images, ne réencode pas les bitmaps vers un JPEG de qualité inférieure et ne met pas les polices en sous-ensemble. Les pages devraient rester identiques, et les gains viennent de la recompression Flate et du rangement en flux d’objets.
La condition d’échec mérite la même clarté. Quand le poids d’un fichier est majoritairement fait de données d’image déjà compressées en JPEG, Flate n’a plus rien à presser, car ces octets d’image échappent aux trois commutateurs ci-dessus. C’est pourquoi un lot de scans peut ne revenir que de quelques pour cent plus léger, là où un PDF à dominante textuelle de taille comparable gagne nettement davantage.
Le chemin inverse est Décompresser un PDF, qui déplie les flux pour l’inspection (--qdf, flux d’objets désactivés) et ne change pas non plus l’apparence des pages.
Quand un autre chemin est la bonne réponse
| Ce que vous voulez | Le chemin à emprunter |
|---|---|
| Une apparence identique, juste retirer le gras du rangement | Compresser |
| Un lot de scans vraiment trop lourd, avec une perte de qualité acceptable | Sous-échantillonnage ou réencodage avec perte, pas ce Compress |
| Un fichier encore modifiable, mais le prochain caractère ne s’affichera pas | D’autres réglages d’export ou le fichier source, voir la mise en sous-ensemble des polices |
| Le navigateur devrait afficher la première page plus tôt | La linéarisation règle le premier affichage, pas la taille |
| Le fichier ne s’ouvre pas du tout | Réparer, un problème de structure et non de taille |
Un piège se cache dans cette dernière ligne : Linéariser un PDF n’est pas une implémentation distincte ici, c’est un alias de Compress. Les deux pointent vers la même opération, l’identifiant canonique est misc/compress-pdf avec linearize-pdf comme alias, le portail envoie toujours linearize=true et optimizeLevel=1 pour cet outil, le serveur ne lit ni l’un ni l’autre, et qpdf ne reçoit jamais --linearize. L’opération qui linéarise réellement un fichier est Protéger, lorsqu’elle chiffre.
Donc si vous voulez la même apparence dans un fichier plus petit, Compresser est la réponse complète. Si vous voulez une réduction d’image avec perte ou une mise en sous-ensemble des polices, ce chemin n’est pas le bon levier. Le fichier revient directement, sans compte requis. Pour voir où vivent réellement les objets, les flux et la table de références croisées, poursuivez avec Ce qu’il y a dans un PDF.