Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 05-12-2013 21:37:34

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

[Résolu] Création .pdf à partir de .jpg

Bonjour,

je souhaiterai faire un script pour convertir des fichiers .jpg en .pdf
avec la commande qui va bien

convert *.jpg monfichier.pdf



je souhaiterai pouvoir automatiser la création à partir des répertoires
pour expliquer:
/dossier1
                /fichier1.jpg
                /fichier2.jpg
                /fichier3.jpg
/dossier2
                /fichier1.jpg
                /fichier2.jpg
                /fichier3.jpg
...
l'idéal serait de pouvoir créer, dans ce cas, 2 fichiers .pdf contenant les fichiers de leur dossier respectif.

Je ne suis pas arriver à grand chose.
Si quelqu'un peut m'aider et m'expliquer comment procéder.

Merci

Dernière modification par nIQnutn (20-12-2013 22:44:15)

Hors ligne

#2 06-12-2013 09:28:32

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

C'est un bon exercice, moi je ferais comme ça:

#!/bin/bash
for i in  $(ls -d */);
do
      echo "dossier ="$i
      convert $i*.jpg  $i"monfichier.pdf"
      echo "résultat = "$(ls ./$i*.pdf)
done


une boucle for avec comme entrée la liste des dossiers.
smile

Hors ligne

#3 06-12-2013 10:24:35

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

Merci, c'est exactement ce que j'attendais.
je vais adapter un peu pour créer le .pdf à la racine et et renommer le fichier à partir du dossier et ça sera parfait.

Hors ligne

#4 06-12-2013 11:10:01

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

Ok, cool, n'hésite pas à poster ton script ici pour que l'on voit ce que ça donne.

Hors ligne

#5 06-12-2013 12:36:56

phreg
Membre
Distrib. : Antix MX-15
Noyau : 4.3-0-liquorix-686
(G)UI : Xfce 4.12
Inscription : 02-04-2011

Re : [Résolu] Création .pdf à partir de .jpg

Juste un détail : si les photos n'ont pas la même source, elles peuvent avoir des extensions différentes (jpg, jpeg, JPG...)
Quelques lignes convert à ajouter ou un rename global arrange tout ça.

Hors ligne

#6 06-12-2013 14:28:43

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

Un truc comme ça fonctionne mais ça remonte plein d'erreur parce qu'il essaye de convertir des fichiers qui n'existe pas,

convert -compress jpeg $i*{.png,.PNG,.jpg,.JPG}  $i"monfichier.pdf"


du coup je fais une redirection vers /dev/null des erreurs pour limiter la pollution, mais c'est pas top:

2>/dev/null


Du coup j'obtiens ça:

#!/bin/bash
for i in  $(ls -d */);
do
        echo "dossier ="$i
        convert -compress jpeg $i*{.png,.PNG,.jpg,.JPG}  $i"monfichier.pdf" 2>/dev/null
        echo "résultat = "$(ls ./$i*.pdf)
done



Pour faire mieux, il faudrait coller un if quelque part.

Hors ligne

#7 06-12-2013 16:06:29

phreg
Membre
Distrib. : Antix MX-15
Noyau : 4.3-0-liquorix-686
(G)UI : Xfce 4.12
Inscription : 02-04-2011

Re : [Résolu] Création .pdf à partir de .jpg

{.png,.PNG,.jpg,.JPG}

La liste de toutes les possibilités est longue si on veut que ça marche à tous les coups (Png, Jpg....) et pour les fichiers GIF, TIF ... aussi.
Je te conseille plus de partir sur l'utilisation de mimetype qui te retournera quelque chose comme image/gif, image/jpeg, image/png, image/tiff qui seront plus aisés dans les if.

Hors ligne

#8 06-12-2013 16:22:26

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

j'ai fait ça comme un cochon, mais ça devrait convertir tous les formats gérés par convert


echo 'Entrer le chemin des images à convertir en PDF';
read pathinput

# pour effectuer un drag&drop du dossier à traiter, certains caractères s'ajoutent à la fin
pathinput=$(echo "$pathinput" | sed   "s/^'//;s/ $//;s/'$//")
echo 'path :' $pathinput;

cd "$pathinput" ;

 for i in  $(ls -d */);
do


nomdossier="$(basename "$i")"

      convert "$i*.*" "$nomdossier.pdf"

done

echo 'Appuyez sur une touche pour finir';
read OK

 


Par contre j'ai une erreur si mon dossier contient un espace. Du coup je sais pas comment faire.

Au pire avant de lancer, je ferais

detox  -s utf_8 *



Par contre à la création du fichier PDF, les images ne sont pas forcément identiques à l'ordre afficher dans le dossier.

Pour les fichiers qui ne peuvent pas être convertis j'ai effectivement des messages d'erreurs. Cela n’empêche pas la création du fichier.


Même si ça peut être améliorer ça marche pour ce que je veux faire.
Je complèterai si je fais des modifications.

Dernière modification par nIQnutn (06-12-2013 16:23:50)

Hors ligne

#9 06-12-2013 17:17:12

david96
Invité

Re : [Résolu] Création .pdf à partir de .jpg

nIQnutn a écrit :

Par contre j'ai une erreur si mon dossier contient un espace. Du coup je sais pas comment faire.



en remplaçant tout simplement :

cd "$pathinput" ;


par

cd "\"$pathinput\"" ;



Ça devrait le faire non ?


Sinon, au cas où, tu peux rajouter l'expression régulière suivante :

sed 's/ /\\ /g'

Dernière modification par Invité-2 (06-12-2013 17:20:02)

#10 07-12-2013 09:39:13

