27
janvier
2022
19:21

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

27 janvier 2022 19:21

Au travail, je dois souvent travailler avec 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 (compression).

Préparation :

1) Installez les packages nécessaires :

sudo apt install poppler-utils imagemagick qpdf

2) Configurez le fichier XML du programme imagemagick

Sinon, une erreur se produira lors de l'exécution de l'une des commandes "convert-im6.q16: attempt to perform an operation not allowed by the security policy PDF' @ error/constitute.c/IsCoderAuthorized/421."

Nous devons éditer le fichier Policy.xml :

  • ouvrir le fichier pour le modifier /etc/ImageMagick-6/policy.xml(ou -7 selon version) :
    sudo nano /etc/ImageMagick-6/policy.xml
    ou
    sudo nano /etc/ImageMagick-7/policy.xml
  • trouver la section <policymap> et allez jusqu'à la fin avant le tag </policymap>
  • insérer une ligne
    <policy domain="coder" rights="read | write" pattern="PDF" />
  • enregistrer les modifications du fichier policy.xml

 

Solutions prêtes :

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

ou

qpdf --empty --pages infile1.pdf infile2.pdf -- output.pdf
Fusionner plusieurs pages de divers fichiers PDF (Fusionner plusieurs pages de fichiers PDF en un seul fichier)

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. Isoler à partir du fichier pages 5-7 et 12 et enregistrez-les dans un fichier séparé (Divisez les pages 5 à 7 et 12 dans le nouveau fichier output.pdf) qpdf input.pdf --pages . 5-7,12 -- sortie.pdf

ou

qpdf --empty --pages input.pdf 5-7,12 -- output.pdf
Modifier l'ordre des pages dans le fichier d'entrée de 1 2 3 4 à 4 3 2 1 (les pages sont réorganisées en 4,3,2,1), enregistrez dans un nouveau fichier sortie.pdf (enregistrez dans un nouveau fichier sortie.pdf) qpdf 'infile.pdf' --pages . 4,3,2,1 -- output.pdf
A partir d'un dossier de 17 pages,supprimer première (Supprimer la première page d'un fichier composé de 16 pages) qpdf infile.pdf out.pdf --pages infile.pdf 2-17 --

ou

