#1 Le 11/10/2022, à 07:10
- waca
[RESOLU] Conversion en lot PDF -> jpg
Bonjour à tou(te)s,
J'ai en gros 200 fichiers .pdf de 2 pages chacuns.
Je voudrais
1°) Ne garder que la page 1 de chacun des fichiers.
2°) Convertir en image ces pages 1; mais que chacune d'elle ne
dépasse pas 190Ko
Un truc/astuce ?
Merci.
Waca
Dernière modification par waca (Le 12/10/2022, à 06:14)
Hors ligne
#2 Le 11/10/2022, à 10:05
- Tawal
Re : [RESOLU] Conversion en lot PDF -> jpg
Hello,
Pour le 1er point, tu peux utiliser pdftk avec une commande telle que :
pdftk source.pdf cat 1 output source_page1.pdf
Il ne reste plus qu'à convertir le pdf en image avec (commande issue du paquet imagemagick) :
convert source_page1.pdf source_page1.jpeg
Pour contrôler le poids de cette image, il va falloir la compresser, là je pêche.
Puis, il faut créer un script afin de traiter par lot.
Bon courage
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#3 Le 11/10/2022, à 10:26
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Merci Tawal,
Ta commande pdftk semble intéressante, mais pense tu possible de faire ça
en 'lot'; ne pas saisir chaque nom source -> nom dest, ce qui reviendrait à
les faire un par une
Hors ligne
#4 Le 11/10/2022, à 10:49
- Tawal
Re : [RESOLU] Conversion en lot PDF -> jpg
Oui c'est possible ... avec un script.
Par exemple :
#!/bin/bash
for f in "$1"/*
do
pdftk "$f" cat 1 output "${f}_page1.jpeg"
autre commande pour compresser le fichier .jpeg obtenu
done
Avec ce script rendu exécutable (chmod +x nom_du_script) et un dossier en argument.
Le savoir n'a d’intérêt que si on le transmet.
Useless Use of Cat Award
Filenames and Pathnames in Shell: How to do it Correctly
À chaque problème sa solution, à chaque solution son moyen, si pas de moyen, toujours le problème !
Hors ligne
#5 Le 11/10/2022, à 11:13
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Super, merci pour ton aide; je vais commencer par ça...
Hors ligne
#6 Le 11/10/2022, à 12:01
- MicP
Re : [RESOLU] Conversion en lot PDF -> jpg
Bonjour
Il se peut que, dans le répertoire donné en paramètre,
il existe aussi d'autres fichiers et sous répertoires qui ne seront donc pas des fichiers de type PDF.
Je propose donc d'ajouter un test dans le script proposé par Tawal
ce qui donnerait :
#!/bin/bash
# Est-ce que le premier paramètre donné est bien un nom de répertoire ?
test -d "$1" || { echo "Donnez en paramètre un nom de répertoire."; exit 1; }
for f in "$1"/*
do
# Est-ce que le fichier trouvé est bien un fichier de type PDF ?
if [[ $(file "$f") =~ "PDF document" ]]; then
fichOut="${f}_page1.jpeg"
pdftk "$f" cat 1 output "$fichOut"
# Tu peux ajouter ici, la ou les autre(s) commande(s) qui vont compresser le fichier "$fichOut" obtenu
fi
done
Mais il nous faudrait aussi les informations qui nous permettront de savoir
comment tu comptes compresser le fichier image obtenu (as-tu prévu d'utiliser un programme particulier ?),
quel format de fichier image compressée tu voudrais obtenir,
et qu'est-ce que tu voudrais que ce script fasse s'il est impossible de créer un fichier compressé d'une taille inférieure ou égale à 190Ko
Dernière modification par MicP (Le 11/10/2022, à 12:09)
Hors ligne
#7 Le 11/10/2022, à 12:53
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Merci MicP (aussi),
J'étais en train d'essayer de comprendre pourquoi je n'arrivais pas à faire fonctionner les autres scripts.
Le tien et "presque" ok... sauf que lorsque j'essaie d'ouvrir (avec la visionneuse) les .jpg en sortie;
la visionneuse me dit:
Impossible de charger l'image « 6EME 071.pdf_page1.jpeg ».
Erreur d'interprétation du fichier d'image JPEG (Not a JPEGfile: starts with 0x25 0x50)
Je n'ai rien prévu pour la compression, les images sont un domaine que je ne maitrise pas,on m'a
refilé ce 'bébé', car je suis quasiment le seul à toucher un peu à l'informatique.
En fait je dois mettre ces 'images' peu importe leur format image, jpg, png autre...dans une appli
qui n'autorise que des fichiers <200Ko
Donc, peu importe la 'sortie', il faut que ça fasse moins de 200Ko (si possible avec une qualité raisonnable
quand mm)
Hors ligne
#8 Le 11/10/2022, à 14:10
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
Bonjour,
la visionneuse me dit:
Impossible de charger l'image « 6EME 071.pdf_page1.jpeg ». Erreur d'interprétation du fichier d'image JPEG (Not a JPEGfile: starts with 0x25 0x50)
Normal, pdftk ne génère que des fichiers pdf.
On peut en fait utiliser uniquement convert d’imagemagick (§2.2).
Par exemple, en reprenant le script de MicP :
#!/bin/bash
# Est-ce que le premier paramètre donné est bien un nom de répertoire ?
test -d "$1" || { echo "Donnez en paramètre un nom de répertoire."; exit 1; }
for f in "$1"/*
do
# Est-ce que le fichier trouvé est bien un fichier de type PDF ?
if [[ $(file "$f") =~ "PDF document" ]]; then
fichOut="${f}_page1.jpg"
convert "$f[0]" "$fichOut" # On peut utiliser ici l’option -quality (cf. man convert) ou bien faire une conversion plus fine en fonction du fichier obtenu (cf. ligne ci-dessous)
# Tu peux ajouter ici, la ou les autre(s) commande(s) qui vont compresser le fichier "$fichOut" obtenu
fi
done
S’il y a erreur de type :
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/421.
voir le §3.1 de la page de doc imagemagick.
En ligne
#9 Le 11/10/2022, à 14:41
- MicP
Re : [RESOLU] Conversion en lot PDF -> jpg
…
S’il y a erreur de type :convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/421.
voir le §3.1 de la page de doc imagemagick.
Oui, c'est exactement le problème que j'ai eu sur mon système,
et pour faire la modification proposée, j'ai lancé la ligne de commandes suivante :
EDIT : J'ai remplacé la ligne de commande que j'avais proposée par celle de la doc :
sudo sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
ce qui a résolu le problème.
=======
J'ai pu limiter à 190Ko maximum la taille du fichier image résultant en ajoutant l'option suivante avant le nom du fichier de sortie : -define jpeg:extent=190kb
mais comme la qualité d'image résultante n'était pas terrible, j'ai ajouté l'option suivante avant le nom du fichier pdf : -density 200
Le contenu du fichier script modifié serait :
#!/bin/bash
jpegTaillMaxi="190kb" # pour option "-define jpeg:extent="
pdfDensity=200 # pour option "-density "
# Est-ce que le premier paramètre donné est bien un nom de répertoire ?
test -d "$1" || { echo "Donnez en paramètre un nom de répertoire."; exit 1; }
for f in "$1"/*
do
# Est-ce que le fichier trouvé est bien un fichier de type PDF ?
if [[ $(file "$f") =~ "PDF document" ]]; then
convert -density $pdfDensity "$f[0]" -define jpeg:extent="$jpegTaillMaxi" "${f}_page1.jpg"
fi
done
Dernière modification par MicP (Le 11/10/2022, à 15:23)
Hors ligne
#10 Le 11/10/2022, à 14:51
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
et pour faire la modification proposée, j'ai lancé la ligne de commandes suivante :
sudo sed -i 's#rights="none" pattern="PDF" />#rights="read | write" pattern="PDF" />#' /etc/ImageMagick-6/policy.xml
La commande de la page de doc :
sudo sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
ne marche pas ?
En ligne
#11 Le 11/10/2022, à 15:01
- MicP
Re : [RESOLU] Conversion en lot PDF -> jpg
…
La commande de la page de doc :sudo sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
ne marche pas ?
Oui, elle fonctionne tout aussi bien, et elle est même plus courte que celle que j'avais proposé
mais je n'avais pas lu jusque là : quand j'ai vu ce qu'il fallait remplacer, j'ai créé une ligne de commande qui a fonctionné et du coup je l'ai proposée.
Dernière modification par MicP (Le 11/10/2022, à 15:02)
Hors ligne
#12 Le 11/10/2022, à 16:34
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
j'ai créé une ligne de commande qui a fonctionné et du coup je l'ai proposée.
Pas de problème.
À mon tour de faire une proposition :
#!/bin/bash
test -d "$1" || { echo "Donnez en paramètre un nom de répertoire."; exit 1; }
for f in "$1"/*
do
if [[ $(file "$f") =~ "PDF document" ]]; then
fichOut="${f}_page1.jpg"
convert "$f[0]" "$fichOut"
SizeOfFichOut=$(du -k "$fichOut" | cut -f1)
if test "$SizeOfFichOut" -ge 200 ; then
quality=$((20000/$SizeOfFichOut))
convert -quality "$quality" "$fichOut" "${fichOut%%.jpg}_Compressed.jpg"
fi
fi
done
En effet, j’ai constaté chez moi que l’option -define jpeg:extent=200KB « alourdissait » les images qui étaient initialement inférieures à 200Ko sans cette option.
J’ai donc préféré faire du traitement au cas par cas.
En ligne
#13 Le 11/10/2022, à 17:51
- MicP
Re : [RESOLU] Conversion en lot PDF -> jpg
C'est effectivement beaucoup plus cohérent que l'utilisation arbitraire d'une taille de fichier en utilisant l'option jpeg:extent=
d'autant que la qualité de l'image résultante n'en sera que meilleure (si possible) avec ta méthode.
=======
Juste pour pinailler un peu, j'utiliserai plutôt la commande stat pour récupérer la taille du fichier
car la commande du retourne plutôt l'espace disque occupé par le fichier
Ce qui donnerait, en Ko :
SizeOfFichOut=$(($(stat -c %s "$fichOut")/1000))
ou en Kio :
SizeOfFichOut=$(($(stat -c %s "$fichOut")/1024))
Mais bon, je me répète pour confirmer : c'est juste pour pinailler
Dernière modification par MicP (Le 11/10/2022, à 18:37)
Hors ligne
#14 Le 12/10/2022, à 05:29
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
C'est animé ici merci à vous...
Un copier/coller du script de Nany me donne ceci à son execution:
corail@corail-asus:~/Bureau/territoire$ ./convert.sh /home/corail/Bureau/territoire
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `/home/corail/Bureau/territoire/6EME 071.pdf_page1.jpg' @ error/convert.c/ConvertImageCommand/3258.
du: impossible d'accéder à '/home/corail/Bureau/territoire/6EME 071.pdf_page1.jpg': Aucun fichier ou dossier de ce type
./convert.sh: ligne 11 : test: : nombre entier attendu comme expression
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `/home/corail/Bureau/territoire/6EME 072.pdf_page1.jpg' @ error/convert.c/ConvertImageCommand/3258.
du: impossible d'accéder à '/home/corail/Bureau/territoire/6EME 072.pdf_page1.jpg': Aucun fichier ou dossier de ce type
./convert.sh: ligne 11 : test: : nombre entier attendu comme expression
Et celui de MicP
corail@corail-asus:~/Bureau/territoire$ ./convert.sh /home/corail/Bureau/territoire
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `/home/corail/Bureau/territoire/6EME 071.pdf_page1.jpg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
convert-im6.q16: no images defined `/home/corail/Bureau/territoire/6EME 072.pdf_page1.jpg' @ error/convert.c/ConvertImageCommand/3258.
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
Dernière modification par waca (Le 12/10/2022, à 05:32)
Hors ligne
#15 Le 12/10/2022, à 05:50
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
nany a écrit :…
S’il y a erreur de type :convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/421.
voir le §3.1 de la page de doc imagemagick.
Oui, c'est exactement le problème que j'ai eu sur mon système,
et pour faire la modification proposée, j'ai lancé la ligne de commandes suivante :
EDIT : J'ai remplacé la ligne de commande que j'avais proposée par celle de la doc :sudo sed -i 's/rights="none" pattern="PDF"/rights="read | write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
ce qui a résolu le problème.
./convert.sh: ligne 11 : test: : nombre entier attendu comme expression
Je n’ai pas cette erreur.
Peut-être faut-il enlever les guillemets autour de $SizeOfFichOut ?
Dernière modification par nany (Le 12/10/2022, à 05:51)
En ligne
#16 Le 12/10/2022, à 06:02
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
C'était bien ça Nany, on y est "presque", sur les 200 fichiers, j'en ai 40 qui sont >200Ko en sortie jpg
Et voici le challenge OK avec le script de MicP; merci, grand merci à vous 2.
Tout est bon, vraiment super top.
Dernière modification par waca (Le 12/10/2022, à 06:13)
Hors ligne
#17 Le 12/10/2022, à 06:19
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
C'était bien ça Nany, on y est "presque", sur les 200 fichiers, j'en ai 40 qui sont >200Ko en sortie jpg
Tu n’as pas des fichiers *_Compressed.jpg ?
En ligne
#18 Le 12/10/2022, à 06:25
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Oui, j'en ai, mais voici un exemple
Fichier jpg
6eme.jpg 209,2kB
6eme_Compressed.jpg 250,5kB
Le 'compressed' est tout le temps supérieur au 'normal'
Hors ligne
#19 Le 12/10/2022, à 06:38
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
Tiens, bizarre ⁉
Mais pourquoi n’as-tu pas des fichiers *_page1.jpg ? Aurais-tu modifié les scripts que nous t’avons présentés ?
Essaie avec stat à la place de du :
#!/bin/bash
test -d "$1" || { echo "Donnez en paramètre un nom de répertoire."; exit 1; }
for f in "$1"/*
do
if [[ $(file "$f") =~ "PDF document" ]]; then
fichOut="${f%%.pdf}_page1.jpg"
convert "$f[0]" "$fichOut"
SizeOfFichOut=$(($(stat -c %s "$fichOut")/1000))
if test $SizeOfFichOut -ge 200 ; then
quality=$((20000/$SizeOfFichOut))
convert -quality "$quality" "$fichOut" "${fichOut%%.jpg}_Compressed.jpg"
fi
fi
done
Dernière modification par nany (Le 12/10/2022, à 06:42)
En ligne
#20 Le 12/10/2022, à 06:45
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Je ne me serai pas permis de modifier la moindre , de ton script, ayant été dev il y a une 30aine
d'années, je ne sais que trop les incidences....
Donc, pour le fun (car mon soucis est résolu), je refais un copier/coller de ton 'nouveau' script avec stat
j'obtiens le mm résultat avec des fichiers compressés > au fichier jpg 'original
Merci encore.
Hors ligne
#21 Le 12/10/2022, à 06:52
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
Ça restera donc un mystère. Peut-être une histoire de version ?
Mon script tourne sur Ubuntu 22.04 LTS et je n’y rencontre pas le même problème que toi.
En ligne
#22 Le 12/10/2022, à 06:58
- waca
Re : [RESOLU] Conversion en lot PDF -> jpg
Peut-être en effet, je suis
Mint 20.3
Bonne fin de semaine et merci encore.
Hors ligne
#23 Le 12/10/2022, à 07:06
- nany
Re : [RESOLU] Conversion en lot PDF -> jpg
Donc une base Ubuntu 20.04. Ceci expliquerait peut-être cela.
Bonne fin de semaine à toi aussi.
En ligne
#24 Le 12/10/2022, à 07:30
- iznobe
Re : [RESOLU] Conversion en lot PDF -> jpg
Bonjour ,
[HS] @nany et aux aidants en général , si vous avez quelques minutes , j' aurais besoin d' un peu d' aide , pour un downgrade de paquets , en particulier pour la question dans ce message https://forum.ubuntu-fr.org/viewtopic.p … #p22608634
a propos des ligne de pin priority a inserer dans le fichier , merci a vous .
[/HS]
retour COMPLET et utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .
Hors ligne