#php #python #perl #parsing #office-2007
Вопрос:
У меня есть веб-проект, в котором я должен импортировать текст и изображения из предоставленного пользователем документа, и одним из возможных форматов является 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:
Я успешно использовал SDK формата OpenXML в проекте для изменения электронной таблицы Excel с помощью кода. Для этого потребуется .NET, и я не уверен, насколько хорошо он будет работать в Mono.
Ответ №4:
Вероятно, вы можете проверить код на Sphider. Это документы и PDF-файлы, так что я уверен, что они смогут их прочитать. Это также может привести вас в правильном направлении для других офисных форматов.