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.
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.odtArchive: mon_fichier.odtLength Date Time Name-------- ---- ---- ----15075 01-22-09 21:53 content.xml109747 01-22-09 21:53 styles.xml1151 01-22-09 21:53 meta.xml9572 01-22-09 21:53 settings.xml243 01-22-09 21:53 Pictures/10000000000000640000002C12CD9661.png1480 01-22-09 21:53 Thumbnails/thumbnail.png-------- -------150159 25 filesgaston$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.pnggaston$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
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 foundThumbnailer pour les fichiers ODF (Sources)
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.schemagaston$

Excellent merci pour cette super astuce, d'ailleur je me demande pourquoi c'est pas par defaut dans nautilus, trop lourd au traitement ?
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
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
Yep il semble que ce soit la même chose, mais en python
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.
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
Poster un nouveau commentaire