Odoo中如何利用Docxtpl模块生成word附件
1、Docxtpl模块介绍
docxtpl 一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改。对URL字符串进行格式化处理。
这个想法是开始于创建一个需要用MicrosoftWord生成的文档的示例,它可以像我们想要的那样复杂:如图片、索引表、页脚、页眉、变量,以及我们可以用Word做的任何事情。然后,当我们使用MicrosoftWord编辑文档时,直接在文档中插入类似于Jinja 2的标记。将文档保存为.docx文件(XML格式),它将是.docx模板文件。
现在,我们可以使用python-docx-template从这个.docx模板和将关联的上下文变量生成您想要的多个Word文档。
注意:python-docx-template是测试的是MS Word 97格式,它可能不适用于其他版本。
2、Jinja 2类语法
因为模板标签主要来自jinja2,可以了解其语法,在此只为展示如何通过word模板批量生成docx文件,并且转换为附件存储到odoo系统,jinja2语法可参考官方文档学习:
http://docs.jinkan.org/docs/jinja2/templates.html
3、开发实例演示
本示例主要演示在odoo系统中,利用Docxtpl模块批量生成docx文档,并且成功保存为(ir.attachment)附件,存储在odoo模型中。
模块安装及导入
pip install docxtpl
import uuid
from docxtpl import DocxTemplate, RichText, InlineImage
from docx.shared import Mm, Inches, Pt
准备docx模板
这里只做简单的语法展示,更多语法可自行学习jinja2,类似html。
(这里模拟的是养老院老人的合同签署文件模板,合同中需要填写老人信息以及多个家属签章,通过docxtpl,可以将老人的数据批量传入接口,输出多个老人的docx合同,并且保存到odoo系统的ir_attachment)
python代码展示
def create_document(self, rec_id):
rec_id = self.browse(rec_id)
#模板名称
template_name = '多子女家属委托书.docx'
# doc = DocxTemplate(template_path + template_name)
type = 'old_home'
code = '005'
template_obj = self.env['pen.base.company.template']
# 该方法为获取附件存储路径
template_file_dir = template_obj.get_attachment_id(self.env.user.company_id, type, code)
# 创建docx实例
doc &#