Java avec OpenOffice sous Linux

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

Il y a quelques temps, j’ai développé un petit programme java qui génère une table des matières dans une présentation OOo Impress. Tout fonctionnait bien sous Windows, mais sur mon poste Ubuntu, j’avais systématiquement le message d’exception suivant :

com.sun.star.comp.helper.BootstrapException: no office executable found!
       at com.sun.star.comp.helper.Bootstrap.bootstrap(Bootstrap.java:253)
       at fr.sewatech.sewatoool.impress.helper.ImpressHelper.<init>(ImpressHelper.java:55)
       ... 1 more

Pourtant OpenOffice était bien installé sur la machine, et les jars du classpath étaient bien ceux du répertoire d’installation d’OOo. Et le problème se posait que je lance mon application depuis Eclipse ou en ligne de commande.

Ligne de commande

Pour information, voici le script que je lançais :

OFFICE_HOME="/usr/lib/openoffice/program/"
CLASSPATH="sewatoool.jar:$OFFICE_HOME/classes/juh.jar:$OFFICE_HOME/classes/jurt.jar:$OFFICE_HOME/classes/ridl.jar:$OFFICE_HOME/classes/unoil.jar"
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc

J’ai beaucoup cherché sur la toile, sans trouver de solution adaptée à mon cas. Cependant, en testant divers solutions, j’ai constaté qu’il fallait que je rajoute le répertoire program d’OOo dans le classpath. En fait, tout sous-répertoire de program ou tout fichier inclus dans un sous-repertoire, qui ne soit pas un jar valide, peut être ajouté.

Le script suivant fonctionne :

OFFICE_HOME="/usr/lib/openoffice/program/"
CLASSPATH="sewatoool.jar:$OFFICE_HOME/classes/juh.jar:$OFFICE_HOME/classes/jurt.jar:$OFFICE_HOME/classes/ridl.jar:$OFFICE_HOME/classes/unoil.jar:$OFFICE_HOME"
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc

Restait encore à résoudre le problème dans Eclipse.

Dans Eclipse

Pour mes développements, jai créé une "user library" qui rassemble les 4 jars nécessaires. Mais comme ces librairies ne peuvent pas contenir d'"external folder", j’ai du contourner le problème.

Ma première solution (ou plutôt bidouille !) consistait à créer un fichier jar bidon dans program/classes et à l’ajouter dans la "user library".

La deuxième solution, probablement meilleure, consiste à ajouter le répertoire program en tant qu'"external folder" dans la configuration de lancement de l’application. Il faut utiliser le bouton "Advanced" pour cela.

Run-sewatoool.png

Cette solution a été testée avec Ubuntu 7.10, OpenOffice 2.3 et Eclipse 3.3.

La documentation de développement OpenOffice peut être trouvé sur leur wiki.

Avec OpenOffice 3

Dans la version 3 de OpenOffice, la structure de fichiers a un peu changé.

OFFICE_HOME="/usr/lib/openoffice"
CLASSPATH="sewatoool.jar:$OFFICE_HOME/URE/java/juh.jar:$OFFICE_HOME/URE/java/jurt.jar:$OFFICE_HOME/URE/java/ridl.jar:$OFFICE_HOME/Basis/program/classes/unoil.jar:$OFFICE_HOME/Basis/program"
java -cp $CLASSPATH fr.sewatech.sewatoool.impress.DocumentService toc