Создание Microsoft Word (.docx) документы в Ruby

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

камень похож на креветки но DOCX вместо PDF было бы здорово!

13 ответов


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

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

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

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

создание нового документа Word с полностью настраиваемым контентом из raw XML было бы очень сложно без доступа к API сделать работу проще. Если вам действительно нужно это сделать, вы можете рассмотреть возможность установки моно, затем используйте VB.NET, C# или IronRuby для создания документов Open XML с помощью Open XML Format SDK 1.0. Поскольку вы просто используете Microsoft.Офис.Имен documentformat.функция OPENXML.Пространство Имен Упаковки чтобы манипулировать документами Open XML, он должен нормально работать в Mono, который, похоже, поддерживает все, что требуется SDK.


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

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


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


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

https://github.com/nickfrandsen/htmltoword

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

обновление:

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


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

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

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


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


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


раскрытие информации: я лидер проекта 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

далее к ответу Гранта вы также можете отправить Word файл "Flat OPC", который по существу является docx распакованным и Объединенным для создания одного xml-файла. Таким образом, вы можете заменить [USER-PLACEHOLDER] в одном файле и сделать с ним (т. е. без молнии или распаковки).


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

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


Если вы работаете в Windows, конечно, это вопрос WIN32OLE и некоторой боли со словом COM-объекты.

скорее всего, ваша подача из среды *nix. Word 2007 использует "Microsoft Office Open XML" формат (*.docx), который можно открыть с помощью соответствующего пакет совместимости от Microsoft.

некоторые из последних приложений Office (по крайней мере, 2002/XP и 2003) имели их собственные форматы XML что также может быть полезен.

Я не знаю никаких инструментов Ruby, чтобы сделать процесс проще, к сожалению.

Если это можно сделать приемлемым, я думаю, что я был бы склонен пойти по переименованному-html-файлу. Я просто сохранил документ как HTML из WordXP, переименовал его в a .док и открыл его без проблем.


проверьте это РЕПО github:https://github.com/jawspeak/ruby-docx-templater

Это позволяет создать документ из шаблона word.


Я столкнулся с той же проблемой. К сожалению, я не мог манипулировать xml, потому что мои клиенты должны сами заполнять шаблоны. И сделать это не всегда возможно (например, office для mac этого не позволяет).

в качестве решения этой проблемы я сделал простой камень, который можно использовать в качестве шаблона rtf-документа со встроенным ruby:https://github.com/eicca/rtf-templater

Я проверил его и он работает нормально для заполнения отчетов и документы. Однако форматирование плохо отображается для сложных циклов и условий.