Como utilizar OpenOffice desde PHP
Escrito por Jose Carlos el 23 de Febrero de 2008
La novedad mas grande de eyeOS 1.5, fue el soporte para formatos de oficina, disponiendo de la posibilidad de trabajar desde eyeOS con hojas de calculo de todo tipo (ods, xls, …), documentos de texto (doc, odt, sxw, …), y presentaciones (odp, ppt, …).
Para poder brindar ese soporte en eyeOS, estuve investigando varias posibilidades, y finalmente di con una que me convenció: utilizar OpenOffice desde PHP, para que el me hiciese conversiones entre formatos, por ejemplo, de doc a xhtml, de odt a xhtml, extraer las diapositivas de una presentación como archivos JPEG, etc.
Para utilizar el método que voy a explicar, requieres tener OpenOffice instalado en el servidor web, aunque no requieres un servidor X, ya que utilizaremos el OpenOffice mediante la linea de comandos.
El método resumido es sencillo: cargamos una macro global en OpenOffice y la utilizamos desde la linea de comandos, usando shell_exec en PHP.
OpenOffice permite ser ejecutado sin mostrar su interfaz, y permite ser ejecutado directamente para ejecutar una macro y finalizar, el problema reside en que no podemos ejecutar OpenOffice sin un servidor X, incluso si lo utilizamos sin ventana y desde la consola, requiere un servidor X.
Por ello el primer paso es instalar Xvfb, una interesante aplicación que crea un servidor X virtual, que no muestra nada por pantalla, y nos permite ejecutar aplicaciones de las X sin disponer de las X instaladas.
Una vez instalado Xvfb, necesitamos ejecutarlo para atender peticiones:
Xvfb :1 -ac -screen 0 800×600x16 -fbdir /tmp &
Con esto, iniciamos Xvfb y lo dejamos atendiendo.
ahora podemos probar a ejecutar un OpenOffice en el servidor, y probar que realmente, no necesitamos las X:
soffice -headless -norestore -display :1.0
El siguiente paso es asegurarnos que el usuario que corre los scripts PHP en el servidor web (habitualmente nobody o www-data) tenga su home en un directorio que pueda escribir, por ejemplo, en /tmp, ya que OpenOffice necesita crear ficheros de configuración en la home de los usuarios que lo utilizan, y lo utilizaremos desde PHP.
Una vez con el entorno listo, solo nos falta cargar la macro en OpenOffice, podemos utilizar la macro de eyeOS, se distribuye bajo licencia AGPL, igual que el resto de eyeOS, podéis descargarla de aquÃ.
La descargamos y la copiamos a /usr/lib/openoffice/share/basic/Tools/eyeOS.xba (este directorio puede variar según la instalación de OpenOffice, y estar por ejemplo en /opt/openoffice/share/basic/Tools/
Luego, para que OpenOffice detecte la nueva macro, editamos /usr/lib/openoffice/share/basic/Tools/script.xlb y agregamos
<library:element library:name=”eyeOS”/>
debajo de
<library:element library:name=”Debug”/>
Guardamos, y ya podemos ejecutar la macro directamente desde PHP con shell_exec, esta macro toma 3 argumentos: un fichero de entrada, uno de salida, y el formato que quieres obtener.
Un ejemplo de como convertir ahora de odt a xhtml (para poder visualizarlo en la web)
$cmd = ’soffice -headless -norestore -display :1.0 “macro:///Tools.eyeOS.ConvertAny(fichero.ods,fichero.html,HTML (StarWriter))”‘;
shell_exec($cmd);
De esta forma ejecutamos directamente la macro, y le pedimos la conversión del fichero.
Para conocer otros formatos a los que podemos convertir, podemos consultar la api de OpenOffice.
Finalmente, si queremos extraer diapositivas de presentaciones, en forma de imágenes visualizables por cualquier navegador, la macro incluye una funció que extrae el número de diapositiva en la posición que le digas (la primera, la segunda, la tercera… la que quieras) y la guarda en el directorio que le indiques, asÃ:
$cmd = ’soffice -headless -norestore -display :1.0 “macro:///Tools.eyeOS.getSingleSlide(fichero.ods,1,diapositivas/)”‘;
shell_exec($cmd);
Con eso, extraerÃamos la primera diapositiva de fichero.ods, al directorio diapositivas/ en formato JPEG.
Espero que os haya gustado, yo me divertà bastante investigando todo esto y construyendo la macro, las dos únicas pegas, es que los hostings compartidos no tienen OpenOffice ni Xvfb, y que necesitas un servidor medianamente decente para poder ejecutar OpenOffice.
Con este método, es sencillo crear webs que conviertan entre formatos o visualicen documentos de oficina.
Entradas relacionadas
Publicado en: AplicacionesOnline, Programación, Tips-Trucos, web2.0Tags: eyeOS, formatos, oficina, openoffice, PHP
Reacciones de otros blogs sobre esta entrada




























[…] Como utilizar OpenOffice desde PHPwww.nativos2020.com/2008/02/23/como-utilizar-openoffice-desd… por jcarlosn hace pocos segundos […]
Te he dejado un comentario en la noticia de Menéame. Creo que, pese a que cumple su función, hay varios problemas con la solución que planteas. El más claro es el del rendimiento, puesto que necesitas cargar OOo cada vez que tienes que ejecutar una macro. Aunque, también es cierto que si hay un OOo ejecutándose, la siguiente llamada no intentará cargar todo el entorno.
Si, te he contestado en menéame, yo considero que esta es la solución mas práctica al problema, desde PHP.
Aunque si que estoy de acuerdo en que existen otras soluciones, pero requieren mucho mas tiempo de implementación.
La ejecución de soffice la segunda vez, es MUY rápida.