Outils personnels
Vous êtes ici : Accueil GNU / Linux Optimiser un fichier PDF sous Linux
Actions sur le document
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

Optimiser un fichier PDF sous Linux

Par Pierre-Yves Landuré - Dernière modification 16/12/2010 16:38

Si vous êtes un développeur qui utilise des bibliothèques du type de TCPDF ou FPDF pour créer des fichiers PDF, vous avez pu constater que les PDF créés ne sont pas optimisés pour l'impression, ou même pour le téléchargement. Une simple ligne de commande permet de corriger ce problème.

Pré-requis

Installez les logiciels nécessaires à la manipulation:

command sudo apt-get install poppler-utils ghostscript

Optimisation du PDF sans perte de qualité

Renseignez le nom du fichier que vous souhaitez optimiser:

PDF_FILE="original.pdf"

Renseignez le nom du nouveau fichier optimisé:

OPTIMIZED_PDF_FILE="optimized.pdf"

Optimisez le fichier PDF :

commmand pdftops \
        -paper match \
        -nocrop \
        -noshrink \
        -nocenter \
        -level3 \
        -q \
      "$PDF_FILE" - \
  | command ps2pdf14 \
        -dEmbedAllFonts=true \
        -dUseFlateCompression=true \
        -dProcessColorModel=/DeviceCMYK \
        -dConvertCMYKImagesToRGB=false \
        -dOptimize=true \
        -dPDFSETTINGS=/prepress \
      - "$OPTIMIZED_PDF_FILE"

Remarque: Cette ligne de commande est assez complexe. L'option de pdftops "-level3" est capitale, car elle améliore de manière radicale les performances de ps2pdf. De plus, le PDF généré est destiné à l'impression et utilise des couleurs CMJN.

Pour aller plus loin, consultez la documentation de ps2pdf : PostScript-to-PDF converter.

Compresser un PDF en réduisant la taille des images

Renseignez le nom du fichier que vous souhaitez optimiser:

PDF_FILE="original.pdf"

Renseignez le nom du fichier optimisé créé :

SHRINKED_PDF_FILE="shrinked.pdf"

Transformez votre fichier PDF haute définition en fichier PDF basse définition non utilisable pour l'impression :

command pdftops \
        -paper match \
        -nocrop \
        -noshrink \
        -nocenter \
        -level3 \
        -q \
      "$PDF_FILE" - \
  | command ps2pdf14 \
        -dEmbedAllFonts=true \
        -dUseFlateCompression=true \
        -dOptimize=true \
        -dProcessColorModel=/DeviceRGB \
        -dUseCIEColor=true \
        -r72 \
        -dDownsampleGrayImages=true \
        -dGrayImageResolution=72 \
        -dAutoFilterGrayImages=false \
        -dGrayImageDownsampleType=/Bicubic \
        -dDownsampleMonoImages=true \
        -dMonoImageResolution=72 \
        -dMonoImageDownsampleType=/Bicubic \
        -dDownsampleColorImages=true \
        -dColorImageResolution=72 \
        -dAutoFilterColorImages=false \
        -dColorImageDownsampleType=/Bicubic \
        -dPDFSETTINGS=/prepress \
      - "$SHRINKED_PDF_FILE"

Remarque: Les PDF générés par cette ligne de commande ont une résolution de 72 dpi. Ils ne possèdent pas une qualité suffisante pour une impression, mais son normalement adaptés à la lecture sur écran.

Remerciements

réduire un pdf

Posté par alexandre le 14/06/2009 16:17
bonjour,

j'ai encore beaucoup de mal à comprendre le système de ligne de commande sous linux. et je n'obtiens rien en faisant ce que tu dis. enfin c'est surtout renseigner le nom du fichier qui ne me donne rien! pourrais-tu me "dicter" la ligne de commande s'il te plait? j'ai un projet à rendre bientôt, et il faut que je travaille sur un pdf trop lourd.

merci.

Okidoki

Posté par lwolf le 14/06/2009 16:23
Place ton fichier dans ton "Dossier personnel", (pas sur le bureau hein), dans ton "Dossier personnel", et renomme le "original.pdf".

Ensuite, ouvre un terminal, et tape :

cd

pour te placer dans ton "Dossier personnel".

