Pequeña introducción a la programación de scripts para OpenOffice.org. La receta incluye una macro para convertir a PDF desde línea de comandos.
Ingredientes
openoffice.org
python-uno
Introducción
OpenOffice.org está basado en una arquitectura de componentes llamada UNO, algo parecido a CORBA o ZeroC Ice. Hasta tal punto que los clientes y los componentes pueden estar en máquinas diferentes. Y también como en CORBA se pueden programar los componentes en varios lenguajes: OOBasic, C++, Java, JavaScript, BeanShell y… Python! El más popular de todos ellos es OOBasic, debido principalmente a que el propio OOo incorpora un IDE con depuración y todo. Pero como Basic es muy aburrido, yo elijo Python, que me gusta más :-)
Con UNO se pueden crear:
Componentes, que se pueden añadir a la propia interfaz de OOo, con menús, cuadros de diálogo, etc.
Aplicaciones, que utilizan el API de OOo y que normalmente necesitan que previamente exista una instancia de OOo en ejecución. Este HelloWorld funciona de ese modo:
Macros, que ejecuta el propio OOo. Se puede hacer desde “Tools→Macros→Execute macro” o desde línea de comando. Este otro “HelloWorld” que viene con el paquete Debian python-uno funciona como macro.
Conversor PDF
Partiendo de esta macro en OOBasic, la gran cantidad de ejemplos que hay en http://www.oooforum.org/, y sobre todo de la OOLib.py de Danny Brewer, más unas pequeñas modificaciones propias he escrito esta otra macro, que hace lo mismo, pero en Python (que mola más):
Tienes que escribir esto en un fichero que se llame ~/.openoffice.org2/user/Scripts/python/oo2pdf.py.
¿Y cómo se usa?
Pues “simplemente” tienes que ejecutar este comando:
Obviamente lo mejor es escribir otro scriptillo para ejecutar ese engendro de comando.
Lo metes en ~/bin/oo2pdf, le das permisos de ejecución y lo puedes ejecutar con:
También lo puedes transformar en un g-script para nautilus, pero lo realmente interesante es utilizarlo desde un Makefile o similar para convertir de forma automatizada miles de .odt de un plumazo. También convierte cualquier otro formato de OOo, incluido el .doc de MS (pero no se lo digas a nadie).
El fichero de entrada se especifica en la variable de entorno $OOARG, que luego se lee desde el script. Eso es porque no he conseguido averiguar cómo pasar argumentos al script desde la línea de comandos de soffice. Con OOBasic se puede hacer, pero está claro que OOo trata de modo muy diferente a las macros en OOBasic que las escritas en el resto de lenguajes. Si sabes cómo hacerlo, por favor, deja un comentario.