Export des billets Dotclear en ODT
Le mercredi 10 juin 2009, 11:46 - Lien permanent
Comme dirait la demoiselle : « Oops, I did it again » (oui, je sais, je ne suis pas fier). Il y a quelque temps (deux ans en fait) que je m’intéresse au format OpenDocument, utilisé principalement par OpenOffice. Je vous annonce donc solannellement en ce jour béni de votre divinité préférée le résultat de mon labeur acharné : un plugin d’export des billets de Dotclear en ODT. Oui, tout ça pour ça.

“old book stara ksiazka”
par v.max1978
Le format ODT
Depuis les débuts de l’informatique grand public, le traitement de texte est omniprésent, et a rapidement remplacé la machine à écrire. Au début des années 90, plusieurs logiciels de bureautique se faisaient concurrence, Microsoft Word bien sûr, mais aussi Corel WordPerfect, AppleWorks, etc.
Les éditeurs de logiciel on vite compris que leur logiciel servait avant tout à traiter des données, et que pour battre la concurrence il fallait être capable de lire leur format tout en s’assurant qu’ils ne pourraient pas lire le sien. Il s’en est suivi une guerre des format, accentuée par l’explosion des communications et des transferts de fichiers, dont le vainqueur a été Microsoft et le grand perdant l’utilisateur final. Même si il est plus “simple” d’un premier abord pour l’utilisateur final de ne pas se demander si son correspondant utilise le même logiciel, en fait cette simplicité revient à donner les clés de ses données à la société éditrice. Si elle décide de changer son format, comme elle l’a déjà fait plusieurs fois, elle force les utilisateurs à une mise à jour coûteuse. C’est plus facile de vivre dans une dictature, on a pas à choisir pour qui voter.
Il a fallu attendre l’avènement de StarOffice, une suite bureautique réalisée par une société allemande du nom de StarDivision, puis rachetée par Sun, pour voir les prémisses d’un format de bureautique standardisé. StarOffice a ensuite évolué en OpenOffice, dont le format était ouvert (c’est à dire documenté), et qui a été soumis à normalisation. L’ISO a mis son tampon sur une version légèrement modifiée du format, appelé OpenDocument, qu’OpenOffice à utilisé à partir de sa version 2.0.
Enfin, enfin, nous avons un format de bureautique standard, sur lequel tout le monde s’est mis d’accord, et qui répond à nos besoins. Tous ? Non, pas Microsoft bien sûr, qui n’a aucun intérêt à mettre en péril son monopole et l’emprise qu’il a sur ses utilisateurs en adoptant un format de fichier ouvert…
Mais la révolution est en marche, et Microsoft va avoir beaucoup de mal à l’arrêter. Je pense même sincèrement qu’il ne pourra tout au plus que la retarder légèrement. L’OpenDocument voit son adoption progresser très régulièrement, c’est maintenant une question de quelques années.
Et moi dans tout ça
Pour des besoins professionnels, j’ai développé depuis mi-2007 un plugin pour Dokuwiki permettant d’exporter des pages au format ODT. Je me suis donc intéressé à la syntaxe de ce format, et j’ai découvert avec plaisir qu’il est très clair, assez proche de HTML/CSS (pas la peine de réinventer ce qui marche déjà et que tout le monde connaît), et très bien pensé.
Le plugin achevé (et, avouons-le, légèrement grisé par la réussite), je me suis dit que je devais absolument faire des exports ODT sur d’autres logiciels pour populariser le format. Finalement, l’eau à coulé sous les ponts, j’ai été pris par d’autres choses, j’ai vaguement commencé à participer à l’export ODT sous SPIP, mais je ne me suis jamais vraiment impliqué.
Depuis ma migration sous Dotclear, j’avais en tête de réaliser un export ODT. C’est maintenant chose faite.

