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.

Articles en relation:

  1. Gras_du_Bide
    20 avril 2010 à 17:21:24 | #1

    Bien, ça peut être utile. Quelqu’un se sentirait-il faire un petit script nautilus qui proposerait les 2 choix ?

  2. batisteo
    20 avril 2010 à 17:22:25 | #2

    Merci pour l’astuce. Mais il y a une coquille qui me fait mal à l’oeuil ! 😉

  3. 20 avril 2010 à 17:24:35 | #3

    Effectivement, en relisant… :/
    Corrigé, merci.

  4. Gras_du_Bide
    20 avril 2010 à 17:47:23 | #4

    Je n’y connais rien en script. La preuve plus bas.
    J’ai essayé de faire un script, il m’a bien réduit le pdf, mais il a aussi tout effacé. De plus, j’avais la prétention de créer un nouveau pdf (*-petit.pdf) mais visiblement, ce n’est pas ça…

    #!/bin/bash

    printf %s « $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS » |
    while read -r arg
    do
    gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -sOUTPUTFILE= »$arg » -f « $arg »-petit.pdf
    done

  5. Gras_du_Bide
    20 avril 2010 à 17:52:26 | #5

    Bon déjà j’ai interverti le fichier source et le fichier créé… mais ça ne marche toujours pas…

  6. 20 avril 2010 à 20:23:03 | #6

    Je l’ai utilisé tout l’après midi en ligne de commande, je peux garantir que ça fonctionne.

  7. 20 avril 2010 à 20:38:31 | #7

    Bonjour,

    On peut tout à fait réduire le poids d’un PDF depuis OpenOffice.org. Il faut pour cela passer par le menu Fichier > Exporter au format PDF. Le dialogue qui s’affiche permet alors de compresser ou réduire la qualité des images.

  8. 20 avril 2010 à 21:22:19 | #8

    Je crois qu’il faut quand même garder à l’esprit qu’un pdf peut inclure des données textuelles, vectorisées et bitmaps. Si un PDf ne comprend que du texte et des images vectorielles (.eps) cette option ne changera sans doute pas grand-chose.

    Un gain aussi important que celui cité (de 40 Mo à 5,1 Mo) n’est sans doute réalisé que parce qu’il était truffé d’images de grande dimension, ou bien que chaque page a été intégralement convertie en bitmap, texte y compris. Les powerpoints circulent souvent sous une forme qui a subi cette conversion aberrante.

    Donc, oui, c’est une astuce utile pour gagner de la place en ce qui concerne des PDF trop gros reçus de tiers, mais quand on produit soi-même un PDF, bien gérer tous les éléments permet souvent de conserver une taille raisonnable sans pour autant réduire la définition des images.

    À la suite de ton billet, je viens de faire un test avec une page créée dans OpenOffice (2.4) comprenant en tout et pour tout une image vectorielle eps. Exportée en PDF, il est manifeste que cette image a été transformée en bitmap (pour s’en convaincre, il suffit de renommer le document odt en zip et de l’ouvrir). Résultat, un fichier pdf de 89Ko. En choisissant l’option de réduire la définition des images à 75dpi, le fichier résultant ne fait plus que 4255 octets, mais est quasi illisible.

    En comparaison, avec Lyx, le pdf obtenu conserve l’image au format vectoriel, avec un rendu impeccable à l’impression comme à l’écran, et le fichier résultant fait 9819 octets…

    Je n’ai pas envie de lancer une guerre contre OpenOffice, je sais bien que Lyx est un outsider qui ne court pas dans la même catégorie, mais même en utilisant OpenOffice, je pense qu’il y a des gains importants dans la gestion des images. Penser à bien choisir le format (jpg pour les photos en milliers de couleurs, mais png ou gif avec un nombre limité de couleurs pour les schémas, par exemple).

  9. Gras_du_Bide
    21 avril 2010 à 08:48:55 | #9

    @manuberro> je te crois ! Ce qui ne marche pas c’est mon script pour rendre la chose plus facile.
    @Desidia> merci de m’avoir fait découvrir Lyx. J’ai un livre à mettre en forme et openoffice n’est pas ce qui se fait de mieux pour ça. J’ai essayé Lyx (n’ayant jamais fait de Latex), et je suis complètement perdu. J’ai cherché un instant comment changer de police de caractères mais je me suis cassé les dents (je voulais utiliser la police Libertine). Il va falloir que je lise un minimum de documentation.

    GdB

  10. 21 avril 2010 à 12:29:24 | #10

    @Gras_du_Bide

    Au sujet de LyX, vouloir commencer par changer de police, est-ce vraiment une bonne idée ? L’esprit de ce logiciel, c’est de s’en remettre à LaTeX pour la mise en forme. Tant qu’on s’en tient à ce qui est proposé par défaut, ça reste simple. Dès qu’on s’en écarte, ça risque de devenir plus compliqué qu’un traitement de texte conventionnel.

    Encore une chose: il y a dans les menus une option «Configurer» qui a pour effet de vérifier automatiquement le système LaTeX présent et quelques utilitaires et d’adapter la configuration en fonction de ça. Si quelque chose semble ne pas fonctionner (l’exportation par exemple), il suffit parfois d’effectuer cette manoeuvre.

  11. 21 avril 2010 à 22:45:59 | #11

    …impeccable ça ; je vais tester dès demain (ça se tombe bien, j’en avais besoin) !

    Après avoir découvert la facilité d’utilisation de « mogrify » pour traiter de l’image par lot en ligne de commande et de convert pour transformer tout un jeu d’images en UN fichier pdf, j’avoue que c’est une bonne semaine…

    Merci 😉

  12. Gras_du_Bide
    22 avril 2010 à 08:57:13 | #12

    @Desida: Désolé de prolonger un peu le HS… En fait mon texte est déjà près. Je n’ai plus qu’à mettre en forme. Le choix de la police me semble d’actualité ! 😉

    GdB

  13. 22 avril 2010 à 09:21:21 | #13

    @GdB

    Je ne connaissais pas cette police Libertine, merci. Avec LyX, tu as la possibilité d’inclure un en-tête LaTeX, c-à-d. quelques lignes de code brut. C’est ainsi qu’on peut préciser des détails de mise en forme qui vont plus loin que ce qu’offre LyX. L’effet n’apparaîtra évidemment pas dans LyX, mais bien au moment de la compilation du document. C’est facile tant qu’il existe un package latex tout prêt qu’il suffit d’inclure avec une ligne comme

    \ u s e p a c k a g e [ c o l o r l i n k s , l i n k c o l o r = b l u e ] { h y p e r r e f }

    Mais pour Libertine, les choses n’ont pas l’air triviale 😉 la doc est en allemand

    http://www.linuxlibertine.org/fileadmin/user_upload/PDF/Libertine-XeTex-DE.pdf

    Le mieux est sans doute d’essayer de compiler un extrait de la doc avec cette police, pour voir quelles commandes sont nécessaires. Demander de l’aide à un gourou sur le bon newsgroup.

    Bonne chance!

  14. 24 avril 2010 à 16:36:09 | #14

    Super astuce ! Quelle révélation… merci. Tout comme Jeek, je pense qu’en combinaison avec mogrify ça peut faire des ravages. À tester plus en avant donc.

    J’ai simplement un doute sur tes indications de résolutions. 72 dpi est un grand minimum pour une lecture acceptable sur écran, elle ne tolère en effet aucun agrandissement pour optimiser la lecture. J’aurai plutôt tendance à préconiser 150 dpi pour garder les coudées franches. Après oui, si l’objectif est de gagner à tout prix en Mo… Idem pour un document destiné à l’impression, avec Xsane en dessous de 300 dpi (à la limite 250 dpi) j’ai du mal à avoir un rendu correct sur mon imprimante de bureau… tes conseils sur ce point devrait peut-être être nuancés, non ?

    Jonathan

  15. Brian
    25 avril 2010 à 10:28:15 | #15

    @manuberro> je te crois ! Ce qui ne marche pas c’est mon script pour rendre la chose plus facile.
    @Desidia> merci de m’avoir fait découvrir Lyx. J’ai un livre à mettre en forme et openoffice n’est pas ce qui se fait de mieux pour ça. J’ai essayé Lyx (n’ayant jamais fait de Latex), et je suis complètement perdu. J’ai cherché un instant comment changer de police de caractères mais je me suis cassé les dents (je voulais utiliser la police Libertine). Il va falloir que je lise un minimum de documentation.

    GdB

  16. 25 avril 2010 à 18:11:30 | #16

    @ Jonathan
    Tu as raison. Cependant, l’objectif étant de réduire la taille, c’est le maximum qui m’intéressait pour l’article.
    Ensuite, chacun voit ce qu’il lui convient. D’un document à l’autre, la même compression va être intéressante ou pas. C’est en faisant des essais successifs qu’on arrive à voir ce qui va bien.

  17. Mathieu
    10 mai 2010 à 21:25:59 | #17

    Juste pour préciser que l’option -dPDFSETTINGS peut prendre la valeur /ebook. Cette option m’a permis d’avoir des PDF avec une qualité entre /screen et /printer.

    Vous pouvez trouver plus d’information sur les différentes valeurs sur http://pages.cs.wisc.edu/~ghost/doc/cvs/Ps2pdf.htm

  18. Mathieu
    10 mai 2010 à 21:35:15 | #18

    @ Mathieu
    s/information/informations/

  19. 16 octobre 2011 à 15:04:51 | #19

    Merci pour l’astuce.
    Cela fonctionne à merveil!

  20. dids50x
    5 septembre 2012 à 11:32:18 | #20

    Merci beaucoup pour le partage de cette connaissance!

  21. aiza
    18 juin 2013 à 10:26:25 | #21

    Bonjour,
    Je sais que cet article date sérieusement mais je m’arrache les cheveux depuis deux jours sur ce problème. Donc si quelqu’un passe par là et pouvait m’aider… Je m’explique: quand je lance la commande (je suis sous W7) dans le terminal, ce dernier m’indique « could not open the file PDFdeSortie.pdf » ou tout autre nom que je lui donne. En gros, il cherche à ouvrir un document que je lui demande de créer!
    Help!
    merci d’avance!

  1. 20 avril 2010 à 16:33:55 | #1

Anti-Spam Quiz:

antibot * Time limit is exhausted. Please reload the CAPTCHA.

54.196.108.20