27
janvier
2022
19:21

Opérations avec des fichiers PDF à partir de la ligne de commande Linux

27 janvier 2022 19:21

Au bureau, je traite souvent des fichiers PDF en fusionnant des fichiers et en les compressant. Afin de ne pas redémarrer sous Windows, où j'utilisais auparavant l'utilitaire "PDF tools free", j'ai automatisé ce processus en sélectionnant les commandes appropriées pour la conversion par lots et le traitement des PDF en JPEG, JPEG en PDF, PDF en PDF (réduction de la taille du fichier ).

Article Fonction Commande de terminal
1. Fusionner plusieurs fichiers PDF en un seul fichier de sortie.pdf
infile1.pdf+infile2.pdf+infile3.pdf = output.pdf
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile='output.pdf' 'infile1.pdf' 'infile2.pdf' 'infile3.pdf'

или

qpdf --empty --pages infile1.pdf infile2.pdf -- output.pdf
Fusionner plusieurs pages de fichiers PDF dans un seul fichier de sortie.pdf

infile1.pdf(p.1, 12-13)+infile2.pdf(p.1-10)+infile3.pdf(p.44) = output.pdf
qpdf --empty --pages infile1.pdf 1,12-13 infile2.pdf 1-10 infile3.pdf 44 -- output.pdf
2. Split pages du fichier PDF, de 5 à 7 et 12 vers le nouveau fichier de sortie.pdf qpdf input.pdf --pages . 5-7,12 -- sortie.pdf

ou

qpdf --empty --pages input.pdf 5-7,12 -- output.pdf
Réorganisez les pages du fichier PDF de 1,2,3,4 à 4,3,2,1 et enregistrez le résultat dans un nouveau fichieroutput.pdf qpdf 'infile.pdf' --pages . 4,3,2,1 -- output.pdf
Supprimer la première page du fichier d'entrée composé de 16 pages qpdf infile.pdf out.pdf --pages infile.pdf 2-17 --

or

