Ruby on rails 使用RubyonRails生成模板化文档

Ruby on rails 使用RubyonRails生成模板化文档,ruby-on-rails,pdf,docx,documentation-generation,Ruby On Rails,Pdf,Docx,Documentation Generation,我目前正在使用RubyonRails3.2开发一个管理套件 它需要执行的任务之一是生成合同和发票 因为应用程序需要容纳多个客户机,我希望每个客户机都能够上传某种模板,该模板规定了他们的个人风格和布局。(即:徽标、公司名称、地址等) 我正在考虑让客户使用变量和占位符创建自己的.docx合同模板,在生成特定合同/发票时,我的应用程序应该替换这些变量和占位符。请注意,创建模板的人员将不懂技术 我应该如何才能做到这一点?请注意,会有可直接替换的占位符以及应包含在表中的重复元素。这些要素的数量因合同而异

我目前正在使用RubyonRails3.2开发一个管理套件

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

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

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

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

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

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

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

我创建了一个库,正是为了这个目的:

它叫Docxgen,可以在github上找到:

下面是一个如何使用它的使用示例:

使用内容:
Hello{first\u name}{last\u 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
以下是在我的网站上直播的示例:

好的,这是javascript,但是: 当您全局安装它时,它在节点上运行,作为命令行:

docxgen <inputFileDocx> <inputFileJson>
docxgen
有关github repo上安装的更多信息:

希望这有助于查看


我使用它的目的完全相同

在考虑了其他选择后,我决定走另一条路线,我偶然发现: github.com/sandrods/odf-report


它是一个ODF(open office)的Rails gem,可以让你做与ruby docx templater相同的事情,但它感觉更健壮,不像docx变体那样容易破坏…甚至拼写检查也可以破坏[First name]块的一部分并使其停止工作

也许这个gem对你来说很有趣


它喜欢虾,但有docx。

它没有那么复杂,因为它一般都很复杂!我从用户那里很快学到了一件事,那就是不要让用户做出他们不能正确做出的决定。我的答案对你有帮助吗?虽然使用Javascript/Node添加另一个层目前并不在我的待办事项列表中,但我肯定会把你的解决方案放在脑后,以便在以后的阶段进行试验!它似乎真的很容易使用,如果它比其他建议的插件更健壮,它可能是一个可行的替代品。它目前正在生产中,但并非没有问题。我不是LibreOffice的粉丝。。。它远非便携和稳定。我需要在我的Ubuntu服务器上安装完整的套件,以便能够使用odf to pdf命令。此外,生成PDF大约需要1秒的时间。如果同时出现多个请求,LibreOffice进程有时会无限期地挂起,导致我的乘客线程以及随后的整个站点死机。现在,我已经使用Sidekiq和数据库锁定方案将PDF生成转移到后台任务。