有没有一种在 Ruby 应用程序中创建 Word 文档 (.docx) 的简单方法?实际上,就我而言,它是从 Linux 服务器提供的 Rails 应用程序。
13 回答
如前所述,似乎没有任何库可以在 Ruby 中操作 Open XML 文档,但OpenXML Developer拥有关于 Open XML 文档格式的完整文档。
如果您想要发送为每个用户定制的标准文档(如套用信函)的副本,那么它应该相当简单,因为 DOCX 是一个 ZIP 文件,其中包含目录层次结构中的各个部分。拥有一个 DOCX“模板”,其中包含您想要发送给all
用户的所有部分和树结构(没有实际内容),然后只需创建包含您想要的用户特定内容的新(或修改现有)片段并注入它在将其发送给用户之前,将其放入 ZIP(DOCX 文件)中。
例如:您可能拥有document-template.xml
包含Dear [USER-PLACEHOLDER]: 的内容。当用户请求该文档时,您将其替换[USER-PLACEHOLDER]
为用户名,然后将结果添加document.xml
到your-template.docx
ZIP 文件(其中将包含您在 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 所需的一切。
您可以使用Apache POI。它是用 Java 编写的,但作为扩展与 Ruby 集成
这是一个老问题,但有一个新答案。如果您想将 HTML 文档转换为 Word (docx) 文档,只需使用“htmltoword”gem:
https://github.com/karnov/htmltoword
我不确定为什么会有答案蔓延,每个人都开始发布模板解决方案,但这回答了 OP 的问题。就像 Prawn,除了 Word 而不是 PDF。
更新:
还有pandoc和一个名为docverter的 pandoc的 API 包装器。由于 pandoc 是一个 haskell 库,因此两者的安装都有些复杂。
我知道如果您将 HTML 文档作为扩展名为 .doc 的 word 文档提供,它会在 Word 中正常打开。只是不要做任何花哨的事情。
编辑:这是一个使用经典 ASP 的示例。http://www.aspdev.org/asp/asp-export-word/
使用与 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 问题。
披露:我是 docxtemplater 项目的负责人。
我知道您正在寻找一个 ruby 解决方案,但是因为所有其他解决方案只告诉您如何在全球范围内执行此操作,而没有为您提供完全符合您要求的库,所以这里有一个基于 JS 或 NodeJS 的解决方案(两者都适用)
您也可以在命令行中使用它:
npm install docxtemplater -g
docxtemplater <configFile>
----config.docxFile: The input file in docx format
----config.outputFile: The outputfile of the document
这是 Doccy ( doccyapp.com ) 有一个 api 的一种方式,它可以做你可以使用的事情。支持 docx、odt 和 pages,如果你喜欢也可以转换为 PDF
除了格兰特的回答,您还可以向 Word 发送“Flat OPC”文件,该文件本质上是解压缩并连接起来的 docx 文件以创建单个 xml 文件。这样,您可以在一个文件中替换 [USER-PLACEHOLDER] 并完成(即不压缩或解压缩)。
如果有人还在看这个,这篇文章解释了如何使用 XML 数据源。这对我很有效。
http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/
查看这个 github 存储库:https ://github.com/jawspeak/ruby-docx-templater
它允许您从 word 模板创建文档。
如果你在 Windows 上运行,当然,这是一个 WIN32OLE 的问题和 Word COM 对象的一些痛苦。
不过,您很有可能在 *nix 环境中提供服务。Word 2007 使用“ Microsoft Office Open XML ”格式 (*.docx),可以使用Microsoft 的相应兼容包打开该格式。
一些较新的 Office 应用程序(至少是 2002/XP 和 2003)有自己的 XML 格式,这些格式也可以使用。
遗憾的是,我不知道有任何 Ruby 工具可以让这个过程变得更容易。
如果可以接受,我想我会倾向于使用重命名的 html 文件路径。我刚刚从 WordXP 将文档保存为 HTML,将其重命名为 .doc 并毫无问题地打开它。
我遇到了同样的问题。不幸的是,我无法操作 xml,因为我的客户应该自己填写模板。而且这样做并不总是可行的(例如,office for mac 不允许这样做)。
为了解决这个问题,我做了一个简单的gem,可以作为嵌入ruby的rtf文档模板:https ://github.com/eicca/rtf-templater
我对其进行了测试,它可以正常填写报告和文件。但是,对于复杂的循环和条件,格式设置很差。