一 docxtpl
docxtpl 一个很强大的包,其主要通过对docx文档模板加载,从而对其进行修改。
主要依赖两个包
- python-docx :读写doc文本
- jinja2:管理插入到模板中的标签
安装
pip install docxtpl
基本使用示例:
from docxtpl import DocxTemplate
doc = DocxTemplate("my_word_template.docx")
context = { 'company_name' : "World company" }
doc.render(context)
doc.save("generated_doc.docx")
导言
python-docx-template被开发出来,是因为python-docx的强大在于创建文档,而不是修改它们。
这个想法是开始于创建一个需要用MicrosoftWord生成的文档的示例,它可以像我们想要的那样复杂:如图片、索引表、页脚、页眉、变量,以及我们可以用Word做的任何事情。然后,当我们使用MicrosoftWord编辑文档时,直接在文档中插入类似于Jinja 2的标记。将文档保存为.docx文件(XML格式):它将是.docx模板文件。
现在,我们可以使用python-docx-template从这个.docx模板和将关联的上下文变量生成您想要的多个Word文档。
注意:python-docx-template是测试的是MS Word 97格式,它可能不适用于其他版本.
Jinja 2类语法
因Jinja 2包被使用,可以使用Word文档中的所有Jinja 2标记和过滤器。然而,要使它在Word文档中工作,进行了些限制和扩展:
限制
通常的Jinja 2标签,只能在同一个段落的同一个‘’run’中使用,它不能跨几个段落使用,表行、‘run’。如果您想要管理段落、表行和整个‘run’的样式,您必须使用特殊的标记语法,如下一章所述。
注意
MicrosoftWord的“Run”是一个具有相同风格的字符序列。例如,如果您创建一个具有相同风格的所有字符的段落:Word将在内部创建一个段落中的“Run”。现在,如果你在这段中间加了一个粗体,单词会把前面的“Run”转换成3‘Run’(普通-粗体-正常)。
Jinja 2类语法示范
变量
{{ var_name }}
控制语句
循环
{% for … in … %}
判断
{%if … %}