Анализ и создание файлов Microsoft Office 2007 (.docx,.xlsx,.pptx)

У меня есть веб-проект, где я должен импортировать текст и изображения из предоставленного пользователем документа, а одним из возможных форматов является Microsoft Office 2007. Также необходимо создавать документы в этом формате.

Сервер запускает CentOS 5.2 и устанавливает PHP/Perl/Python. Я могу выполнить локальные двоичные файлы и сценарии оболочки, если нужно. Мы используем Apache 2.2, но будем переключаться на Nginx, когда он появится в прямом эфире.

Каковы мои варианты? У кого-нибудь был опыт?

Ответы

Ответ 1

Форматы файлов Office 2007 открыты и хорошо документированы. Грубо говоря, все новые форматы файлов, заканчивающиеся на "x", представляют собой сжатые XML-документы с zip-сжатием. Например:

Чтобы открыть XML файл Word 2007, создайте временную папку для хранения файл и его части.

Сохраните документ Word 2007, содержащий текст, изображения и другие элементы, так как файл .docx.

Добавьте расширение .zip в конец имя файла.

Дважды щелкните файл. Он откроется в приложение ZIP. Вы можете видеть которые содержат файл.

Извлеките части в папку, которая вы создали ранее.

Другие форматы файлов примерно одинаковы. Я не знаю каких-либо библиотек с открытым исходным кодом для взаимодействия с ними пока, но в зависимости от ваших точных требований, не слишком сложно читать и писать простые документы. Конечно, это должно быть намного проще, чем с более старыми форматами.

Если вам нужно прочитать старые форматы, OpenOffice имеет API и может читать и писать Office 2003 и более старые документы с большим или меньшим успехом.

Ответ 2

Модуль python docx может создавать отформатированные файлы Microsoft Office docx из чистого Python. Из коробки это заголовки, абзацы, таблицы и маркеры, но модуль makeelement() может быть расширен для выполнения произвольных элементов, таких как изображения.

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')

Ответ 3

Я успешно использовал OpenXML Format SDK в проекте для изменения электронной таблицы Excel с помощью кода. Для этого потребуется .NET, и я не уверен, насколько он будет работать в Mono.

Ответ 4

Возможно, вы можете проверить код Sphider. Они документируют и pdf файлы, поэтому я уверен, что они могут их прочитать. Может также привести вас в правильном направлении для других форматов Office.