Réduire la taille d’un PDF sur Linux

Il y a quelques temps, j’avais écrit un article pour alléger un document PDF. Il faut reconnaitre qu’Openoffice.org crée des PDF avec de l’embonpoint.

J’ai découvert récemment que Ghostscript possédait une option permettant de spécifier comment allait être utilisé le document, que ça aidait fortement à réduire la taille finale, et qu’il était prévu pour les documents PDF.

Il y a trois possibilités principales:

  • Votre document doit être utilisé sur un écran
  • Votre document doit être imprimé sur une imprimante de bureau
  • Votre document sera imprimé sur une imprimante professionnelle (tirage chez un imprimeur)

Un moniteur informatique possède une résolution typique d’une centaine de DPI (pixels par pouces). Ce qui signifie que sur un pouce d’écran il y a une centaine de pixels. Traditionnellement, la résolution utilisée pour des images destinées à l’écran est de 72 DPI. Or, si votre image est à 300 DPI, c’est complètement inutile ! Pour un pouce, vous aurez donc 228 pixels en trop qui prendront de la place dans votre document.

Pour une impression de bonne qualité, une image entre 150 et 200 DPI est suffisante. Si votre image fait 300 DPI, elle est inutilement trop grande.

Si vous avez installé ghostscript, une seule ligne de commande pourra vous rendre bien des services, en particulier si vous devez envoyer vos documents par mail:


gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -sOUTPUTFILE=PDFdeSortie.pdf -f PDFaAlleger.pdf

Remplacez bien sûr, PDFdeSortie et PDFaAlleger par le nom voulu et le nom de votre document.

l’option -dPDFSETTINGS peut prendre les valeurs suivantes:

  • /screen pour un document destiné à l’écran
  • /ebook pour une qualité entre screen et printer (suite aux commentaires de l’article)
  • /printer pour un document destiné à l’impression
  • /prepress pour un document destiné à l’impression professionnelle

Pour info, j’ai utilisé l’option /screen pour un PDF de 40Mo et j’ai obtenu (après une bonne minute de traitement) un PDF de 5.1 Mo.

Le document obtenu s’ouvre bien plus rapidement et la qualité des pages, si elle a légèrement souffert, reste largement suffisante pour lire le texte et les images.

Avec l’option /printer, la taille du document obtenu est de 13.5 Mo sans perte de qualité visible à l’œil par rapport au document d’origine. Mais le document est quand même plus rapide à l’ouverture.

Alléger ou réduire la taille d’un PDF

Les fichiers PDF générés par les programmes sous linux ont une fâcheuse tendance à l’embonpoint.

Il est conseillé de ne pas dépasser 150 dpi dans les réglages d’exportation ou d’impression afin de ne pas avoir un trop gros document, mais parfois, ce n’est pas suffisant pour obtenir un fichier assez léger pour être envoyé par mail.

Voici les commandes à utiliser pour alléger un document PDF

J’ai un document PDF qui servira d’exemple. La taille de base de ce document est de 26.4Mo.

Méthode 1: utiliser l’imprimante PDF de cups pour choisir les réglages

Il faut bien sûr que cups-pdf soit installé sur votre système.

Ouvrez le documents PDF avec votre lecteur de PDF, choisissez de l’imprimer sur l’imprimante PDF, et allez régler les options de manière à imprimer en 150 dpi.

Le nouveau document généré atteint alors une taille de 17.8Mo.

Méthode 2: passer par postscript pour regénérer un PDF léger

Ouvrez un terminal dans le dossier où se trouve votre PDF et entrez la commande suivante, en remplaçant foo par le nom de votre document:

pdftops -paper A4 foo.pdf

vous obtenez, après un temps plus ou moins long, un fichier foo.ps de taille supéroeure à votre PDF d’origine (34.8Mo dans mon cas)

ps2pdf13 foo.ps

Vous obtenez alors un fichier PDF (qui a remplacé votre PDF d’origine, attention à garder votre original au chaud!) très fortement allégé. Dans mon cas, le PDF final fait 1Mo, soit 26 fois moins que le document d’origine!

C’est très appréciable, n’est ce pas?

Manipuler des PDF et JPG ou JPEG

Je scanne beaucoup de documents (pour tendre vers le zéro papier) et j’archive ensuite ceux ci dans des PDF une fois que je n’en ai plus besoin.

Je vous donne mes astuces pour ce faire. Il vous faudra avoir installé les programmes imagemagick et gs, disponibles sous le même nom avec Ubuntu.

Créer un PDF à partir d’images

Je scanne en niveaux de gris à 300 DPI vers jpeg, ce qui permet d’avoir une image nette et de réimprimer le document au besoin en ayant la même qualité qu’une photocopie classique.

Ensuite, je met ces images dans un même dossier, et je les convertis toutes en un seul PDF avec la commande suivante:

convert *.jpeg Factures_Avril09.PDF

Ce qui vous donne un PDF contenant une page par image, dans l’ordre alphabétique.

Cependant, le PDF est assez lourd, l’équivalent en poids du total des images. Si vous désirez envoyer ce PDF par mail (par exemple au comptable), il faut l’alléger car vous allez y gagner en poids et il n’a pas besoin d’avoir une qualité identique à la votre tant qu’il arrive à lire le contenu. Il suffit d’ajouter une compression et un niveau de qualité à la commande ainsi:

convert *.jpeg -compress jpeg -quality 30 Factures_Avril09.PDF

Avec une qualité réglée à 30, vous divisez par environs 2,5 le poids du PDF généré. Mais la qualité de l’image baisse (ce qui est normal, puisque c’est ce qui est demandé). A vous de faire varier ce chiffre entre 0 et 100 pour arriver à un compromis acceptable entre la qualité et le poids du résultat final.

Dans l’autre sens

Il est aussi possible de transformer un PDF en série d’images que vous pourrez ensuite traiter, avec la commande suivante:

convert fichier.pdf images.jpeg

Cela va vous produire images-0.jpeg, images-1.jpeg, images-2.jpeg, … Autant d’images que de pages dans le PDF.

Attention cependant, la qualité des images obtenues avec cette méthode laisse à désirer et j’ai eu des soucis avec des images: le format était bien en A4, mais le contenu de l’image était réduit sur la page. Sans doute un option manquante.

Mais ça reste lisible.