Pour info donc le format odt est en fait une archive zip qui contient tout le merdier (le contenu, les styles, les images ...). 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="/home/pit/home/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
##cp $FILE $TMP
cd $TMP
##unzip $BASENAME 
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