qpdf 'infile.pdf' --pages . 2-17 -- output.pdf
A partir d'un dossier de 17 pages,supprimer dernière (Supprimer la dernière page d'un fichier composé de 16 pages) qpdf infile.pdf out.pdf --pages infile.pdf 1-16 --
A partir d'un dossier de 17 pages,supprimer pages spécifiées : n° 6 et n° 10-12 (à partir d'un fichier composé de 17 pages, supprimer la page numéro 6 et la plage 10-12) qpdf infile.pdf out.pdf --pages infile.pdf 1-5,7-9,13-17 --
3. Rotation toutes les pages 180 degrés (Faire pivoter toutes les pages de 180 degrés) qpdf in.pdf sortie.pdf --rotate=+180
Faire 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
Tournez la page numéro 3 vers 90 degrés dans le sens inverse des aiguilles d'une montre qpdf in.pdf out.pdf --rotate=-90:3
Faites pivoter tous les fichiers PDF du répertoire actuel vers 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 PDF par page, enregistrez chaque page dans un fichier PDF distinct (pages divisées) : infile.pdf -> out-1.pdf, out-2.pdf, ..., out-n.pdf qpdf infile.pdf out.pdf --split-pages
5. Diviser le PDF par page, enregistrez chaque page dans un fichier PDF séparé (Diviser le PDF sur les pages avec le masque de fichier de sortie)indiquant le masque fichier : infile.pdf -> out01.pdf, out02.pdf, ..., outNN.pdf (Pages divisées avec le masque de fichier %d) qpdf --split-pages=1 infile.pdf out%d.pdf
6. Convertir 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 "photos", fichiers avec le préfixe "pg-" numérotation des pages pg-01.jpg, pg-02.jpg, etc. mkdir -p images && pdftoppm -jpeg -r 300 -jpegopt quality=30 'infile.pdf' images/pg
7. Convertissez des fichiers *.jpg en fichiers PDF sans les fusionner (Convertir par lots des fichiers JPG en fichiers PDF sans combiner) for f in $(ls images/*.jpg); do convert $f $f.pdf ; done
8. Fusionner tous les fichiers PDF du répertoire images en un seul fichier PDF "output.pdf" (Combinez tous les PDF du dossier « images » en un seul fichier PDF) qpdf --empty --pages ./images/*.pdf -- output.pdf
9. Pince un fichier infile.pdf en compressé.pdf (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. Compressez tous les fichiers out*.PDF du répertoire actuel avec une seule commande (Recompressez tous les fichiers PDF dans le dossier actuel et placez le résultat dans le dossier "compressé"). Placez le résultat dans le répertoire compressé.

Voir. note ci-dessus.
mkdir -p compressed && for f in $(ls *.pdf); do gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=./compressed/$f $f; done
11. Effectuez une forte compression du fichier infile.pdf avec une seule commande (Faire une ultra compression du fichier PDF) 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 %, fais renumérotation dans l'ordre et enregistrer dans des fichiers JPG avec qualité JPEG q=50 (haute compression), placez les images dans le dossier "photos" 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 à 700 x 525, appliquez des niveaux automatiques luminosité (niveaux automatiques), un peu aiguiser (aiguiser), faire renumérotation dans l'ordre et enregistrer dans des fichiers JPG avec qualité JPEG q=50 (haute compression), placez les images dans le dossier "photos" 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 taux de compression JPG à 40 (forte compression), enregistrez les fichiers sous les noms d'origine (écraser les fichiers)" mogrify -auto-level -quality 40% *.jpg
15. EN UNE ACTION : compressez tous les fichiers *.PDF en *PDF avec les paramètres : résolution 150 ppi, Q=37%, application des niveaux automatiques. Placez le résultat dans le dossier "out". (Compressez tous les fichiers PDF en une seule action, avec des niveaux automatiques appliqués, et placez le résultat dans le même dossier avec les noms out*.pdf) mkdir out && 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 sources "*.PDF" en *.PDF avec les paramètres : résolution 120 ppi, Q=30%, conversion en N/B, application de niveaux de luminosité automatiques et netteté de 15%. Placez le résultat dans le dossier "out". (Compressez tous les fichiers PDF *.pdf en une seule action, avec les niveaux automatiques et la netteté appliqués, et placez le résultat dans le même dossier avec les noms out*.pdf) shopt -s nocaseglob && mkdir out && 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 : rendez les numérisations plus sombres - compressez tous les fichiers "*.PDF" avec les paramètres : résolution 200 ppi, Q=37%, application de niveaux automatiques, conversion des couleurs en palette de gris et gamma=0,5. Placez le résultat dans le dossier "out". (Compressez tous les fichiers PDF *.pdf en une seule action, en les rendant plus sombres - avec les niveaux automatiques, les niveaux de gris et le gamma=0,5 appliqués, et placez le résultat dans le même dossier avec les noms out*.pdf) shopt -s nocaseglob && mkdir out && for p in $(ls pvk.pdf); do mkdir -p images && pdftoppm -jpeg -r 200 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); do mogrify -auto-level -gamma 0.5 -colorspace Gray -quality 37% $f; convert $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- './out/'$p && echo $p && echo $p && rm -R images; done
18. EN UNE ACTION : compressez tous les fichiers "*.PDF" avec les paramètres : résolution 120 ppi, Q=30%, application des niveaux automatiques de luminosité, placez le résultat dans le dossier "compressé" (Compressez tous les fichiers PDF en une seule action, avec les niveaux automatiques et la netteté appliqués, placez-les dans le dossier nommé "compressé") shopt -s nocaseglob && mkdir out && 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 && rm -R images; done

Dernier changement : 25/06/2024 - la première section « Préparation » a été ajoutée.



Publications connexes