qpdf 'infile.pdf' --pages . 2-17 -- output.pdf
Supprimer la dernière page du fichier PDF composé de 16 pages qpdf infile.pdf out.pdf --pages infile.pdf 1-16 --
Supprimez quelques pages du fichier PDF d'entrée composé de 17 pages : supprimez la page numéro 6 et les pages comprises entre 10 et 12. qpdf infile.pdf out.pdf --pages infile.pdf 1-5,7-9,13-17 --
3. Faites pivoter toutes les pages du fichier PDF de 180 degrés qpdf in.pdf out.pdf --rotate=+180
Faites pivoter les pages n°1 et n°2 à 90 degrés dans le sens des aiguilles d'une montre qpdf in.pdf' out.pdf --rotate=+90:1-2
Faire pivoter la page 3 à 90 degrés dans le sens inverse des aiguilles d'une montre qpdf in.pdf' out.pdf --rotate=-90:3
Faites pivoter toutes les pages des fichiers PDF du répertoire actuel à 90 degrés dans le sens des aiguilles d'une montre. for f in $(ls ./*.pdf); do qpdf $f $f.out --rotate=+90; rm $f; mv $f.out $f; done
4. Diviser le fichier PDF en pages, chaque page à enregistrer dans un fichier séparé: infile.pdf -> out-1.pdf, out-2.pdf, ..., out-n.pdf qpdf infile.pdf out.pdf --split-pages
5. Diviser le PDF en pages, avec le nom du fichier de sortie donné (masque) outXX.pdf:
infile.pdf -> out01.pdf, out02.pdf, ..., outNN.pdf (Split pages with file mask %d)
qpdf --split-pages=1 infile.pdf out%d.pdf
6. Convertissez un PDF en JPG avec une densité de pixels de 300 dpi et une qualité JPEG q=30 (haute compression), placez les images de chaque page dans le dossier "images", tous les fichiers avec le préfixe "pg-" pour la pagination pg-01 .jpg, pg-02.jpg, etc. mkdir -p images && pdftoppm -jpeg -r 300 -jpegopt quality=30 'infile.pdf' images/pg
7. Convertissez par lots chaque fichier JPG en fichier PDF for f in $(ls images/*.jpg); do convert $f $f.pdf ; done
8. Combinez tous les fichiers PDF du dossier «images» en un seul fichier PDF qpdf --empty --pages ./images/*.pdf -- output.pdf
9. Recompresser un seul fichier PDF (Remarque : l'exécution de cette commande ne réduit parfois pas la taille du fichier : cela dépend du taux de compression du fichier source) gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=compressed.pdf infile.pdf
10. Recompressez tous les fichiers PDF dans le dossier actuel et placez le résultat dans le dossier "compressé"). Le résultat est compressé dans le catalogue.

Voir la note ci-dessus.
mkdir -p compressed && for f in $(ls out*.pdf); do gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=./compressed/$f $f; done
11. Fichier PDF ultra-compressé avec une seule commande mkdir -p images && pdftoppm -jpeg -r 96 -jpegopt quality=30 'infile.pdf' images/pg && for f in $(ls images/pg-*.jpg); do convert $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- outfile.pdf && rm -R images
12. Réduisez la résolution JPG à 25 %, renumérotez dans l'ordre et enregistrez-les dans des fichiers JPG avec une qualité JPEG q=50 (haute compression), placez les images dans le dossier "images" mkdir -p images && i=1 ; for f in $(ls *.jpg); do convert -resize 25% -quality 50 $f ./images/img$i.jpg ; let i=i+1; done
13. Réduisez la résolution JPG à 700x525, appliquez les niveaux automatiques, appliquez le filtre netteté, effectuez une renumérotation dans l'ordre et enregistrez dans des fichiers JPG avec une qualité JPEG q=50 (haute compression), placer les images dans le dossier "images" mkdir -p images && i=1 ; for f in $(ls *.jpg); do convert -resize 700x525 -auto-level -unsharp 0.65x0.65+1+0.9+0.04 -quality 50 $f ./images/img$i.jpg ; let i=i+1; done
14. NOUVEAU : appliquez des niveaux automatiques aux fichiers JPEG, augmentez le niveau de compression JPG à 40 (compression élevée), enregistrez les fichiers sous leurs noms d'origine (écraser les fichiers par-dessus)" mogrify -auto-level -quality 40% *.jpg
15. EN UNE ACTION : Compressez tous les fichiers PDF, avec Auto-Levels appliqués, et placez le résultat dans le dossier "out" avec les noms out*.pdf for p in $(ls *.pdf); do mkdir -p images && pdftoppm -jpeg -r 150 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); do mogrify -auto-level -quality 37% $f; convert $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && echo $p && rm -R images; done
16. EN UNE ACTION : compressez tous les fichiers PDF *.pdf, convertir des pages en niveaux de gris avec les filtres Niveaux automatiques et Netteté appliqués, et placez le résultat dans le même dossier avec les noms out*.pdf shopt -s nocaseglob && for p in $(ls *.pdf); do mkdir -p images && pdftoppm -jpeg -r 150 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); do mogrify -colorspace gray -auto-level -sharpen 15% -quality 30% $f; convert $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && rm -R images; done
17. EN UNE ACTION : Compressez tous les fichiers PDF *.pdf avec les filtres Niveaux automatiques, Redimensionner et Affiner appliqués, placez-les dans le dossier nommé "compressé" mkdir compressed && shopt -s nocaseglob && for p in $(ls *.pdf); do mkdir -p images && pdftoppm -jpeg -r 150 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); do mogrify -auto-level -quality 37% $f; convert $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- './compressed/'$p && echo $p && rm -R images; done

Si une erreur se produit lors de l'exécution d'une des commandes "convert-im6.q16: attempt to perform an operation not allowed by the security policy PDF' @ error/constitute.c/IsCoderAuthorized/421."`, vous devez faire ce qui suit :

  • fichier ouvert policy.xml dans l'éditeur, par exemple, nano. L'emplacement du fichier XML dépend de la version d'ImageMagick /etc/ImageMagick-6/policy.xml (or -7):
    sudo nano /etc/ImageMagick-6/policy.xml
    ou
    sudo nano /etc/ImageMagick-7/policy.xml
  • trouvez le <policymap> section et allez à la fin avant le </policymap> tag
  • insérer une chaîne
    <policy domain="coder" rights="read | write" pattern="PDF" />
  • enregistrer les modifications du policy.xml fichier et quitter l'éditeur.

Dernier changement : 21/11/2023 - la ligne n°16 a été modifiée et la ligne n°17 a été ajoutée.
Traduction en français : 16/02/2024.



Publications connexes