Script createODT permettant la création de fichiers ODT en masse
J’utilise Openoffice pour faire des fiches de correction individuelles pour mes étudiants. Ces fiches contiennent mes remarques sur les exercices faits (ou pas) et un récapitulatif des cotes.
Un étudiant a accès à sa fiche quand il le désire et la conserve pendant tout son cursus et moi je mets à jour au fur et à mesure. Rien de bien exceptionnel, j’ai sans doute plein de collègues qui font le même genre de chose.
Ce qui est assez (chiant) répétitif c’est de devoir créer une fiche par étudiant en début d’année; je veux utiliser un style (donc un modèle), insérer la photo de l’étudiant, ses nom et prénom… (c’est lourd)…
Il y a un moment où il faut arrêter de cliquer sur “Nouveau document” / Insérer photo, éditer le nom… et où il faut écrire un p’tit script qui fait le boulot :-)
Pour info donc le format odt est en fait une archive zip qui contient tout le merdier (le contenu, les styles, les images, etc.). Donc si je crée un document MODELE.ott
que je le dézippe, que je change l’image, que je change le prénom, le nom et que je rezippe (sous un autre nom), c’est bon.
À coup de dezip
et de sed
, on obtient un script permettant d’écrire
createODT Juste Leblanc ALG3ir /elsewhere/tasvutatete.png
Et je suis content. J’ai perdu 2h pour en gagner moults ensuite.
Le script:
#!/bin/bash
#
# Script permettant de créer des fichiers ODT sur base d'un modèle.
#
# Le script remplace la photo, le prénom, le nom et le nom du cours
# Voir le fichier MODELE-FICHE.ott
#
# Author Pierre 'Pit' Bettens (pbettens(à)heb.be)
# Config
FILE="/elsewhere/fiches/MODELE\_FICHE.ott"
BASENAME='MODELE\_FICHE.ott'
YEAR='2010-2011'
FROMDIR=$(pwd)
TMP=/tmp/odt
if \[ -d $TMP \] ; then
rm -fr $TMP
fi
mkdir ${TMP}
# Check params
if \[ ! $# -eq 4 \] ; then
echo 'Args missing'
echo 'Snopsis: createODT <fist name> <name> <course> <picture>'
exit
fi
FIRSTNAME=$1
NAME=$2
COURSE=$3
PICTURE=$4
if \[ ! -e $PICTURE \] ; then
echo "I can't find file" $PICTURE
exit
fi
# Check if file model exist
if \[ ! -e $FILE \] ; then
echo 'File missing'
echo 'I would like manage this file' $FILE
exit
fi
cd $TMP
unzip $FILE -d $TMP
sed "s/Prénom/$FIRSTNAME/" content.xml | \\r
sed "s/NOM/$NAME/" | \\r
sed "s/AAAA-AAAA/$YEAR/" | \\r
sed "s/COURS/$COURSE/" > contentTMP.xml
mv contentTMP.xml content.xml
# I must use odt filename
PICTUREFILE=\`ls Pictures\`
cp $PICTURE Pictures/$PICTUREFILE
zip -r $FIRSTNAME$NAME.odt \*
mv $FIRSTNAME$NAME.odt $FROMDIR
rm -fr $TMP