Des miniatures pour les fichiers OpenDocument dans Nautilus

Nautilus dispose d'un système de miniatures bien pratique car facilement extensible par greffons. Il est ainsi très simple d'ajouter un format non pris en charge par l'ajout de petits scripts en Bash ou en Perl, et c'est ce que nous allons faire avec les fichiers OpenOffice.

Extraction de la vignette

La production d'une vignette associée à un document OpenOffice est des plus simple. En effet le format OpenDocument consiste en une simple archive au format zip.

gaston$unzip -l mon_fichier.odt
Archive: mon_fichier.odt
Length Date Time Name
-------- ---- ---- ----
15075 01-22-09 21:53 content.xml
109747 01-22-09 21:53 styles.xml
1151 01-22-09 21:53 meta.xml
9572 01-22-09 21:53 settings.xml
243 01-22-09 21:53 Pictures/10000000000000640000002C12CD9661.png
1480 01-22-09 21:53 Thumbnails/thumbnail.png
-------- -------
150159 25 files
gaston$ 
extraction de la miniature d'un fichier ODF

Comme vous le voyez, cette archive contient un ensemble de fichier XML normalisés définissant les styles (styles.xml), les réglages (settings.xml), le contenu (content.xml) et les méta-informations telles que le titre ou l'auteur (meta.xml).

En plus de ces fichiers, nous trouvons aussi des dossiers dans lesquels sont stockés par exemple les éléments binaires comme les images (Pictures/) ou les miniatures extraites du document (Thumbnails/).

Vous l'aurez compris, c'est précisément ce dernier dossier qui va nous intéresser car il contient systématique un fichier thumbnail.png représentant la première page du document. Rien de plus simple donc d'extraire cette miniature

gaston$unzip -p mon_fichier.odt Thumbnails/thumbnail.png > vignette.png
gaston$ 
extraction de la miniature d'un fichier ODF

Là où ça se corse un tantinet, c'est que le fond de cette image est déduit de la couleur de fond du document. Et si cette couleur est "automatique", c'est à dire reprenant celle du papier, celui de la vignette sera transparent. Pour corriger cela par un fond blanc nous allons simplement utiliser l'indispensable utilitaire convert de la non moins indispensable suite ImageMagick

gaston$unzip -p mon_fichier.odt Thumbnails/thumbnail.png | convert -alpha off - "vignette_fond_blanc.png"
gaston$ 
extraction de la miniature d'un fichier ODF

Création du thumbnailer

Les greffons utilisés par Nautilus pour créer une vignette à partir d'un document source s'appelle un thumbnailer. La spécification de ce type d'extension est relativement simple. Il s'agit juste d'un exécutable chargé de convertir un fichier pointé par son URI en première paramètre, en une image au format PNG et stocké vers le nom de ficher complet passé en second paramètre. Notre seul problème est donc de fournir à unzip le contenu d'un fichier pointé par une URI, c'est à dire pouvant être de la forme sftp://mon-server.net/chemin/mon_fichier.ods. Heureusement, le projet gvfs, fourni en standard dans toutes les distributions Gnome 2.24+, contient un petit utilitaire méconnu mais bien pratique, gvfs-cat. Comme tous les outils de la famille xxxcat, son rôle est simplement de vider dans la sortie standard le "contenu" désigné par l'URI passé en paramètre.

Malheureusement unzip ne sait pas prendre l'entrée standard comme source de donnée, nous devons donc opter pour un fichier temporaire, ce qui nous donne le script thumbnailer que nous placerons dans le fichier /usr/bin/odf-thumbnailer :

#! /bin/sh

logger "Thumb from $1 to $2"
# création d'un fichier temporaire à partir de l'URL du
# fichier. Malheureusement unzip ne sait pas lire directement
# à partir d'un flux.
gvfs-cat "$1" > /tmp/odf

# décompression de la miniature vers la sortie standard
# et création du fichier cible en remplaçant le fond
# transparent par un fond blanc (commend convert)
unzip -p /tmp/odf Thumbnails/thumbnail.png | convert -alpha off - "$2"

# ménage
rm -f /tmp/odf
Thumbnailer pour les fichiers ODF (Sources)

Déclaration du thumbnailer

Dernière étape, déclarer notre greffons à nautilus. Pour y parvenir, nous devons ajouter un nouveau schéma à gconf en associant le type de fichier à la commande invoquant le thumbnailer. Pour un document de type application/vnd.oasis.opendocument.text cela nous donne quelque chose comme cela :

<gconfschemafile>
  <schemalist>
    <schema>
      <key>/schemas/desktop/gnome/thumbnailers//enable</key>
      <applyto>/desktop/gnome/thumbnailers//enable</applyto>
      <owner>odf-thumbnailer</owner>
      <type>bool</type>
      <default>true</default>
      <locale name="C">
        <short></short>
        <long></long>
      </locale>
    </schema>
    <schema>
      <key>/schemas/desktop/gnome/thumbnailers//command</key>
      <applyto>/desktop/gnome/thumbnailers//command</applyto>
      <owner>odf-thumbnailer</owner>
      <type>string</type>
      <default>/usr/bin/odf-thumbnailer %u %o</default>
      <locale name="C">
        <short></short>
        <long></long>
      </locale>
    </schema>
    ...
  </schemalist>
</gconfschemafile>    

Comme vous le voyez, rien de bien sorcier. Pour le type de fichier ODF "texte (), nous ajoutons deux clefs, l'une permettant d'activer/désactiver le thumbnailer, l'autre pour indique la commande à lancer. %u correspond à l'URL du fichier et %o au fichier de sorti.

Comme le schéma complet est un peu long, je n'ai mis ici qu'un court extrait. Pour la version comprenant tous les types de l'ODF, téléchargez ceci dans le fichier /etc/gconf/schemas/odf-thumbnails.schema.

Il ne vous maintenant plus qu'à importer ce schéma dans gconf

gaston$gconftool-2 --install-schema-file /etc/gconf/schemas/odf-thumbnails.schema
gaston$ 

C'est terminé. Pour être sur que tout est initialisé, faite un rm -rf ~/.thumbnails pour enlever les anciennes miniatures et un pkill nautilus pour qu'il recharge la liste des thumbnailers. Ceci fait, vous devriez avoir vos miniatures de documents ODF.


Vus : 389
Publié par Artisan Numérique : 100