在Ruby中创buildMicrosoft Word(.docx)文档

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

一个类似虾,但为DOCX而不是PDF的gem将是伟大的!

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

如果您想要发送为每个用户定制的标准文档(如表单字母)的副本,则应该相当简单,因为DOCX是包含目录层次结构中各个部分的ZIP文件。 有一个DOCX“模板”,其中包含要发送给all用户(没有真实内容)的所有部分和树结构,然后只需创build包含所需用户特定内容的新(或修改现有)将其发送到ZIP(DOCX文件),然后发送给用户。

例如:您可以拥有包含Dear [USER-PLACEHOLDER]的 document-template.xml :。 当用户请求文档时,用用户名replace[USER-PLACEHOLDER] ,然后将生成的document.xml添加到your-template.docx ZIP文件(该文件将包含Word中所需的所有图像和其他部分文件)并将结果文件发送给用户。

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

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

我知道如果您将HTML文档作为扩展名为.doc的Word文档提供,它将在Word中打开。 只是不要做任何幻想。

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

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

我最近做了这样的事情。 这是博客文章: http : //tomasvarsavsky.com/2009/04/04/simple-word-document-templating-using-ruby-and-xml/

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

https://github.com/nickfrandsen/htmltoword

我不知道为什么有人回答蠕变,每个人都开始发布模板解决scheme,但这回答了OP的问题。 就像虾,除了Word而不是PDF。

更新:

还有一个叫做docverter的 pandoc和一个API包装器。 由于pandoc是一个haskell库,所以安装稍微复杂一点。

这是Doccy( doccyapp.com )有一个方法,只是你可以使用的一种方法。 支持docx,odt和页面,如果你喜欢,也可以转换成PDF

使用一种非常类似于格兰特·瓦格纳(Grant Wagner)所build议的技术,我已经创build了一个Ruby word到word gem,它可以让你轻松地从你的ruby应用程序输出Word docx文件。 您可以在http://github.com/nickfrandsen/htmltoword查看它; – 只需传递一个htmlstring,它就会创build一个相应的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解决scheme,但是因为所有其他的解决scheme只告诉你如何在全球范围内做到这一点,没有给你一个你想要的库,这是一个基于JS或NodeJS的解决scheme(在两个工作)

DocxTemplater库

图书馆的演示

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

 npm install docxtemplater -g docxtemplater <configFile> ----config.docxFile: The input file in docx format ----config.outputFile: The outputfile of the document 

也许这个gem对你很有意思。

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

它像大虾,但与docx。

除了Grant的回答之外,您还可以发送Word一个“Flat OPC”文件,该文件基本上是将docx解压缩并连接在一起以创build单个xml文件。 这样,你可以在一个文件中replace[USER-PLACEHOLDER]并完成它(即不压缩或解压缩)。

如果有人仍然在看这个,这篇文章解释了如何使用XML数据源。 这对我来说很好。

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

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

尽pipe如此,你有机会从* nix环境中提供服务。 Word 2007使用“ Microsoft Office Open XML ”格式(* .docx),可以使用Microsoft的相应兼容包打开该格式 。

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

我不知道任何Ruby工具,使悲伤的过程变得更容易。

如果它可以被接受,我想我会倾向于重新命名的HTML文件路线。 我只是从WordXP中保存了一个HTML格式的文档,将其重命名为.doc,并且没有问题地打开它。

看看这个github回购: https : //github.com/jawspeak/ruby-docx-templater

它允许您从单词模板创build文档。

我遇到了同样的问题。 不幸的是,我不能操纵XML,因为我的客户应该自己填写模板。 而这样做并不总是可能的(例如,mac办公室不允许这样做)。

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

我testing了它,它填写报告和文件的工作正常。 但是,格式严重显示复杂的循环和条件。

现在我开始学习Ruby了,所以也许我会将我的officegen模块从JS移植到Ruby gem。