notes·de·pit

Parfois j'apprends à pêcher à des gens qui n'aiment pas le poisson

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