Aller au contenu

Prérequis: Avoir installé Ghostscript. On utilisera ensuitela commande gs (ghostscript)

gs -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o output.pdf file.pdf
  • Définir le périphérique de sortie -sDEVICE=pdfwrite
  • Utiliser -dPDFSETTINGS en précisant les options: /screen: résolution plus basse /ebook: résolution medium /printer: optimisé pour l'impression /prepress: optimisé pour la diffusion /default: peut avoir un poids supérieur

  • -q option QUIET qui permet d'éviter le message au départ

  • -o option OUTPUT (sortie)

Inspiré et traduit du site: https://unix.stackexchange.com/questions/274428/how-do-i-reduce-the-size-of-a-pdf-file-that-contains-images

Version pour Windows

Il faudra préciser gswin64.exe ou gswin32.exe

gswin64.exe -sDEVICE=pdfwrite -dPDFSETTINGS=/ebook -q -o output.pdf file.pdf

Voir la documentation officielle: https://ghostscript.readthedocs.io/en/gs10.0.0/Use.html

Script de compression PDF

Je crée mon fichier ~/.local/share/nautilus/scripts/CompressPDF et je lui ajoute l’exécution avec chmod +x.

ATTENTION : Le script utilisé a des dépendances pour la compression notamment, veuillez installer :

sudo apt install ghostscript
#!/bin/bash

# AUTHOR: (c) Ricardo Ferreira
# NAME: Compress PDF 1.4
# DESCRIPTION: A nice Nautilus script with a GUI to compress and optimize PDF files
# REQUIRES: ghostscript, poppler-utils, zenity
# LICENSE: GNU GPL v3 (http://www.gnu.org/licenses/gpl.html)
# WEBSITE: https://launchpad.net/compress-pdf

# Messages
  # English (en-US)
  error_nofiles="No file selected."
  error_noquality="No optimization level selected."
  error_ghostscript="PDF Compress requires the ghostscript package, which is not installed. Please install it and try again."
  error_nopdf="The selected file is not a valid PDF archive."
  label_filename="Save PDF as..."
  label_level="Please choose an optimization level below."
  optimization_level="Optimization Level"
  level_default="Default"
  level_screen="Screen-view only"
  level_low="Low Quality"
  level_high="High Quality"
  level_color="High Quality (Color Preserving)"
  job_done="has been successfully compressed"
  filename_postpend="-optimized"

case $LANG in

 fr*)
  # French (fr-FR) by Astromb
  error_nofiles="Aucun fichier sélectionné"
  error_noquality="Aucun niveau d'optimisation sélectionné"
  error_ghostscript="PDF Compress a besoin du paquet ghostscript, mais il n'est pas installé. Merci de l'installer et d'essayer à nouveau."
  error_nopdf="Le fichier que vous avez sélectionné n'est pas un PDF valide."
  label_filename="Sauvegarder le PDF sous..."
  label_level="Merci de choisir, ci-dessous, un niveau d'optimisation."
  optimization_level="Niveau d'optimisation"
  level_default="Défaut"
  level_screen="Affichage à l'écran"
  level_low="Basse qualité"
  level_high="Haute qualité"
  level_color="Haute qualité (Couleurs préservées)"
  filename_postpend="-optimisé";;

esac

VERSION="1.4.1"
ZENITY=$(which zenity)

# Check if Ghostscript is installed
GS="/usr/bin/ghostscript"
if [ ! -x $GS ]; then
        $ZENITY --error --title="Compress PDF "$VERSION"" --text="$error_ghostscript"
        exit 0;
fi

# Check if the user has selected any files
if [ $# -eq 0 ]; then
        $ZENITY --error --title="Compress PDF "$VERSION"" --text="$error_nofiles"
        exit 0;
fi

# Ask the user to select a compressing format
selected_level=$($ZENITY --list --title="Compress PDF "$VERSION"" --text "$label_level" --radiolist --column "" --column "$optimization_level" TRUE "$level_default" FALSE "$level_screen" FALSE "$level_low" FALSE "$level_high" FALSE "$level_color")
if [ -z "$selected_level" ]; then
        $ZENITY --error --title="Compress PDF "$VERSION"" --text="$error_noquality"
        exit 0;
fi

# Select the optimization level to use
case $selected_level in
        "$level_default")
                COMP_COMMAND="/default"
        ;;
        "$level_screen")
                COMP_COMMAND="/screen"
        ;;
        "$level_low")
                COMP_COMMAND="/ebook"
        ;;
        "$level_high")
                COMP_COMMAND="/printer"
        ;;
        "$level_color")
                COMP_COMMAND="/prepress"
        ;;
esac

# Choose output file name
temp_filename=.temp-mytmppdf.pdf

if [ $# -eq 1 ] ; then
 pdf_file=$(basename "$1")
 suggested_filename=${pdf_file%.*}${filename_postpend}.${pdf_file##*.}
 output_filename=$($ZENITY --file-selection --save --confirm-overwrite --filename="$suggested_filename" --title="$label_filename")
 if [ "$?" = 1 ] ; then
         exit 0;
 fi
fi

for arg in "$@"
do
 if [ $# -ne 1 ] ; then
  pdf_file=$(basename "$arg")
  output_filename=${pdf_file%.*}${filename_postpend}.${pdf_file##*.}
 fi

 # Check if the selected file is a PDF
 mimetype=$(file -b -i "$arg")
 if [ -z "`echo $mimetype | grep -i 'pdf' `" ]; then
  $ZENITY --error --title="Compress PDF "$VERSION"" --text="$error_nopdf"
     exit 0;
 fi

 # Extract metadata from the original PDF
 pdfinfo "$arg" | sed -e 's/^ *//;s/ *$//;s/ \{1,\}/ /g' -e 's/^/ \//' -e '/CreationDate/,$d' -e 's/$/)/' -e 's/: / (/' > .pdfmarks
 sed -i '1s/^ /[/' .pdfmarks
 sed -i '/:)$/d' .pdfmarks
 echo " /DOCINFO pdfmark" >> .pdfmarks

 # Execute ghostscript while showing a progress bar
 (echo "0" ;
  gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=$COMP_COMMAND -dNOPAUSE -dQUIET -dBATCH -sOutputFile="$temp_filename" "$arg" .pdfmarks
  rm .pdfmarks
  echo "100") | (if `$ZENITY --progress --pulsate --auto-close --title="Compress PDF "$VERSION""`;
                  then
                      mv -f "$temp_filename" "$output_filename" &
                      notify-send "Compress PDF" "$pdf_file $job_done"
                  else
                      killall gs
                      rm "$temp_filename"
                      exit
                  fi)
done

Copié de ce site: https://r4ven.fr/blog/ubuntu-compress-pdf-nautilus/