Des miniatures pour les fichiers OpenDocument dans Nautilus
Le 29 January 2009 à 02:27.

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 :

svn: '/subversion/!svn/bc/4007/public/tools/utilities/odf-thumbnailer' path not found
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.


Commentaires

macsim, le 29 janvier, 2009 - 12:18

Excellent merci pour cette super astuce, d'ailleur je me demande pourquoi c'est pas par defaut dans nautilus, trop lourd au traitement ?

Ulhume, le 29 janvier, 2009 - 12:30

Oh non, je pense que ça y sera un jour où l'autre en standard. Maintenant la seule chose par défaut que j'ai vu à un moment était basée sur une pseudo impression via abword, un peu moins léger que cette méthode Smiling

SkeRoy, le 29 janvier, 2009 - 12:34

C'est sympa de décomposer et d'expliquer la méthode !
Je ne sais pas si c'est la même chose, mais depuis longtemps existait ceci aussi:
http://forum.ubuntu-fr.org/viewtopic.php?pid=623171#p623171

Ulhume, le 29 janvier, 2009 - 12:52

Yep il semble que ce soit la même chose, mais en python Smiling

Eggman, le 6 février, 2009 - 21:19

Excellente explication pour la création d'un générateur de miniature.

En ce qui concerne les miniatures pour les fichier .odt, le paquet libgsf-bin (sous Debian en tout cas) livre tout ce qu'il faut pour créer automatiquement les miniatures.

Ulhume, le 6 février, 2009 - 21:33

Ah oui, tu as raison, je ne connaissais pas ce paquet. Bon, ceci dit, maintenant que ça marche, je verrais cela pour la prochaine installation Smiling

Poster un nouveau commentaire

Si vous avez détecté une erreur, coquille ou bêtises du même ordre, merci de plutôt passer par le formulaire de contact
Pour vous abonner au flux des commentaires sur cet article, clickez ici.
Pour répondre à quelqu'un, utilisez plutôt le lien répondre qui se trouve en haut (ou en bas) à gauche de son commentaire.
Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement. Si vous avez un compte gravatar, l'utilisez pour afficher votre avatar.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Every instance of custom tags in the input text will be replaced with a specific tool shortcut.

Plus d'informations sur les options de formatage


Commentaires récents
Porte secrète