Ensuite, lance les commandes indiquées, et normallement, le pdf compressé se trouvera dans ton dossier personnel avec le nom "optimized.pdf"

réduire un pdf

Posté par alexandre le 14/06/2009 20:45
merci de me répondre si vite. ça a marché. sauf que l'optimisé fait la même taille que l'original : 3.3Mo ! et mon ordi rame un peu pour le traiter. tampis, je vais utiliser un autre ordi plus puissant.
merci.

Pas glop !

Posté par Emmanuel le 09/07/2009 15:15
Pas top pour mon premier essai sur un fichier d'un dizaine de pages A4 sans images.
On passe de 114k à 160k pour le shrinked !

-rw-rw---- 1 bem bem 114K 2009-07-09 13:42 original.pdf
-rw-r--r-- 1 bem bem 148K 2009-07-09 17:05 optimized.pdf
-rw-r--r-- 1 bem bem 160K 2009-07-09 17:10 shrinked.pdf

des fois cela ne fonctionne pas.

Posté par Lone Wolf le 09/07/2009 16:02
Si vous n'avez pas d'images, le shrinked n'est d'aucune utilitée. Le optimized suffit.

Il arrive, pour une raison inconnue que pour certains PDF la réduction ne s'opère pas pour une raison ou pour une autre. L'une des raison que j'ai pu observer, c'est un problème dans la descriptions des polices incluses qui cause une vectorisation de tous les textes.

pdffonts peut aider à débogguer le probème.

Mais bon.. 114k, est-ce vraiment utile de réduire encore :) Cette commande est vraiment utile pour les PDF de plusieurs mégas.

Bonne continuation

Mauvais pour moi

Posté par nicofrand le 09/03/2010 12:53
Je cherchais à passer d'un PDF de 279Ko à moins de 200Ko.
La première solution m'output un PDf de 1.3Mo et la seconde le rendu est super dégueulasse, à la limite du lisible :(

Probleme de vectorisation moche des polices

Posté par Antoine le 02/07/2010 10:51
Bonjour Lone Wolf, je suis typiquement dans le cas que tu décris (véctorisation de tout les textes) et le résultat est redoutable... Tu donne une piste (pdffonts) mais peux-tu être plus explicite dans ton debug ?

Merci d'avance,

Antoine

Probleme de vectorisation moche des polices

Posté par Antoine le 02/07/2010 10:52
Bonjour Lone Wolf, je suis typiquement dans le cas que tu décris (vectorisation de tout les textes) et le résultat est redoutable... Tu donne une piste (pdffonts) mais peux-tu être plus explicite dans ton debug ?

Merci d'avance,

Antoine

rasterisation du pdf

Posté par Lone Wolf le 02/07/2010 10:59
Bonjour,

malheureusement, je suis pour le moment sans solution. Quand le problème arrive, il vaut mieux utiliser le pdf d'origine.

Un script (presque) pret à l'emploi

Posté par azerttyu le 07/05/2010 14:24
Bonjour

Ayant du faire face à une problématique similaire, je suis tombé sur cette page. Du coup je propose ces petits ajustement pour en faire un script pret à l'emploi.

<code>
#!/bin/bash

DPI=150
PDF_DESTINATION=""

help() {
echo "Aide de optimize_pdf"
echo "-h : aide ci présente"
echo "-d : (optionnel) résolution du pdf final, par defaut : 150"
echo "-s : fichier source, le fichier doit exister"
echo "-o : fichier cible"
}

full_path() {
if [ -z $1 ]; then
exit;
else
if [ `expr substr ${1:-a} 1 2` != "/" ]; then
FULL_FILE=`pwd`"/"$1
fi
fi
echo $FULL_FILE
}

isNumeric(){ echo "$@" | grep -q -v "[^0-9]" ;}

while getopts "s:o:d:h" flag
do
case $flag in
#Source : fichier source
"s")
PDF_FILE=`full_path $OPTARG`
if [ ! -e $PDF_FILE ]; then
echo "Veuillez donner une source valide"
exit=1
fi
;;
#Output : fichier de destination
"o")
PDF_DESTINATION=$OPTARG
;;
#Dpi : resolution voulue
"d")
if [ -z `isNumeric $OPTARG` ]; then
DPI=$OPTARG
else
echo "Veuillez donner une valeur numerique a votre DPI"
exit=1
fi
;;
"h")
exit=1
;;
esac
done

