Comment insérer une image dans un gabarit de transformation ODT en XSLT ?
Voici un exemple de code dans XSLT qui insère le logo de la fichothèque en cours.
Le point à comprendre ici est la valeur de l’attribut xlink:href
, en l’occurrence bdf://this/rsc/logo.png
. En effet, tout le reste du code en exemple concerne le format XML OpenDocument et non le logiciel BDF.
La valeur bdf://this/rsc/logo.png
indique au logiciel BDF qu’il doit insérer l’image correspondante dans le fichier ODT résultant. Cette image doit appartenir aux ressources de la fichothèque : bdf://this/
indique qu’il s’agit d’une ressource de la fichothèque en cours. rsc/logo.png
est le chemin de la ressource, en l’occurrence le chemin de l’image de logo d’accueil qui peut être définie par la commande (accessible via Administration / Configuration). D’autres ressources peuvent être définie via l’interface
(accessible via Administration / Personnalisation).
Toute ressource qui est une image au format PNG ou JPEG fonctionnera (par exemple, bdf://this/theme/icons/marker-blue.png
insère le marqueur bleu. Insérer une ressource qui n’est pas une image ne déclenche pas d’erreur mais ne donnera pas de résultat dans LibreOffice.
Pour compléter, voici quelques pistes pour la mise en forme de cette image dans le fichier ODT résultant. Dans l’exemple ci-dessus, on voit qu’une image est définie par un élément <draw:frame>
contenant un élément <draw:image>
. <draw:image>
contient l’information du lien vers l’image, c’est l’élément <draw:frame>
qui comprend les infromations qui nous intéressent.
La taille exacte de l’image est définie directement par les attributs svg:width
et svg:height
de l’élément <draw:frame>
. Ces attributs sont obligatoires, en leur absence l’image est de taille ridicule.
L’autre attribut important est l’attribut text:anchor-type
qui indique le type d’ancrage à la page qui, sous LibreOffice, est configurée par l’entrée « Ancrer » du menu contextuel de l’image. Les valeurs possibles sont (voir la spécification du format pour plus de détails) :
as-char : image traitée comme un caractère (comportement similaire à une balise
<img>
en HTMLchar : image ancrée au caractère
paragraph : image ancrée au paragraphe
page : image ancrée à la page (voir les spécifications pour plus de détail)
frame : image ancrée au bloc de texte (n’est pas utilisé dans le format ODT)
Les autres dispositions d’une image sont déterminées par le style. Dans notre exemple, l’élément <draw:frame>
possède un attribut draw:style-name
dont la valeur est Logo
. Il faut donc qu’un style graphique porte ce nom-là dans le fichier styles.xml
dans le fichier ODT résultant. Pour cela nous allons passer par le fichier styles.css
de notre gabarit de transformation, ce qui permet d’avoir une syntaxe plus ramassée.
Dans notre exemple, graphic
.Logo
indique qu’il s’agit d’un style de graphique avec comme nom Logo
. La propriété horizontal-pos
précise le positionnement horizontal à gauche (voir la spécification du format pour plus détail).