“A Rainbow Of Books”
par Dawn Endico
Comment ça marche
Pour ne pas recoder ce qui existe déjà, je me suis appuyé sur odtPHP, un module d’accès aux fichiers ODT depuis PHP (développé par une boîte française au passage). Mon objectif était de permettre à l’utilisateur de Dotclear de faire un fichier ODT qui contiendrait potientiellement les mêmes tags que ceux qu’il a utilisé pour faire son thème. De cette façon, on reste au maximum dans l’esprit Dotclear, et pas la peine d’apprentre un nouveau langage de templates. L’infrastructure de Dotclear n’est pas aussi souple que celle de Dokuwiki sur cet aspect-là, ça a donc été un peu plus compliqué de brancher le générateur ODT sur le moteur de templates de Dotclear.
Une fois ce branchement réalisé, j’avais donc du HTML dans mon document ODT. Il me restait alors à le convertir en ODT XML. Il n’existe pas à ce jour de convertisseur complet de HTML vers ODT, la fondation OpenDocument Fellowship a même proposé un prix de 11 500 dollars à qui le réaliserait. Mais ça tombe bien, je n’avais pas besoin de quelquechose de compliqué qui irait re-créer les styles présents dans les feuilles de style CSS, j’avais juste besoin de convertir quelques tags.
Je me suis donc appuyé pour cela sur le moteur de conversion DocBook vers ODT de Consultia, en remplaçant les tags Docbook par le HTML auquel je m’attends. Ma conversion est donc entièrement basée sur des feuilles de traduction XSL ! Cool, non ?
Enfin, j’ai paufiné le plugin pour le faire respecter les conventions Dotclear sur les plugins, lui ajouter un tag pour les thèmes graphiques, et un widget pour proposer facilement un export sur toutes les pages.
Les conséquences de tout ça, c’est que pour fonctionner le plugin nécessite le module XSL de PHP, disponible dans toutes les bonnes distribs, dont le nom du paquet est en général “php-xsl”. Il est aussi absolument nécessaire que les billets à exporter soient valides XHTML, donc pensez à utiliser le lien “Validation XHTML” sous la fenêtre d’édition de billet.
Conclusion
Mon plugin peut donc convertir tout post en ODT, mais aussi les pages, ainsi que la page d’acceuil. Par défaut, les documents générés sont très simples, mais je propose aussi un modèle d’export pour la page d’accueil permettant d’exporter tous les articles du blog, avec tout leur contenu. Une conversion du blog entier en ODT, en somme.
Le code est sous licence AGPLv3, comme toujours, et je vous attache à ce billet un Zip tout prêt à être déployé dans votre blog Dotclear.
Si ça vous intéresse, essayez-le et remontez-moi les bugs (ou les idées d’amélioration). Je ferai de mon mieux pour le maintenir et le faire évoluer. Comme vous avez pu comprendre, c’est un sujet qui me tient à cœur…
Mises à jour
- ajout des dépendances du plugin.
- mise à jour du plugin, version 0.2 (voir le commentaire associé)
- corrections des dépendances d’odtPHP
- mise à jour du plugin, version 0.3 : nombreuses améliorations, suppression de la dépendance à Zip et PHP ≥ 5.2
- mise à jour du plugin, version 0.4 : meilleure page d’admin
- mise à jour du plugin, version 0.5 : meilleure gestion des tableaux
