Thuban
Modérateur
Distrib. : OpenBSD
Noyau : current
(G)UI : xfce ou dwm
Inscription : 09-01-2009
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

Ou bien en protégeant le contenu :

cd "${pathinput}"


YA3HGA-H

Hors ligne

#11 07-12-2013 12:16:19

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 28-09-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

phreg a écrit :

{.png,.PNG,.jpg,.JPG}

La liste de toutes les possibilités est longue si on veut que ça marche à tous les coups (Png, Jpg....) et pour les fichiers GIF, TIF ... aussi.
Je te conseille plus de partir sur l'utilisation de mimetype qui te retournera quelque chose comme image/gif, image/jpeg, image/png, image/tiff qui seront plus aisés dans les if.



Bonne remarque, pour utiliser le mime-type, il faut tester en remplaçant le "ls -d */ " par ça:

file -i * | grep -e image/png -e image/jpeg | awk -F":" '{ print $1}'

Hors ligne

#12 16-12-2013 16:28:30

nIQnutn
Modérateur
Lieu : Lyon
Distrib. : Jessie
Noyau : Linux 3.16-amd64
(G)UI : XFCE
Inscription : 16-03-2012
Site Web

Re : [Résolu] Création .pdf à partir de .jpg

kao a écrit :

phreg a écrit :

{.png,.PNG,.jpg,.JPG}

La liste de toutes les possibilités est longue si on veut que ça marche à tous les coups (Png, Jpg....) et pour les fichiers GIF, TIF ... aussi.
Je te conseille plus de partir sur l'utilisation de mimetype qui te retournera quelque chose comme image/gif, image/jpeg, image/png, image/tiff qui seront plus aisés dans les if.



Bonne remarque, pour utiliser le mime-type, il faut tester en remplaçant le "ls -d */ " par ça:

file -i * | grep -e image/png -e image/jpeg | awk -F":" '{ print $1}'



Je n'ai pas réussi avec l'utilisation de mime-type (désolé je comprend pas tout).

echo 'Entrer le chemin des images à convertir en PDF';
read pathinput

# pour effectuer un drag&drop du dossier à traiter, certains caractères s'ajoutent à la fin
pathinput=$(echo "$pathinput" | sed   "s/^'//;s/ $//;s/'$//")
echo 'path :' $pathinput;

cd "$pathinput" ;

 for i in  "$(ls -d */)";
do


nomdossier="$(basename "$i")"

      convert "$i*.*" "$nomdossier.pdf"

done

echo 'Appuyez sur une touche pour finir';
read OK


J'ai rajouté des parenthèses pour éviter d'avoir des pb avec les espaces dans les noms de dossier.


J'en profite aussi pour ajouter un script pour redimensionner des images. J'utilise ça pour pouvoir lire facilement des manga / documents sur ma liseuse sans avoir a zoomé systématiquement.
Les images qui sont en mode paysage sont découpées en 2 en fonction du ratio de la liseuse.

echo 'Entrer le chemin du dossier de sortie';
read pathoutput

pathoutput=$(echo "$pathoutput" | sed  "s/^'//;s/ $//;s/'$//")
echo 'path :' $pathoutput;
echo ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -';
cd "$pathinput";

echo 'Indiquer le sens de lectur: 1 pour Normal (gauche à droite) ou 9 pour Manga (droite à gauche)'
read senslecture
echo 'Sens de lecture :' $senslecture;

if  [ $senslecture -eq 1 ]; then  
pagegauche=1
pagdroite=2;
elif [ $senslecture -eq 9 ];  then  
pagegauche=2
pagdroite=1;
else
pagegauche=1
pagdroite=2;
    echo "Par défaut les pages seront découpées dans le sens gauche -> droite"
fi
echo ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -';
# dimension tablette
largeurref=758
hauteurref=1024

find . -name '*.jpg' -o -name '*.jpeg' -o -name '*.JPG' -o -name '*.JPEG'  | while read filename

do

# width
largeur=`identify -format "%w" "$filename"`
# height
hauteur=`identify -format "%h" "$filename"`

largeurcalc=$((($largeurref*$hauteur/$hauteurref)-1))
offset=$(($largeur-$largeurcalc))

if [ ! -d "$pathoutput/`dirname "$filename"`" ]; then
mkdir  "$pathoutput/`dirname "$filename"`";
fi

ratioref=$(($largeurref/$hauteurref))
ratio=$(($largeur/$hauteur))


if [ $ratio -le $ratioref ]; then
    echo "mv $filename"; mv "$pathinput/$filename" "$pathoutput/$filename";

elif [ $ratio -gt $ratioref ]; then
    echo "crop $filename";

 convert  -crop  "$largeurcalc"x"$hauteur"+0+0  "$filename" "$pathoutput/${filename%.*}_$pagegauche.jpg";
 convert  -crop  "$largeurcalc"x"$hauteur"+"$offset"+0  "$filename" "$pathoutput/${filename%.*}_$pagdroite.jpg";

# convert  -crop  "$largeurcalc"x"$hauteur"+0+0  -resize x"$hauteurref" "$filename" "$pathoutput/${filename%.jpg}_$pagegauche.jpg";
# convert  -crop  "$largeurcalc"x"$hauteur"+"$offset"+0 -resize x"$hauteurref" "$filename" "$pathoutput/${filename%.jpg}_$pagdroite.jpg";
 rm "$filename" ;


else
    echo "Nawak"
read nawak
fi
done;



echo 'Appuyez sur une touche pour finir';
read OK



J'utilise les deux scripts pour convertir mes documents dans un format adapté pour liseuse.

Dernière modification par nIQnutn (16-12-2013 16:31:08)

Hors ligne

Pied de page des forums