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 23/11/2020, à 22:54

ysubmarine

Script pour traitement par lot de fichiers (PDF avec PDFTK)

Bonjour,

J'aimerai réaliser un script pour traiter en masse des fichier PDF (ajouter un stamp avec PDFTK sur chaque 1ère page d'un document).
J'avais un script Windows qui marchait pour cela  et qui était exprimé comme suit : 

dir /B c:\pdf > liste.txt

for /F "delims=" %%i in (liste.txt) do (

"C:\Program Files (x86)\PDFtk Builder\pdftk.exe" "c:\pdf\%%i" "c:\pdf\tampon.pdf" stamp output "c:\pdf\finald\%%i"

Sous Ubuntu (je n'ai plus de Windows), je ne trouve pas comment exprimer le fait d'aller chercher dans la liste les fichiers à traiter.

J'ai trouvé comment faire l'équivalent de la première ligne :

#!/bin/bash
ls -R /home/PDF/ >liste.txt

Mais après je ne sais pas quelle est la syntaxe pour dire de prendre les noms de fichiers du répertoire PDF (stockés dans liste.txt) en variable pour lancer PDFTK en boucle sur chaque document.

Si quelqu'un peut me mettre sur la voie ?

D'avance merci pour votre aide.

Hors ligne

#2 Le 23/11/2020, à 23:40

Hizoka

Re : Script pour traitement par lot de fichiers (PDF avec PDFTK)

Salut,

for fichier in /home/PDF/*.pdf
do
  echo "Fichier pdf : $fichier"
done

Dernière modification par Hizoka (Le 23/11/2020, à 23:41)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 23/11/2020, à 23:40

Watael

Re : Script pour traitement par lot de fichiers (PDF avec PDFTK)

salut,

J'ai trouvé comment faire l'équivalent de la première ligne

c'est bien*, mais on ne va pas s'en servir.

en shell, on parcourt directement l'arborescence :

for f in /home/PDF/*.[pP][dD][fF] #cf. man bash - développement des chemins
do
   nomFichier=${f##*/}
   echo pdftk "$f" "/destDir/$nomFichier" ... # je ne connais pas les options de pdftk
done

fini !

si les lignes affichées correspondent aux commandes que tu souhaites, tu peux enlever le echo.

--
* non, en fait ce n'est pas bien : on n'utilise pas ls dans les scripts, parce que ça ne permet pas de protéger certains caractères que les noms de fichiers peuvent contenir, qui feraient que le shell ne les retrouveraient pas dans l'arborescence.
même si ce n'est pas le cas ici, prends en l'habitude.
sache qu'un fichier peut être nommer : un fichier, un autre peut s'appeler un autre
fichier
.
donc, même en passant par un fichier temporaire (ce qui est rarement une bonne idée en shell (temps d'écrire, temps de lecture, processus supplémentaire pour "nettoyer")), le shell ne reconnaîtra pas un autre
fichier
comme un fichier.

Dernière modification par Watael (Le 23/11/2020, à 23:47)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 24/11/2020, à 23:28

ysubmarine

Re : Script pour traitement par lot de fichiers (PDF avec PDFTK)

Bonjour,

Merci pour vos réponses smile qui m'ont permis de progresser. Voici le script qui fonctionne avec la syntaxe PDFTK pour ajouter un tampon sur chaque page :

#!/bin/bash
for f in /home/Documents/PDF/input/*.[pP][dD][fF] #cf. man bash - développement des chemins
do
   nomFichier=${f##*/}
   pdftk "$f" stamp /home/Documents/PDF/tampon.pdf output /home/Documents/PDF/output/"$nomFichier"
   
   done

Dans mon cas d'usage, je voudrais mettre le tampon que sur la première page. Dans le GUI PDFTK, on coche juste une case. En ligne de commande, si j'ai bien compris, il faut découper le document, appliquer le tampon sur la première page puis rassembler la première page et les suivantes.

Pour l'instant j'arrive juste à découper la première page et les suivantes, mais je m'y perds pour recomposer le document. Je vous dirai si je progresse sur ce deuxième problème. J'ai commis ceci, mais ça mélange tout car je dois pas déclarer correctement mes variables :

#!/bin/bash
cd /home/Documents/PDF/input/
for f in *.[pP][dD][fF] #cf. man bash - développement des chemins
do

tampon=/home/Documents/PDF/tampon.pdf #c'est le fichier qui sert de tampon
source=/home/Documents/PDF/input/*.pdf #emplacement des fichiers à traiter
first=/home/Documents/PDF/tmp/"$f"_first.pdf #emplacement pour stocker la première page
autres=/home/Documents/PDF/tmp/"$f"_autres.pdf #emplacement pour stocker la page 2 et suivantes
bis=/home/Documents/PDF/tmp/"$f"bis.pdf # la première page une fois le tampon appliqué
sortie=/home/Documents/PDF/output/"$f"final.pdf #emplacement pour la sortie

   nomFichier=${f##*/}
   pdftk $f cat 1 output $first 
   pdftk $source cat 2-end output $autres
   pdftk $first stamp $tampon output $bis
   pdftk $bis $autres cat output $sortie #c'est là que cela fait n'importe quoi, il prend la première page d'un document source et le combine avec les pages suivantes d'autres documents
done 

Je vous tiendrai au courant lorsque j'aurai trouvé la solution !

Hors ligne