#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 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