Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/10/2022, à 08: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, à 07:14)

Hors ligne

#2 Le 11/10/2022, à 11: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 wink


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, à 11: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  sad  sad

Hors ligne

#4 Le 11/10/2022, à 11: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, à 12: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, à 13: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, à 13:09)

Hors ligne

#7 Le 11/10/2022, à 13: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, à 15:10

nany

Re : [RESOLU] Conversion en lot PDF -> jpg

Bonjour,



waca a écrit :

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.

Hors ligne

#9 Le 11/10/2022, à 15:41

MicP

Re : [RESOLU] Conversion en lot PDF -> jpg

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.

=======
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, à 16:23)

Hors ligne

#10 Le 11/10/2022, à 15:51

nany

Re : [RESOLU] Conversion en lot PDF -> jpg

MicP a écrit :

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 ?

Hors ligne

#11 Le 11/10/2022, à 16:01

MicP

Re : [RESOLU] Conversion en lot PDF -> jpg

nany a écrit :


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, à 16:02)

Hors ligne

#12 Le 11/10/2022, à 17:34

nany

Re : [RESOLU] Conversion en lot PDF -> jpg

MicP a écrit :

j'ai créé une ligne de commande qui a fonctionné et du coup je l'ai proposée.

Pas de problème. smile

À 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.

Hors ligne

#13 Le 11/10/2022, à 18: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, à 19:37)

Hors ligne

#14 Le 12/10/2022, à 06:29

waca

Re : [RESOLU] Conversion en lot PDF -> jpg

C'est animé ici smile  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, à 06:32)

Hors ligne

#15 Le 12/10/2022, à 06:50

nany

Re : [RESOLU] Conversion en lot PDF -> jpg

waca a écrit :
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/408.
MicP a écrit :
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.

 


waca a écrit :
./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, à 06:51)

Hors ligne

#16 Le 12/10/2022, à 07: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, à 07:13)

Hors ligne

#17 Le 12/10/2022, à 07:19

nany

Re : [RESOLU] Conversion en lot PDF -> jpg

waca a écrit :

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 ?

Hors ligne

#18 Le 12/10/2022, à 07: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, à 07: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, à 07:42)

Hors ligne

#20 Le 12/10/2022, à 07: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, à 07: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.

Hors ligne

#22 Le 12/10/2022, à 07: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, à 08: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. wink

Hors ligne

#24 Le 12/10/2022, à 08: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 utilisable de commande
MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne