1

[plugin] Le convertisseur Office2SPIP

24 mars 2010
par ARNO*

[Niveau : très avancé] Cela fait des années que je cherche un moyen de pouvoir envoyer directement un fichier Word, RTF, OpenOffice... dans l’interface de SPIP et récupérer automatiquement un article SPIP.

Voici la toute première version d’un plugin qui permet de réaliser cela. Le plugin est intitulé « Office2SPIP » et est installé sur la zone. Comme il s’agit d’une toute première version, il n’y a pas de version directement téléchargeable pour l’instant. Le plugin est fonctionnel, mais demande encore à être affiné.

La vidéo ci-dessus vous montre le plugin fonctionnant sur un de mes sites, avec un vieux fichier Word retrouvé de l’époque où je travaillais dans l’édition. Notez que je n’ai pas modifié le fichier Word, et que l’article SPIP résultant est déjà très convenable, avec ses images et ses tableaux. Quelques retouches dans l’édition de l’article sont nécessaires, mais elles sont peu importantes.

Attention : pour faire fonctionner ce plugin, il faut pouvoir installer des logiciels sur le serveur ; cela est donc réservé aux webmestres contrôlant complètement leur serveur, ou bien en demandant à votre hébergeur de réaliser l’opération.

Attention 2 : la création d’articles à partir de pages Web distantes fonctionne sans avoir à installer les logiciels sur le serveur. C’est donc une fonctionnalité que n’importe qui devrait pouvoir activer à volonté.

Le plugin ajoute une petite case dans les pages de rubriques de l’espace privé, permettant d’envoyer un fichier de traitement de texte vers le site.

Les fichiers acceptés par le plugin sont tous les formats acceptés par OpenOffice, notamment les fichiers Word (.doc et .docx) et OpenOffice (.odt).

Intérêt de l’opération

— Beaucoup de webmestres reçoivent encore (malheureusement) des fichiers Word qu’ils sont chargés de mettre en ligne. Le plugin permet de gagner énormément de temps avec de tels documents. Le fait que les images insérées dans les fichiers soient extraites et insérées dans l’article fait gagner encore plus de temps.

— De manière assez naturelle, beaucoup d’associations ont accumulé une belle base documentaire sous forme de fichiers Word (ou OpenOffice en étant optimiste). Ce plugin automatise la mise en ligne de tels documents.

— Certains rédacteurs ne veulent toujours pas (malheureusement, encore) mettre les mains dans le cambouis et recopier leurs articles eux-mêmes dans le formulaire d’édition des articles, et encore moins traiter leurs images. Le plugin leur retire l’excuse de la « technicité »...

— Je n’ai jamais utilisé de gros CMS commercial (genre Vignette), mais je suppose que la gestion de documents Word fait partie de leurs gros atouts sur les solutions libres. Maintenant, SPIP peut aussi le faire.

— Le fait que l’éditeur SPIP ne soit pas Wysiwyg présente beaucoup d’avantages. Mais, pour certains utilisateurs, c’est encore rédhibitoire. Le plugin permet de laisser l’aspect Wysiwyg aux logiciels tiers, avec lesquels les rédacteurs ont leurs habitudes et leurs automatismes, et de récupérer ces documents formatés proprement directement dans SPIP. Dans le même temps, le « nettoyage » assez violent qui intervient sur ces fichiers permet de conserver la structure du document sans introduire d’incohérence dans l’interface du site, tel que cela est le cas avec les éditeurs Wysiwyg (changements de couleurs, changements de polices...).

— Ceux qui ont l’habitude de rédiger leurs textes hors ligne (notamment dans un traitement de texte) avant de les copier-coller sur leur site gagnent énormément de temps.

— La possibilité d’indiquer l’URL d’une page Web existante et de la voir transformée en article SPIP débarassés du HTML a deux intérêts principaux :

    • créer rapidement une base documentaire : je repère un article intéressant sur le Web, et d’un clic je le « recopie » dans mon site,
    • récupérer des pages d’une ancienne version du site en automatisant énormément le travail.

Étape 1 : conversion en HTML

Le fichier est converti en HTML (assez salement) par un utilitaire nommé unoconv. Lequel utilise une version « sans interface » de OpenOffice.

