Создание документов Microsoft Word (.docx) в Ruby - PullRequest
45 голосов
/ 30 марта 2009

Существует ли простой способ создания документов Word (.docx) в приложении на Ruby? На самом деле, в моем случае это приложение Rails, обслуживаемое с сервера Linux.

Драгоценный камень, похожий на Креветка , но для DOCX вместо PDF был бы великолепен!

Ответы [ 13 ]

41 голосов
/ 30 марта 2009

Как уже отмечалось, в Ruby, похоже, нет библиотек для манипулирования документами Open XML, но OpenXML Developer имеет полную документацию по формату документов Open XML.

Если вы хотите отправить копию стандартного документа (например, письма формы), настроенного для каждого пользователя, это должно быть довольно просто, учитывая, что DOCX - это ZIP-файл, который содержит различные части в иерархии каталогов. Создайте «шаблон» DOCX, содержащий все части и древовидную структуру, которые вы хотите отправить all пользователям (без реального содержимого), а затем просто создайте новые (или измените существующие) фрагменты, которые содержат пользовательский контент, который вы хотите и вставьте его в ZIP (файл DOCX) перед отправкой пользователю.

Например: у вас может быть document-template.xml, который содержит Уважаемый [USER-PLACEHOLDER]: . Когда пользователь запрашивает документ, вы заменяете [USER-PLACEHOLDER] на имя пользователя, затем добавляете полученный document.xml в ZIP-файл your-template.docx (который будет содержать все изображения и другие части, которые вы хотите в документе Word) и отправляете этот результирующий документ для пользователя.

Обратите внимание, что если вы переименуете файл .docx в .zip, будет просто исследовать структуру и формат частей внутри. Вы можете легко удалить или заменить изображения или другие детали с помощью любых инструментов для манипулирования ZIP или программным способом с помощью кода.

Создание совершенно нового документа Word с полностью настраиваемым содержимым из необработанного XML было бы очень затруднительным без доступа к API, чтобы упростить работу. Если вам действительно нужно это сделать, вы можете рассмотреть возможность установки Mono , а затем использовать VB.NET, C # или IronRuby для создания документов Open XML с помощью Open XML Format SDK 1,0 . Поскольку вы просто используете пространство имен Microsoft.Office.DocumentFormat.OpenXml.Packaging для манипулирования документами Open XML, оно должно нормально работать в Mono, который, кажется, поддерживает все, что требуется SDK.

7 голосов
/ 30 марта 2009

Вы можете использовать Apache POI . Он написан на Java, но интегрируется с Ruby как расширение

6 голосов
/ 28 июля 2015

Может быть, этот камень вам интересен.

https://github.com/trade-informatics/caracal/

Это как креветка, но с docx.

6 голосов
/ 20 августа 2014

Это старый вопрос, но есть новый ответ. Если вы хотите превратить документ HTML в документ Word (docx), просто используйте гем 'htmltoword':

https://github.com/nickfrandsen/htmltoword

Я не уверен, почему произошел ползучий ответ, и все начали публиковать шаблонные решения, но это отвечает на вопрос ОП. Точно так же, как Prawn, за исключением Word вместо PDF.

UPDATE:

Существует также pandoc и API-оболочка для pandoc, называемая docverter . Оба имеют немного сложную установку, поскольку pandoc - это библиотека haskell.

6 голосов
/ 30 марта 2009

Я знаю, что если вы предоставите HTML-документ как документ Word с расширением .doc, он откроется в Word очень хорошо. Просто не делай ничего необычного.

Редактировать: Вот пример использования классического ASP. http://www.aspdev.org/asp/asp-export-word/

4 голосов
/ 23 июля 2013

Это способ, которым Doccy ( doccyapp.com ) имеет API, который делает именно то, что вы можете использовать. Поддерживает docx, odt и pages, а также конвертирует в PDF, если вам нравится

3 голосов
/ 21 февраля 2014

Раскрытие информации: я лидер проекта docxtemplater.

Я знаю, что вы ищете решение ruby, но поскольку все другие решения говорят только о том, как сделать это глобально, без предоставления вам библиотеки, которая делает именно то, что вы хотите, вот решение, основанное на JS или NodeJS (работает в обоих)

Библиотека DocxTemplater

Демонстрация библиотеки

Вы также можете использовать его в командной строке:

npm install docxtemplater -g

docxtemplater <configFile>

----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
3 голосов
/ 22 августа 2013

Используя технику, очень похожую на предложенную Грантом Вагнером, я создал Ruby html to word gem, который позволит вам легко выводить файлы Word docx из вашего приложения ruby. Вы можете проверить это в http://github.com/nickfrandsen/htmltoword - просто передайте ему строку html, и он создаст соответствующий файл слова docx.

def show
  respond_to do |format|
    format.docx do
      file = Htmltoword::Document.create params[:docx_html_source], "file_name.docx"
      send_file file.path, :disposition => "attachment"
    end
  end
end

Надеюсь, вы найдете это полезным. Если у вас есть какие-либо проблемы с ним, не стесняйтесь, чтобы открыть вопрос GitHub.

2 голосов
/ 31 января 2012

Если кто-то еще смотрит на это, этот пост объясняет, как использовать источник данных XML. Это хорошо работает для меня.

http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/

2 голосов
/ 02 апреля 2009

В дополнение к ответу Гранта, вы также можете отправить Word файл «Flat OPC», который по сути является docx, разархивированным и объединенным для создания одного файла XML. Таким образом, вы можете заменить [USER-PLACEHOLDER] в одном файле и покончить с этим (то есть без заархивирования или разархивирования).

...