是否有一种在Ruby应用程序中创建Word文档(.docx)的简单方法?实际上,在我的情况下,它是从Linux服务器提供的Rails应用程序。
答案 0 :(得分:41)
正如已经指出的那样,在Ruby中似乎没有任何库来操作Open XML文档,但是OpenXML Developer有关于Open XML文档格式的完整文档。
如果你想要的是发送为每个用户定制的标准文档(如格式信件)的副本,那么它应该相当简单,因为DOCX是包含目录层次结构中各个部分的ZIP文件。拥有一个DOCX“模板”,其中包含您要发送给all
个用户的所有部分和树结构(没有真实内容),然后只需创建包含特定于用户的内容的新(或修改现有)部分你想要并在将它发送给用户之前将其注入ZIP(DOCX文件)。
例如:您可以document-template.xml
包含亲爱的[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 Namespace来操作Open XML文档,因此它在Mono中可以正常工作,它似乎支持SDK所需的一切。
答案 1 :(得分:7)
您可以使用Apache POI。它是用Java编写的,但是integrates with Ruby as an extension
答案 2 :(得分:6)
我知道如果你将HTML文档作为带有.doc扩展名的word文档提供,它将在Word中打开就好了。只是不要做任何幻想。
编辑:以下是使用经典ASP的示例。 http://www.aspdev.org/asp/asp-export-word/
答案 3 :(得分:6)
这是一个老问题,但有一个新答案。如果您想将HTML文档转换为Word(docx)文档,只需使用' htmltoword'宝石:
https://github.com/nickfrandsen/htmltoword
我不确定为什么有回答蠕变,每个人都开始发布模板解决方案,但这回答了OP的问题。就像Prawn一样,除了Word而不是PDF。
<强>更新强>
还有pandoc和pandoc的API包装器,名为docverter。两者都有稍微复杂的安装,因为pandoc是一个haskell库。
答案 4 :(得分:6)
Maybe this gem is interesting for you.
https://github.com/trade-informatics/caracal/
It like prawn but with docx.
答案 5 :(得分:4)
这是一种Doccy(doccyapp.com)有一个api,可以使用它。支持docx,odt和页面,如果你愿意,还可以转换为PDF
答案 6 :(得分:3)
使用非常类似于Grant Wagner建议的技术我创建了一个Ruby html to word gem,它可以让你轻松地从你的ruby应用程序输出Word docx文件。您可以在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问题。
答案 7 :(得分:3)
披露:我是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
答案 8 :(得分:2)
除了Grant的答案之外,您还可以向Word发送一个“Flat OPC”文件,该文件基本上是解压缩并连接的docx,以创建单个xml文件。这样,您可以在一个文件中替换[USER-PLACEHOLDER]并完成它(即没有压缩或解压缩)。
答案 9 :(得分:2)
如果还有人在看这个,这篇文章解释了如何使用XML数据源。这对我很有用。
http://seroter.wordpress.com/2009/12/23/populating-word-2007-templates-through-open-xml/
答案 10 :(得分:1)
如果你在Windows上运行,当然,这是WIN32OLE的问题,而且Word COM对象有些痛苦。
有可能是你在* nix环境中提供的服务。 Word 2007使用“Microsoft Office Open XML”格式(* .docx),可以使用相应的compatibility pack from Microsoft打开。
一些最新的Office应用程序(至少2002 / XP和2003)有their own XML formats,也可以使用。
我不知道有任何Ruby工具可以让这个过程变得更容易。
如果它可以接受,我想我会倾向于沿着重命名的html文件路线。我刚从WordXP中将文档保存为HTML,将其重命名为.doc并毫无问题地打开它。
答案 11 :(得分:1)
查看此github回购:https://github.com/jawspeak/ruby-docx-templater
它允许您从单词模板创建文档。
答案 12 :(得分:0)
我遇到了同样的问题。不幸的是我无法操纵xml,因为我的客户应该自己填写模板。要做到这一点并不总是可行的(例如,office for mac不允许这样做。)
作为这个问题的解决方案,我制作了一个简单的gem,它可以用作带有嵌入式ruby的rtf文档模板:https://github.com/eicca/rtf-templater
我对它进行了测试,它可以用于填写报告和文档。但是,格式错误地显示复杂的循环和条件。