#Une valeur cible est elle presente ?
if [ -z $PDF_DESTINATION ]; then
echo "Veuillez donner un chemin cible"
exit=1
fi

#Au moins une erreur on ne va plus loin
if [ $exit ]; then
help
exit
fi

pdftops \
-paper match \
-nocrop \
-noshrink \
-nocenter \
-level3 \
-q \
"$PDF_FILE" - \
| ps2pdf14 \
-dEmbedAllFonts=true \
-dUseFlateCompression=true \
-dOptimize=true \
-dProcessColorModel=/DeviceRGB \
-dUseCIEColor=true \
-r72 \
-dDownsampleGrayImages=true \
-dGrayImageResolution=$DPI \
-dAutoFilterGrayImages=false \
-dGrayImageDownsampleType=/Bicubic \
-dDownsampleMonoImages=true \
-dMonoImageResolution=$DPI \
-dMonoImageDownsampleType=/Bicubic \
-dDownsampleColorImages=true \
-dColorImageResolution=$DPI \
-dAutoFilterColorImages=false \
-dColorImageDownsampleType=/Bicubic \
-dPDFSETTINGS=/prepress \
- "$PDF_DESTINATION"
</code>

Posté par fgland le 19/07/2010 14:31
Merci, avec ce script je suis passé d'un fichier de 110Mo à 5,3 !
il s'agissait d'un catalogue dont les images n'avaient pas été redimentionnées

Problème sous ubuntu 10.4

Posté par Loblique le 02/09/2010 05:54
Bonjour,
J'ai rencontré un problème lorsque j'ai installé les paquets nécessaires pour réaliser l'optimisation.
Lorsque je fais apt-get install xpdf-utils, apt me supprime les paquets suivants :
bluez-cups cups cups-driver-gutenprint foo2zjs foomatic-db foomatic-db-engine ghostscript-cups hplip openprinting-ppds poppler-utils pxljr python-pexpect splix
Or, tous ces fichiers me sont utiles pour la gestion de mes imprimantes. Existe-t-il une astuce pour installer xpdf-utils sans supprimer les autres ? Pourquoi existe-t-il un conflit entre ces applications ?

Merci pour votre aide,
Loblique

Problème sous ubuntu 10.4

Posté par Loblique le 02/09/2010 05:55
Bonjour,
J'ai rencontré un problème lorsque j'ai installé les paquets nécessaires pour réaliser l'optimisation.
Lorsque je fais apt-get install xpdf-utils, apt me supprime les paquets suivants :
bluez-cups cups cups-driver-gutenprint foo2zjs foomatic-db foomatic-db-engine ghostscript-cups hplip openprinting-ppds poppler-utils pxljr python-pexpect splix
Or, tous ces fichiers me sont utiles pour la gestion de mes imprimantes. Existe-t-il une astuce pour installer xpdf-utils sans supprimer les autres ? Pourquoi existe-t-il un conflit entre ces applications ?

Merci pour votre aide,
Loblique

xpdf-utils

Posté par Lone Wolf le 02/09/2010 11:52
xpdf-utils a été "remplacé" / "mis à jour" par poppler-utils

Réinstalle ubuntu-desktop, et tout devrait bien fonctionner meme si xpdf-utils n'est pas installé, du moment que poppler-utils le soit.

Bon courage.

Merci

Posté par yamo le 28/02/2011 18:34
Merci, mon fichier PDF fait par OpenOffice sur Ubuntu 10.10 est passé de 241 Mo à 13 Mo!

Merci aussi

Posté par MarbolanGos le 18/05/2011 13:46
Juste pour dire que j'ai utilisé le script pour des images scannées. J'ai été obligé d'adapter la basse résolution à 150 et pas 72 et c'est nickel.

Answer

Posté par The Scientist le 30/11/2011 13:32
La plupart des gens n'ont absolument pas envie de s'emmerder à installer des trucs juste pour réduire la taille d'un pdf, ta solution n'est vraiment pas la plus simple d'utilisation. Mais merci quand même.

service en ligne

Posté par Lone Wolf le 30/11/2011 13:39
J'ai mis en place un service en ligne effectuant cette fonction:

http://www.pdfcruncher.org/


Réalisé avec Plone

Ce site respecte les normes suivantes :

Wikio