Commentaires
mercredi 10 juin 2009, 12:24
Bonjour,
je suis EXTREMEMENT intéressé par ce plugin. Je l’essaierai dès que possible (ce soir peut-être ?).
J’ai tenu un carnet de voyage sous la forme d’un blog il y a de cela un an, et je souhaite en éditer une version imprimable. Passer par l’odt me paraît une bonne idée.
A partir de quelle version de dotclear le plugin fonctionne-t-il ?
mercredi 10 juin 2009, 12:29
@Beck’s : cool, mon premier testeur !
Effectivement, l’ODT sera a priori adapté à ce que tu veux faire. Le plugin est prévu pour la version 2 de Dotclear, je ne connais pas du tout la 1.x mais j’imagine que ça ne marchera pas (il y a eu beaucoup de changements depuis).
Si tu as fait des mises en pages particulières à l’intérieur de tes articles, il se peut que ça ne passe pas à l’export, mais si tu veux en me donnant l’adresse de ton blog je pourrais tester et essayer de les gérer. Vu la jeunesse du plugin, je serais très surpris que tout passe du premier coup…
mercredi 10 juin 2009, 12:38
2nd testeur
mercredi 10 juin 2009, 12:42
Joli coup !
‘faudrait que je regarde pour te convertir ça pour WordPress (en plus tu utilises une licence compatible GPL, donc no problème).
mercredi 10 juin 2009, 12:44
@Xavier : Merci !
Pour la conversion, ça devrait être jouable, vu que le gros du code (qui est gros ?) est de la feuille XSL.
mercredi 10 juin 2009, 12:46
Il n’est pas gros, il est enveloppé - d’une feuille.
mercredi 10 juin 2009, 12:47
@Xavier : huhuhu
bien vu.
mercredi 10 juin 2009, 13:50
Intéressant, je vais regarder ça. Et de 3 testeurs.
mercredi 10 juin 2009, 14:00
Génial ! Je vais tout de suite tester ça.
Et de 4 testeurs
mercredi 10 juin 2009, 14:48
Je ne vais pas tester car je n’utilise pas dotclear, mais je salue l’initiative.
Cordialement
mercredi 10 juin 2009, 14:56
Classe
Premier retour :
Fatal error: Class 'XSLTProcessor' not found in bla/blaplugins/odt/inc/class.odt.dcodf.php on line 73mercredi 10 juin 2009, 15:04
@Osku : Tout à fait exact Osku, j’ai oublié de préciser les dépendances !
Il me faut le processeur XSL de PHP, disponible dans le module xsl de PHP (souvent dans un paquet php-xsl sur votre distrib).
La bibliothèque odtPHP nécessite elle PHP 5.2 et le module PECL Zip.
Et avec tout ça ça devrait mieux marcher
jeudi 11 juin 2009, 08:55
À tous ceux et celles qui ont téléchargé le plugin depuis l’heure de post de ce commentaire : pouvez-vous re-télécharger l’archive ? Je l’ai mise à jour avec les correctifs suivants :
jeudi 11 juin 2009, 16:14
Fonctionne nickel sous un blog sous Dotclear 2 tournant chez Free
jeudi 11 juin 2009, 16:15
@Oni : Excellentissime nouvelle !! Si ça marche chez Free, ça marche partout…
Merci Oni !
vendredi 12 juin 2009, 11:02
Et voilà, une nouvelle mise à jour du plugin, cette fois-ci avec une version : 0.3 (les versions c’est bien).
Au menu : tout un tas d’améliorations, notamment une page d’admin pour configurer le plugin, des boutons à ajouter simplement dans le texte, une meilleure documentation, quelques bugs corrigés, une meilleure gestion de l’absence du module XSLT, etc.
Bref, rien que du bon, mettez-y le à jour !
Merci à François et à la liste Dotclear Lab pour les tests et les idées.
dimanche 14 juin 2009, 19:02
Pratique et simple d’utilisation! C’est exactement ce que je cherchais. Je pense l’implémenter rapidement sur mon blog.
Merci
samedi 5 septembre 2009, 09:04
Bonjour, savez-vous si il existe un plugin d’import ODT ?
J’aimerais importer des documents OpenOffice en tant que billet Dotclear.
samedi 5 septembre 2009, 09:16
@yodaz : Bonjour, non à ma connaissance il n’existe pas de plugin d’import ODT.
Ça ne devrait pas être plus compliqué que l’export ODT à faire, si on ne compte pas récupérer le formatage bien sûr. Ce qui sera plus dur, c’est de récupérer les images…
samedi 5 septembre 2009, 09:34
Merci pour votre réponse rapide. Je n’ai pas d’images à importer, mais j’aimerais si possible conserver le formatage.
J’avais dans l’idée d’exporter mon ODT (ou mon .doc, car à l’origine il s’agit de fichiers MS Word) en xhtml en utilisant le filtre d’export d’OO, mais le problème est qu’il me met tout les styles dans les en-têtes, du coup je perds tout le formatage.
Je vais chercher sur Google pour voir si je trouve une solution. Si c’est le cas je la posterai ici, ça pourra peut être servir à d’autres
jeudi 14 janvier 2010, 17:31
Merci pour ces info je galère avec Le format ODT.
lundi 8 mars 2010, 11:04
Bonjour,
ca serait bien si on pouvait exporter tout le blog d’un coup, et pas billet par billet.
Seb.
lundi 8 mars 2010, 11:07
@Seb : Bonne nouvelle, on peut ! Le plugin permet d’ajouter un bouton sur la page principale, et ce bouton exporte la totalité du blog.
Tu peux essayer sur mon site, le bouton se trouve en bas à droite de la page d’accueil.
lundi 8 mars 2010, 12:09
@Aurélien : super merci.
J’y suis arrivé en ajoutant une widget.
Très pratique ce plugin