Objectifs
Nous allons d'abord voir dans cet article comment mettre en place un webservice de conversion de documents basé sur OpenOffice et JODConverter.Nous verrons ensuite comment utiliser ce webservice depuis un script PHP pour permettre à n'importe laquelle de vos applications de transformer des documents DOC, ODT, SXW, XLS, PPT ou tout autre format lu par OpenOffice en n'importe quel format supporté en écriture par OpenOffice (PDF, ODT, DOC, etc...)
Installation d'OpenOffice
La version fournie sur les dépôts officiels de Debian est un peu dépassée (2.0). Nous allons donc installer la dernière version à la main car la version 2.3 offre notamment la possibilité d'éxecuter OpenOffice sans serveur X alors que pour pouvoir utiliser les versions précédentes il faut obligatoirement un serveur X ou un équivalent virtuel (Xvfb)Téléchargement
On va sur le site officiel ( http://fr.openoffice.org/about-downloads.html ) et on télécharge la version .deb sans java.Installation
On extrait le contenu de l'archivetar zxvf OOo_2.3.0_LinuxIntel_install_fr_deb.tar.gz
Puis on va dans le dossier contenant les paquets d'installation
cd OOG680_m5_native_packed-1_fr.9221/DEBS
Puis on passe en root avant d'installer OpenOffice avec la commande suivante
dpkg -i *.deb
OpenOffice est désormais installé dans le dossier /opt/openoffice.org2.3L'exécutable (soffice) se situe dans le sous dossier /opt/openoffice.org2.3/program
Mais ça ne suffit pas ! OpenOffice a besoin entre autres pour fonctionner du Runtime de JAVA.
Il faut donc installer la JRE de Java. Pour cela nous devons activer les dépôts non-free de Debian en modifiant le fichier /etc/apt/sources.list
nano /etc/apt/sources.list
et remplacez les lignesdeb http://ftp.fr.debian.org/debian/ etch main
deb-src http://ftp.fr.debian.org/debian/ etch main
pardeb-src http://ftp.fr.debian.org/debian/ etch main
deb http://ftp.fr.debian.org/debian/ etch main non-free
deb-src http://ftp.fr.debian.org/debian/ etch main non-free
Enfin, nous pouvons installer la JRE de Java :
deb-src http://ftp.fr.debian.org/debian/ etch main non-free
apt-get install sun-java5-jre
(Vous devez valider la licence pendant l'installation)Vous devez également satisfaire les dépendances suivantes :
apt-get install libxext6 libsm6
Voilà, OpenOffice est installé et fonctionnel. Sans serveur X, difficile de tester son bon fonctionnement mais si vous pouvez l'exécuter sans erreur en ligne de commande, c'est bon signe.Installation de JODConverter
JODConverter est un projet open source développé en JAVA dont le rôle et de fournir une interface entre vos applications et OpenOffice.JODConverter peut être utilisé en ligne de commande ou comme un webservice. Nous allons nous pencher sur la 2ème option.
Téléchargement
Rendez vous d'abord sur le site officiel ( http://www.artofsolving.com/opensource/jodconverter ) puis allez sur la page "download" et prenez la version qui inclut le conteneur de servlet Tomcat. Il s'agit d'une version un peu particulière qui permet d'installer très simplement JODConverter en webservice avec Tomcat.Pour ma part je fais un wget sur un des mirroirs de sourceforge
wget http://ovh.dl.sourceforge.net/sourceforge/jodconverter/jodconverter-tomcat-2.2.0.zip
Installation
Dans l'ordre, on extrait le contenu de l'archive avec unzip, on passe en root si ce n'est pas fait, on déplace le dossier dans un dossier plus adapté, on crée un lien symbolique qui va nous éviter d'utiliser le nom complet du dossier et on crée une variable d'environnement permettant à Tomcat de connaître l'emplacement du runtime de Java.unzip jodconverter-tomcat-2.2.0.zip
mv jodconverter-tomcat-2.2.0 /usr/local/
ln -s /usr/local/jodconverter-tomcat-2.2.0 /usr/local/jodconverter
export JRE_HOME='/usr/lib/jvm/java-1.5.0-sun'
mv jodconverter-tomcat-2.2.0 /usr/local/
ln -s /usr/local/jodconverter-tomcat-2.2.0 /usr/local/jodconverter
export JRE_HOME='/usr/lib/jvm/java-1.5.0-sun'
Premier démarrage
On démarre d'abord OpenOffice en service sur le port 8100/opt/openoffice.org2.3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
Depuis la version 2.3, il n'est plus nécessaire de disposer d'un serveur X. On dispose donc d'un service OpenOffice à l'écoute en local sur le port 8100.On démarre ensuite JODConverter+Tomcat
cd /usr/local/jodconverter/bin
./startup.sh
Si tout c'est bien déroulé jusqu'ici vous devriez voir ceci :
./startup.sh
Using CATALINA_BASE: /usr/local/jodconverter
Using CATALINA_HOME: /usr/local/jodconverter
Using CATALINA_TMPDIR: /usr/local/jodconverter/temp
Using JRE_HOME: /usr/lib/jvm/java-1.5.0-sun
Le serveur Tomcat démarre par défaut sur le port 8080. Using CATALINA_HOME: /usr/local/jodconverter
Using CATALINA_TMPDIR: /usr/local/jodconverter/temp
Using JRE_HOME: /usr/lib/jvm/java-1.5.0-sun
Vous pouvez donc tester l'interface du webservice en saisissant l'url suivante dans votre navigateur : http://madebian:8080/
Si tout s'est bien déroulé, vous devriez disposer d'une interface sommaire vous propose de convertir un document.
Utilisation du webservice depuis un programme PHP
on crée une petite fonction "ooConvert" qui prend en paramètre le contenu du document ($inputFile), le type mime du document source ($inputType) et le type mime du document à générer ($outputType). Cette fonction utilise la classe HTTP_Request contenue dans la librairie PEARfunction ooConvert($inputFile, $inputType, $outputType) {
require_once 'HTTP/Request.php';
$request = new HTTP_Request('http://madebian:8080/converter/service);
$request->setMethod("POST");
$request->addHeader("Content-Type", $inputType);
$request->addHeader("Accept", $outputType);
$request->setBody(file_get_contents($inputFile));
$request->sendRequest();
return $request->getResponseBody();
}
Il suffit ensuite d'appeler cette fonction. Il s'agit ici de convertir un document ODT en PDF.
require_once 'HTTP/Request.php';
$request = new HTTP_Request('http://madebian:8080/converter/service);
$request->setMethod("POST");
$request->addHeader("Content-Type", $inputType);
$request->addHeader("Accept", $outputType);
$request->setBody(file_get_contents($inputFile));
$request->sendRequest();
return $request->getResponseBody();
}
$outputData = ooConvert('monfichier.odt', 'application/vnd.oasis.opendocument.text', 'application/pdf');
Le document généré est renvoyé dans la variable $outputData. Il suffit ensuite de copier le contenu de la variable dans un fichier.Autre exemple pour convertir un document DOC en ODT
$outputData = ooConvert('monfichier.doc', 'application/msword', 'application/vnd.oasis.opendocument.text');
Voilà ! il faudrait ensuite consolider tout ceci pour démarrer l'ensemble des applications au lancement du serveur, pour ajouter les variables d'environnement mais il s'agissait avant tout de faire une démonstration du fonctionnement et du processus d'installation.