#1 Le 14/12/2024, à 18:08
- cristobal78
(résolu) script qui fait tourner un pdf
bonjour à tous
J'aurai besoin de vos lumières pour m'expliquer pourquoi mon script qui marche une fois, ne marche pas deux fois !
Voici le script :
#!/bin/bash
################################################################################################
# ceci est un script nemo : rot-pdf-90-d
# fait tourner les fichiers pdf sélectionnés (par CTRL-Click droit) de 90 deg (1/4 tour à droite)
# nécessite l'installation préalable de : pdftk
################################################################################################
fichier="$1"
nomficsansext=$(basename -s .pdf "$fichier") # nom du fic sans extension
# execute la rotation de 90 deg. et renomme le fichier
pdftk "$fichier" cat 1-endeast output "$nomficsansext"-rot90d.pdf
Ce nemo script qui s'exécute suite à un click droit sur un fichier .pdf quelconque le fait tourner de 90 degrés vers la droite et le renomme en lui ajoutant un suffixe "-rot90d"
Ça marche. La rotation de 90 degrés s'effectue.
Là où je ne comprends plus, c'est que quand j'applique ce script au résultat précédent (donc sur le fichier qui vient de tourner de 90 deg) le script est inopérant alors que je m'attendais à une deuxième rotation vers la droite, c-à-d à une rotation totale de 180 degrés par rapport au fichier d'origine.
Dernière modification par cristobal78 (Le 16/12/2024, à 18:26)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#2 Le 14/12/2024, à 18:15
- sputnick
Re : (résolu) script qui fait tourner un pdf
Salut,
effectivement, cela ne fonctionne pas deux fois consécutives.
Peut-être peux tu créer un script pour tourner à 180° pour contourner le problème.
Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr
Hors ligne
#3 Le 14/12/2024, à 18:26
- Sciensous
Re : (résolu) script qui fait tourner un pdf
essaye un suffixe différent de -90d ... QvDd (QuatreVingtDixDroite) ?
(est-ce le - ou le 90 qui fait bloquer ?)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#4 Le 14/12/2024, à 19:09
- sputnick
Re : (résolu) script qui fait tourner un pdf
Mon intuition (ce n'est pas très scientifique, j'en conviens) c'est que le PDF modifié n'est plus vraiment un vrai PDF mais une image avec une enveloppe PDF.
Je peux me tromper.
Voir:
od -c rotated.pdf
Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr
Hors ligne
#5 Le 14/12/2024, à 19:17
- cqfd93
Re : (résolu) script qui fait tourner un pdf
Bonjour,
Je ne connais pas trop pdftk, mais d'après le man, il y a l'option rotate, est-ce que tu l'as essayée ?
Et sinon, pour éliminer un problème avec le nom du fichier généré, tu as essayé en le renommant avant de ré-exécuter ton script ?
− cqfd93 −
Hors ligne
#6 Le 14/12/2024, à 19:44
- cristobal78
Re : (résolu) script qui fait tourner un pdf
Merci à tous et je vais essayer de répondre ;
@ cqfd : option "rotate" essayée, mais sans succès, même problème. J'avais aussi essayé en renommant différemment le pdf obtenu après premier passage du script.
@ sputnick : je me suis dit ça aussi mais je n'ai pas la moindre idée de la manière de le prouver
@ sputnick : l'option 180 marche mais la raison d'être de mon script c'est (ou plutôt c'était ! ) de se dire je n'écris qu'un seul script que j'utilise :
1 fois pour une rot de 90 à droite
2 fois pour un retournement de 180 deg et
3 fois pour 3/4 de tour à droite (qui est aussi une fois 90 deg à gauche)
Cela aurait permis d'éviter d'écrire 3 scripts un pour chaque type de rotation !
@ sciensious : j'ai fait aussi un script effectuant rotation de -90 degré (1/4 de tour à gauche). Le pb apparait chez moi qd j'applique le script sur le fichier initial modifié par le script.
une solution ridicule serait de
convertir le pdf en jpeg
faire tourner le jpeg
convertir le jpeg en pdf
Modération : merci de respecter la langue du forum qui est le français, pas le SMS.
Dernière modification par cqfd93 (Le 14/12/2024, à 20:35)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#7 Le 14/12/2024, à 20:37
- cqfd93
Re : (résolu) script qui fait tourner un pdf
Il te reste la solution de faire un script qui te propose le choix entre les 3 rotations, avec zenity c'est facile.
− cqfd93 −
Hors ligne
#8 Le 14/12/2024, à 20:39
- Watael
Re : (résolu) script qui fait tourner un pdf
@ sputnick : l'option 180 marche mais la raison d'être de mon script c'est (ou plutôt c'était ! ) de se dire je n'écris qu'un seul script que j'utilise :
1 fois pour une rot de 90 à droite
2 fois pour un retournement de 180 deg et
3 fois pour 3/4 de tour à droite (qui est aussi une fois 90 deg à gauche)Cela aurait permis d'éviter d'écrire 3 scripts un pour chaque type de rotation !
mauivaise idée
#!/bin/bash
#d'après https://linux.die.net/man/1/pdftk
declare -A Angles=( [0]=N [90]=E [180]=S [270]=W [-90]=R [+90]=L [+180]=D )
fichier=$1 #TODO: check fichier est un fichier, et est un pdf ayant une extension .pdf
angle=${2:-0} #TODO: ou arrêter le script en l'absence de correspondance entre le second argument et les indices du tableau Angles
pdftk "$fichier" cat 1-end${Angles[$angle]} output "${fichier/%.pdf /-rot90d.pdf}"
à appeler ainsi :
$ pdfRotate nomFichier.pdf 90
par exemple
/!\ pas testé.
Dernière modification par Watael (Le 14/12/2024, à 20:40)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 15/12/2024, à 00:33
- cristobal78
Re : (résolu) script qui fait tourner un pdf
Avec un peu ou beaucoup de chacun de vos conseils - merci à vous tous - je suis arrivé à ce script unique qui marche au poil :
#!/bin/bash
###################################################################################
# nom du script : rot-pdf
# modif de l'orientation finale des fichiers pdf sélectionnés (par CTRL-Click droit)
# nécessite l'installation préalable de : pdftk
###################################################################################
format_in="PDF"
est_pas="Fin du programme :\n\n ce fichier n'est pas au format "
op_en_cours="Opération en cours... \n\nCliquer sur Valider dès que la barre est fixe et entièrement colorée"
pas_fichier="Fin du programme :\n\nIl faut sélectionner un fichier et non un répertoire"
annulation="<span color=\"red\">Pas d'orientation choisie\n\nFin du script</span>"
### fonctions requises
# Vérif qu'on a choisi un fichier et pas un rep.
# ---------------------------------------------------------------
fich_ou_rep() { fichier=$1 ; if [ -d "$fichier" ] ; then zenity --warning --text="$2" ; exit ; fi ; }
# Vérif qu'on travaille sur un fichier pdf
# ---------------------------------------------------------------
test_format_in() { file "$1" | grep -qE "$3" ; if [ $? -ne 0 ] ; then zenity --warning --text="$2 $3" ; exit ; fi ; }
# (09) controle les saisies faites au clavier
# ---------------------------------------------------------------
erreur_saisie() { if [ "$1" -ne 0 ] ; then zenity --error --title="" --text="$2" ; exit ; fi ; }
# Barre de progression
# ---------------------------------------------------------------
bar_de_progress() { zenity --progress --pulsate --title="" --text="$1" ; }
### script ###
while [ $# -gt 0 ] ; do
fichier="$1"
fich_ou_rep "$fichier" "$pas_fichier" # on sort si on a choisi un rép au lieu d'un fichier
test_format_in "$fichier" "$est_pas" "$format_in" # on sort si le fichier n'est pas pdf
# choisir l'orientation finale
angle=$(zenity --width=300 --height=200 --list --title="Quelle orientaion veut-on ?" --text="" --column="Cliquer sur la ligne adéquate" --print-column="1" east south west)
code=$?
erreur_saisie $code "$annulation"
nomficsansext=$(basename -s .pdf "$fichier") # nom du fic sans extension
# rotation 90 et renommage du fichier
pdftk "$fichier" cat 1-end"$angle" output "$nomficsansext"-"$angle".pdf | bar_de_progress "$op_en_cours"
shift
done
Ce n'est peut-être pas du Victor Hugo (clin d'oeil à watael, notre maitre à tous ) mais j'en comprends chaque ligne !
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#10 Le 15/12/2024, à 01:02
- sputnick
Re : (résolu) script qui fait tourner un pdf
mauivaise idée
Tellement mauviaise que tu l'a améliorée
Qui veut faire quelque chose trouve un moyen, qui ne veut rien faire trouve une excuse. Proverbe arabe
https://sputnick.fr
Hors ligne
#11 Le 15/12/2024, à 02:00
- Watael
Re : (résolu) script qui fait tourner un pdf
test_format_in () if [[ $(file --brief --mime-type "$1") == *pdf ]]; then zenity --warning --text="$2 $3"; exit 1; fi
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 15/12/2024, à 08:17
- cristobal78
Re : (résolu) script qui fait tourner un pdf
@watael
Merci pour cette nouvelle et belle fonction.
- Si j'ai bien compris ma fonction qui teste le type de fichier par son extension n'est pas sûre à 100% car un fichier peut être au format pdf mais ne pas avoir d'extension.
Donc j'ai regardé le test du --mime-type qui lui ne dépend pas d'une éventuelle extension mais d'un retour de la commande file.
C'est bien ça ?
Mais je pense que tu as dû oublier un ! quelque part parce qu'il faut quitter le script si le fichier n'est PAS au format pdf.
- Une question aussi : est-il nécessaire de mettre [[ ..... ]] ? Pourquoi pas des [ ..... ] ?
Dernière modification par cristobal78 (Le 15/12/2024, à 08:19)
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#13 Le 15/12/2024, à 18:18
- cristobal78
Re : (résolu) script qui fait tourner un pdf
Watael m'a fait réfléchir longtemps jusqu'à ce que je trouve ce qui manque dans sa fonction : les "{ " et "}" et le "!"
test_format_in () { if [[ $(file --brief --mime-type "$1") != *pdf ]] ; then zenity --warning --text="$2 $3" ; exit 1; fi ; }
Je repars tester l'ensemble !
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#14 Le 15/12/2024, à 19:29
- Watael
Re : (résolu) script qui fait tourner un pdf
oops, j'ai omis la négation !
oui, les crochets doubles sont indispensables; test n'a pas la capacité d'analyser *pdf.
NB: les accolades ne sont pas nécessaires dans une fonction si elle est constituée d'une commande composée : if, for, while...
maFonc() for i in {1..3}; do echo $i; done
$ maFonc
1
2
3
les accolades contiennent une liste de commandes. (c'est au début du man : Grammaire du shell / listes)
on pourrait même, à la place, utiliser des parenthèses pour exécuter la fonction dans un sous-shell.
Dernière modification par Watael (Le 15/12/2024, à 21:09)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#15 Le 15/12/2024, à 20:19
- cristobal78
Re : (résolu) script qui fait tourner un pdf
je croyais avoir posté la version finale.
La voici :
#!/bin/bash
###################################################################################
# nom du script : rot-pdf
# modif de l'orientation finale des fichiers pdf sélectionnés (par CTRL-Click droit)
# nécessite l'installation préalable de : pdftk
###################################################################################
### variables & messages
format_in="PDF"
est_pas="Fin du programme :\n\n ce fichier n'est pas au format "
op_en_cours="Opération en cours... \n\nCliquer sur Valider dès que la barre est fixe et entièrement colorée"
pas_fichier="Fin du programme :\n\nIl faut sélectionner un fichier et non un répertoire"
annulation="<span color=\"red\">Pas d'orientation choisie\n\nFin du script</span>"
### fonctions requises
# Vérif qu'on a choisi un fichier et non pas un rep.
# ---------------------------------------------------------------
fich_ou_rep() { fichier=$1 ; if [ -d "$fichier" ] ; then zenity --warning --text="$2" ; exit ; fi ; }
# Vérif qu'on travaille bien sur un fichier pdf
# ---------------------------------------------------------------
test_format_in () { if [[ $(file --brief --mime-type "$1") != *pdf ]] ; then zenity --warning --text="$2 $3" ; exit 1; fi ; }
# contrôle les saisies faites au clavier
# ---------------------------------------------------------------
erreur_saisie() { if [ "$1" -ne 0 ] ; then zenity --error --title="" --text="$2" ; exit ; fi ; }
# Barre de progression
# ---------------------------------------------------------------
bar_de_progress() { zenity --progress --pulsate --title="" --text="$1" ; }
### script ###
while [ $# -gt 0 ] ; do
fichier="$1"
fich_ou_rep "$fichier" "$pas_fichier" # on sort si on a choisi un rép au lieu d'un fichier
test_format_in "$fichier" "$est_pas" "$format_in" # on sort si le fichier n'est pas pdf
# choisir l'orientation finale
angle=$(zenity --width=300 --height=200 --list --title="Quelle orientaion veut-on ?" --text="" --column="Cliquer sur la ligne adéquate" --print-column="1" east south west)
code=$?
erreur_saisie $code "$annulation"
nomficsansext=$(basename -s .pdf "$fichier") # nom du fic sans extension
# rotation et renommage du fichier
pdftk "$fichier" cat 1-end"$angle" output "$nomficsansext"-"$angle".pdf | bar_de_progress "$op_en_cours"
shift
done
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#16 Le 15/12/2024, à 21:16
- Watael
Re : (résolu) script qui fait tourner un pdf
# while [ $# -gt 0 ] ; do
# fichier="$1"
for fichier #in "$@" #le `in "$@"` est facultatif
do
...
# shift #plus besoin
done
je ne suis pas fan des fonctions courtes dont le code n'est pas réutilisé.
c'est un peu comme mettre un seul caractère dans une variable dont le nom comporte forcément plusieurs caractères, quand ce seul carctère n'est utilisé qu'une fois dans le code.
Dernière modification par Watael (Le 15/12/2024, à 21:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Le 16/12/2024, à 08:26
- Tawal
Re : (résolu) script qui fait tourner un pdf
Hello,
J'interviens un peu tard, mais ImageMagic (commande convert) fais très bien les rotations.
Par contre le sens est anti-conventionnel (non trigonométrique).
Mais il est applicable plusieurs fois.
Exemple de rotation "vers la gauche" (+90° sens trigo) :
convert -rotate -90 fichier.pdf resultat.pdf
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
#18 Le 16/12/2024, à 13:02
- cristobal78
Re : (résolu) script qui fait tourner un pdf
Comme Tawal est toujours de très bon conseil j'ai testé son idée mais chez moi ça donne ça sur un fichier toto de type pdf situé dans le dossier Documents.
On vérifie que toto est de type pdf :
moi@ldlcfixe22p:~/Documents$ file --brief --mime-type toto
application/pdf
donc puisque toto est bien un fichier pdf on continue :
moi@ldlcfixe22p:~/Documents$ convert -rotate -90 toto resultat.pdf
convert-im6.q16: attempt to perform an operation not allowed by the security policy `PDF' @ error/constitute.c/IsCoderAuthorized/426.
convert-im6.q16: no images defined `resultat.pdf' @ error/convert.c/ConvertImageCommand/3229.
moi@ldlcfixe22p:~/Documents$
Error, error, error, ... pourtant c'est bien la syntaxe du man ! Que se passe-t-il ?
Puis j'ai remarqué que l'option rotate était précédée d'un seul tiret '-'
Pourtant je croyais que le tiret unique était réservé aux options en une seule lettre.
Je me dis que "rotate" aurait donc dû ou pu être précédé de deux tirets '--'.
Mais la commande ne marche pas non plus avec "--rotate".
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#19 Le 16/12/2024, à 14:45
- tycooon
Re : (résolu) script qui fait tourner un pdf
bonjour,
curieux ça fonctionne chez moi :
convert -rotate -90 toto resultat.pdf
$ convert -version
Version: ImageMagick 6.9.12-98 Q16 x86_64 18038 https://legacy.imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC Modules OpenMP(4.5)
Delegates (built-in): bzlib djvu fftw fontconfig freetype heic jbig jng jp2 jpeg lcms lqr ltdl lzma openexr pangocairo png raw tiff webp wmf x xml zlib
Hors ligne
#20 Le 16/12/2024, à 15:51
- Tawal
Re : (résolu) script qui fait tourner un pdf
@cristobal78 :
Pour ton erreur, regarde ce post sur Debian Facile : https://debian-facile.org/viewtopic.php … 54#p374254
Il donne la démarche et la solution à appliquer pour que convert puisse traiter des PDFs.
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
#21 Le 16/12/2024, à 17:08
- cqfd93
Re : (résolu) script qui fait tourner un pdf
Bonjour,
Éditer le fichier /etc/ImageMagick-6/policy.xml pour remplacer "none" par "read|write" dans la ligne :
<policy domain="coder" rights="none" pattern="PDF" />
Elle devient donc :
<policy domain="coder" rights="read|write" pattern="PDF" />
La commande :
sudo sed -i '/pattern="PDF"/s/none/read\|write/' /etc/ImageMagick-6/policy.xml
− cqfd93 −
Hors ligne
#22 Le 16/12/2024, à 18:25
- cristobal78
Re : (résolu) script qui fait tourner un pdf
Après avoir vu que ma version de GS est la 9.55 j'ai opté pour la solution 2 de tawal qui consiste à commenter les lignes avec <!-- devant chaque ligne de la section : "disable ghostscript format types "
Et vous savez quoi ?
Ça "rote" de 90 et on peut recommencer sur le fichier "resultat" autant de fois qu'on veut :):)
"Et pourtant il tourne" aurait dit Galilée.
En conclusion un seul script suffit : pour faire 180 ° on fait 2 fois de suite 90°
Merci à tawal et aussi à cqfd93
Je passe en résolu.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne
#23 Le 16/12/2024, à 20:35
- lynn
Re : (résolu) script qui fait tourner un pdf
Ça "rote" de 90 et on peut recommencer sur le fichier "resultat" autant de fois qu'on veut :):)
"Et pourtant il tourne" aurait dit Galilée.
Oui enfin, elle rote tourne de 90°, c'est bien aussi et dans cette phrase qu'aurait prononcé Galilée, c'est elle et non il.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#24 Le 16/12/2024, à 20:39
- Tawal
Re : (résolu) script qui fait tourner un pdf
Tu aurais pu essayer la méthode moins permissive de cqfd93.
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
#25 Le 17/12/2024, à 00:57
- cristobal78
Re : (résolu) script qui fait tourner un pdf
@ tawal
c'est bien ce que j'ai fait car j'ai appliqué la méthode cqfd93 sur mon laptop et la méthode tawal sur mon fixe.
A vrai dire j'ai trouvé plus "propre" l'idée de ne pas toucher au fichier et de seulement commenter les lignes adéquates car cela permet de bien voir ce qu'on a fait ... si on veut le défaire.
Laptop Lenovo Ubuntu 20.04 LTS / DELL Mint 20.2 - XFCE / Laptop HP Mint 20.2 - XFCE
Hors ligne