Analizar y generar archivos de Microsoft Office 2007 (.docx, .xlsx, .pptx)

Tengo un proyecto web en el que debo importar texto e imágenes de un documento proporcionado por el usuario, y uno de los formatos posibles es Microsoft Office 2007. También es necesario generar documentos en este formato.

El servidor ejecuta CentOS 5.2 y tiene PHP / Perl / Python instalado. Puedo ejecutar binarios locales y scripts de shell si es necesario. Usamos Apache 2.2, pero cambiaremos a Nginx una vez que se active.

¿Cuáles son mis opciones? ¿Alguien ha tenido experiencia con esto?

Los formatos de archivo de Office 2007 están abiertos y bien documentados . En términos generales, todos los nuevos formatos de archivo que terminan en “x” son documentos XML comprimidos en zip. Por ejemplo:

Para abrir un archivo XML de Word 2007 Cree una carpeta temporal en la que almacenar el archivo y sus partes.

Guarde un documento de Word 2007, que contenga texto, imágenes y otros elementos, como un archivo .docx.

Agregue una extensión .zip al final del nombre del archivo.

Haga doble clic en el archivo. Se abrirá en la aplicación ZIP. Puedes ver las partes que componen el archivo.

Extraiga las partes a la carpeta que creó anteriormente.

Los otros formatos de archivo son aproximadamente similares. Todavía no conozco ninguna biblioteca de código abierto para interactuar con ellos, pero según sus requisitos exactos, no parece demasiado difícil leer y escribir documentos simples. Ciertamente, debería ser mucho más fácil que con los formatos anteriores.

Si necesita leer los formatos anteriores, OpenOffice tiene una API y puede leer y escribir documentos de Office 2003 y anteriores con más o menos éxito.

El módulo docx de python puede generar archivos docx de Microsoft Office formateados desde Python puro. Fuera de la caja, hace encabezados, párrafos, tablas y viñetas, pero el módulo makeelement () puede extenderse para hacer elementos arbitrarios como imágenes.

from docx import * document = newdocument() # This location is where most document content lives docbody = document.xpath('/w:document/w:body',namespaces=wordnamespaces)[0] # Append two headings docbody.append(heading('Heading',1) ) docbody.append(heading('Subheading',2)) docbody.append(paragraph('Some text') 

He utilizado con éxito el SDK de formato OpenXML en un proyecto para modificar una hoja de cálculo de Excel a través del código. Esto requeriría .NET y no estoy seguro de qué tan bien funcionaría con Mono.

Probablemente puedas revisar el código de Sphider . Son documentos y archivos PDF, así que estoy seguro de que pueden leerlos. También podría guiarlo en la dirección correcta para otros formatos de Office.