Sur mon serveur sous Debian, j’ai installé les éléments ainsi :

  1. apt-get install unoconv
  2.  
  3. apt-get install openoffice.org
  4. apt-get install openoffice.org-headless
  5. apt-get install openoffice.org-writer

Télécharger

Ne me demandez pas plus de précisions sur l’installation, ni sur Debian ni sur aucun autre système : je suis une véritable bille de ce côté.

Le fichier de traitement texte est donc transformé en fichier HTML, et les images qu’il contient sont sauvegardées sur le serveur.

Étape 2 : convertir vers SPIP

Une fois le fichier HTML obtenu, je le fais passer par une moulinette dérivée de la fonction sale() (une vieille fonction tirée de rezo.net jamais réellement finalisée), pour transformer le code HTML en code SPIP, puis je fabrique un article et j’y insère les images.

Notez bien : c’est une toute première version d’un plugin peu finalisé. Son usage n’est pas évident, et il est réservé aux webmestres qui peuvent et savent installer des logiciels (non PHP) sur leur serveur.

Modifications

  • 0.2. On peut demander au plugin de créer un document PDF à partir du document d’origine et de le joindre à l’article SPIP.
  • 0.3. On peut décider de conserver le document d’origine et de le joindre en tant que « document joint » à l’article SPIP. Uniquement pour les formats gérés par SPIP.
  • 0.4. Possibilité d’indiquer l’URL d’un fichier (notamment page Web) distant. Le plugin rapatrie le document et effectue le traitement.
  • 0.5. Repérer l’encodage d’un fichier HTML distant (par son meta) et convertir en utf-8 si nécessaire.
  • 0.6. Corriger les liens hypertextuels relatifs (les liens vers l’intérieur du site de l’article original deviennent des liens absolus vers ces articles).
  • 0.7
    • Les images des pages web distantes sont rapatriées et installées en documents joints. Le raccourci devient <doc> pour faciliter la correction des éventuels titres d’images.
    • Ce faisant, la création de fichier PDF à partir d’une page Web distante est grandement améliorée.
  • 0.8
    • Quand une image est un lien hypertexte direct vers une autre image, on considère qu’il s’agit d’une vignette prévisualisant une « grande » image. On rapatrie alors l’image cible et on l’installe dans le portfolio de l’article SPIP.
    • Suppression des caractères Unicode de césure discrète dans le code source, parce que (1) SPIP les remettra lui-même si on le désire, (2) ça doit certainement largement améliorer le fonctionnement du moteur de recherche, (3) l’édition de texte dotés de caractères Unicode invisibles est pénible.

To do

Les éléments barrés sont désormais intégrés dans le plugin.

  • Installer une config qui permettrait :
    • de modifier le chemin d’appel à unoconv,
    • de faire fonctionner uniquement la partie « rapatrier une page Web », puisque celle-ci ne nécessite pas unoconv.
  • Joindre le document d’origine à l’article créé.
  • Créer un document PDF à partir du document d’origine et le joindre à l’article créé.
  • Pouvoir installer un document à partir du dossier /tmp/upload.
  • Pouvoir traiter en batch tout le contenu d’un dossier de /tmp/upload et créer autant d’articles que nécessaire.
  • @Fil : pouvoir downloader un fichier Word de l’article et pouvoir réuploader une nouvelle version (de façon à pouvoir faire réaliser des modifs directement par un échange de fichiers Word).
  • @Fil : créer une version client-serveur pour ceux qui ne peuvent installer unoconv. Remarques : (1) c’est très intrusif, puisque le contenu complet serait envoyé à un serveur externe, (2) il faut un serveur puissant, parce que le traitement est relativement lourd, (3) une difficulté est que le système extrait aussi les images et les intègre à l’article, le traitement client-serveur est donc plus complexe que pour le traitement TeX.
  • Pourvoir envoyer un fichier HTML. (Ça semble fonctionner d’office.)
  • Pourvoir indiquer une URL sur le Web pour en faire un article.
  • Traiter les images des documents HTML distants.
  • Traiter spécifiquement les images qui mènent vers des images (documents joints).
  • Analyser les liens hypertexte : quand le lien est un fichier et non une page Web (genre PDF, Word..), rapatrier le document et l’installer en pièce jointe.
  • Supprimer les indications de césures discrètes.
  • Vérifier les apostrophes.
  • Rétablir les ancres internes (notamment notes de bas de page).
Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.