5

我目前正在使用 Ruby on Rails 3.2 开发一个管理套件。

它需要执行的任务之一是生成合同和发票

因为应用程序需要容纳多个客户,我希望每个客户都能够上传某种模板,这些模板决定了他们的个人风格和布局。(即:徽标、公司名称、地址等)。

我正在考虑让客户使用变量和占位符创建自己的 .docx 合同模板,当生成特定合同/发票时,我的应用程序应替换这些模板。请注意,创建模板的人不会精通技术

我应该如何才能做到这一点?请注意,将有可以直接替换的占位符以及应该包含在表格中的重复元素。这些元素的数量可能因合同而异。

在考虑了许多可用的解决方案、宝石和示例之后,我无法找到适合我情况的解决方案。这是我到目前为止所尝试的:

  • 通过提取 document.xml 并替换占位符来操作 Docx。这不是非常健壮和可靠的,因为拼写检查或换行会拆分包含占位符的 XML 节点。
  • wicked_pdf 和其他 html > pdf 生成器:不可行,因为我不能期望我的客户提供自定义 css 来设置文档样式。
  • Prawn:更适合从头开始创建文档。模板功能根本无法满足我的需求,也不支持替换占位符数据和重复元素
  • Google Drive:将模板移交给 Google,并使用 Drive API 修改文档并在完成后提取 PDF:增加外部服务的额外可靠性。更多的是最后的手段。真的希望找到一个我可以在本地运行的解决方案。

我觉得我错过了一些明显的东西。我无法想象在使用 Ruby on Rails 时,像文档生成这样平凡的任务会如此复杂。

4

4 回答 4

2

在考虑了替代方案后,我决定走另一条路,我偶然发现了这个:github.com/sandrods/odf-report

它是 Rails 的 ODF(开放式办公室)gem,可让您执行与 ruby​​-docx-templater 相同的操作,但感觉更加健壮,并且不像 docx 变体那样容易崩溃……甚至拼写检查也可以崩溃[First name] 块的一部分并使其停止工作

于 2014-01-23T05:27:49.977 回答
2

看看ruby​​-docx-templater

我将它用于完全相同的目的

于 2013-09-17T16:54:54.947 回答
2

我为此目的创建了一个库:

它被称为 Docxgen,可以在 github 上找到:https ://github.com/edi9999/docxgenjs

这是一个如何使用它的用法示例:

使用内容:Hello {first_name} {last_name}

var doc= new DocxGen(docData); //Create a new DocxGen document

doc.setTemplateVars(
    {"first_name":"Hipp",
    "last_name":"Edgar",
    }
) //set the templateVariables
doc.applyTemplateVars() //apply them (replace all occurences of {first_name} by Hipp, ...)
doc.output() //Output the document using Data-URI

这是我网站上的示例:http: //javascript-ninja.fr/docxgenjs/examples/demo.html

好的,这是 javascript,但是:

当您全局安装它时,它在节点上运行,作为命令行:

docxgen <inputFileDocx> <inputFileJson>

有关 github 存储库上安装的更多信息:https ://github.com/edi9999/docxgenjs#node-installation-and-usage

希望这可以帮助

于 2013-08-18T13:49:18.590 回答
1

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

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

它像虾,但带有 docx。

于 2015-07-28T16:50:11.230 回答