50

有没有一种在 Ruby 应用程序中创建 Word 文档 (.docx) 的简单方法?实际上,就我而言,它是从 Linux 服务器提供的 Rails 应用程序。

类似于Prawn的 gem,但用于DOCX而不是 PDF 会很棒!

4

13 回答 13

43

如前所述,似乎没有任何库可以在 Ruby 中操作 Open XML 文档,但OpenXML Developer拥有关于 Open XML 文档格式的完整文档。

如果您想要发送为每个用户定制的标准文档(如套用信函)的副本,那么它应该相当简单,因为 DOCX 是一个 ZIP 文件,其中包含目录层次结构中的各个部分。拥有一个 DOCX“模板”,其中包含您想要发送给all用户的所有部分和树结构(没有实际内容),然后只需创建包含您想要的用户特定内容的新(或修改现有)片段并注入它在将其发送给用户之前,将其放入 ZIP(DOCX 文件)中。

例如:您可能拥有document-template.xml包含Dear [USER-PLACEHOLDER]: 的内容。当用户请求该文档时,您将其替换[USER-PLACEHOLDER]为用户名,然后将结果添加document.xmlyour-template.docxZIP 文件(其中将包含您在 Word 文档中所需的所有图像和其他部分)并将该结果文档发送给用户。

请注意,如果您将.docx文件重命名为.zip它,则可以轻松探索内部部件的结构和格式。您可以使用任何 ZIP 操作工具或以编程方式使用代码轻松删除或替换图像或其他部分。

如果不访问 API 以简化工作,则从原始 XML 生成具有完全自定义内容的全新 Word 文档将非常困难。如果您确实需要这样做,您可以考虑安装Mono,然后使用 VB.NET、C# 或IronRuby使用Open XML Format SDK 1.0创建您的 Open XML 文档。由于您只是使用Microsoft.Office.DocumentFormat.OpenXml.Packaging 命名空间来操作 Open XML 文档,因此它在 Mono 中应该可以正常工作,这似乎支持 SDK 所需的一切。

于 2009-03-30T17:01:35.383 回答
11

也许这颗宝石对你来说很有趣。

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

它像虾,但带有 docx。

于 2015-07-28T16:39:30.143 回答
8

您可以使用Apache POI。它是用 Java 编写的,但作为扩展与 Ruby 集成

于 2009-03-30T18:38:10.910 回答
8

这是一个老问题,但有一个新答案。如果您想将 HTML 文档转换为 Word (docx) 文档,只需使用“htmltoword”gem:

https://github.com/karnov/htmltoword

我不确定为什么会有答案蔓延,每个人都开始发布模板解决方案,但这回答了 OP 的问题。就像 Prawn,除了 Word 而不是 PDF。

更新:

还有pandoc和一个名为docverter的 pandoc的 API 包装器。由于 pandoc 是一个 haskell 库,因此两者的安装都有些复杂。

于 2014-08-20T17:35:10.263 回答
7

我知道如果您将 HTML 文档作为扩展名为 .doc 的 word 文档提供,它会在 Word 中正常打开。只是不要做任何花哨的事情。

编辑:这是一个使用经典 ASP 的示例。http://www.aspdev.org/asp/asp-export-word/

于 2009-03-30T14:43:05.560 回答
4

使用与 Grant Wagner 建议的非常相似的技术,我创建了一个 Ruby html to word gem,它应该允许您轻松地从您的 ruby​​ 应用程序输出 Word docx 文件。您可以在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 问题。

于 2013-08-22T14:30:17.313 回答
4

披露:我是 docxtemplater 项目的负责人。

我知道您正在寻找一个 ruby​​ 解决方案,但是因为所有其他解决方案只告诉您如何在全球范围内执行此操作,而没有为您提供完全符合您要求的库,所以这里有一个基于 JS 或 NodeJS 的解决方案(两者都适用)

DocxTemplate 库

库的演示

您也可以在命令行中使用它:

npm install docxtemplater -g

docxtemplater <configFile>

----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
于 2014-02-21T16:25:03.550 回答
3

这是 Doccy ( doccyapp.com ) 有一个 api 的一种方式,它可以做你可以使用的事情。支持 docx、odt 和 pages,如果你喜欢也可以转换为 PDF

于 2013-07-23T01:20:12.033 回答
2

除了格兰特的回答,您还可以向 Word 发送“Flat OPC”文件,该文件本质上是解压缩并连接起来的 docx 文件以创建单个 xml 文件。这样,您可以在一个文件中替换 [USER-PLACEHOLDER] 并完成(即不压缩或解压缩)。

于 2009-04-01T22:52:35.790 回答
2

如果有人还在看这个,这篇文章解释了如何使用 XML 数据源。这对我很有效。

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

于 2012-01-30T21:21:08.617 回答
2

查看这个 github 存储库:https ://github.com/jawspeak/ruby-docx-templater

它允许您从 word 模板创建文档。

于 2013-02-07T01:51:47.593 回答
1

如果你在 Windows 上运行,当然,这是一个 WIN32OLE 的问题和 Word COM 对象的一些痛苦。

不过,您很有可能在 *nix 环境中提供服务。Word 2007 使用“ Microsoft Office Open XML ”格式 (*.docx),可以使用Microsoft 的相应兼容包打开该格式。

一些较新的 Office 应用程序(至少是 2002/XP 和 2003)有自己的 XML 格式,这些格式也可以使用。

遗憾的是,我不知道有任何 Ruby 工具可以让这个过程变得更容易。

如果可以接受,我想我会倾向于使用重命名的 html 文件路径。我刚刚从 WordXP 将文档保存为 HTML,将其重命名为 .doc 并毫无问题地打开它。

于 2009-03-30T15:06:09.453 回答
0

我遇到了同样的问题。不幸的是,我无法操作 xml,因为我的客户应该自己填写模板。而且这样做并不总是可行的(例如,office for mac 不允许这样做)。

为了解决这个问题,我做了一个简单的gem,可以作为嵌入ruby的rtf文档模板:https ://github.com/eicca/rtf-templater

我对其进行了测试,它可以正常填写报告和文件。但是,对于复杂的循环和条件,格式设置很差。

于 2012-06-09T13:02:52.097 回答