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> и перейти в его конец перед тегом </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 --vide --pages input.pdf 5-7,12 -- sortie.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 -- sortie.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 -- sortie.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 pour f dans $(ls ./*.pdf); faire qpdf $f $f.out --rotate=+90; rm$f; mv $f.out $f; fait
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 qualité=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) pour f dans $(ls images/*.jpg); convertissez $f $f.pdf ; fait
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 compressé && pour f in $(ls out*.pdf); faire gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=./compressed/$f $f; fait
11. Effectuez une compression forte d'un fichier 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); convertissez $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 ; pour f dans $(ls *.jpg); faire convertir -redimensionner 25% -qualité 50 $f ./images/img$i.jpg ; soit i=i+1 ; fait
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 ; pour f dans $(ls *.jpg); faire convertir -redimensionner 700x525 -niveau automatique -flou 0,65x0,65+1+0,9+0,04 -qualité 50 $f ./images/img$i.jpg ; soit i=i+1 ; fait
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 -qualité 40% *.jpg
15. EN UNE ACTION : compressez tous les fichiers *.PDF dans outPDF avec les paramètres : résolution 150 ppi, Q=37%, application de niveaux automatiques de luminosité(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) pour p dans $(ls *.pdf); do mkdir -p images && pdftoppm -jpeg -r 150 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); faire mogrify -auto-level -quality 37% $f; convertir $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && echo $p && rm -R images; fait
16. EN UNE ACTION : compressez tous les fichiers "*.PDF" en outPDF avec les paramètres : résolution 120 ppi, Q=30%, conversion en N/B, application de niveaux de luminosité automatiques et netteté de 15%(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 && pour p dans $(ls *.pdf); do mkdir -p images && pdftoppm -jpeg -r 150 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); faire mogrify -colorspace gray -auto-level -sharpen 15% -quality 30% $f; convertir $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && rm -R images; fait
17. EN UNE ACTION : rendre les numérisations plus sombres - compresser tous les fichiers "*.PDF" dans outPDF avec les paramètres : résolution 200 ppi, Q=37%, application des niveaux automatiques, conversion des couleurs en palette de gris et gamma=0,5(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 && pour p dans $(ls pvk.pdf); do mkdir -p images && pdftoppm -jpeg -r 200 -jpegopt quality=100 $p images/pg && for f in $(ls images/pg-*.jpg); faire mogrify -auto-level -gamma 0.5 -colorspace Gray -qualité 37% $f; convertir $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- 'out'$p && echo $p && echo $p && rm -R images; fait
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é") mkdir compressé && 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); faire mogrify -auto-level -quality 37% $f; convertir $f $f.pdf ; done && qpdf --empty --pages ./images/*.pdf -- './compressed/'$p && echo $p && rm -R images; fait

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



Publications connexes