我创建了一个 docx 模板,然后生成 python 代码以使用 python 的
docxtpl
包将变量和所有其他数据更新到此模板中:
tpl = DocxTemplate((path.join('report','templates','my_template.docx')))
tpl.new_subdoc()
file_path = path.join(output_dir_name, file_name)
get_all_data_report(tpl)
tpl.save(file_path)enter code here
我不明白如何完全控制生成的 docx 文件中的空格/分页符。 如果我在页面开头的模板中放置一些文本,它有时会移动并添加 x 行空格。
from docxtpl import *
tpl = DocxTemplate('templates/escape_tpl.docx')
context = {'myvar': R('"less than" must be escaped : <, this can be done with RichText() or R()'),
'myescvar': 'It can be escaped with a "|e" jinja filter in the template too : < ',
'nlnp': R('Here is a multiple\nlines\nstring\aand some\aother\aparagraphs\aNOTE: the current character styling is removed'),
'mylisting': Listing('the listing\nwith\nsome\nlines\nand special chars : <>&\f ... and a page break'),
'page_break': R('\f'),
}
tpl.render(context)
tpl.save('output/escape.docx')
并在模板中使用 {{r page_break}}
看到这个https://github.com/elapouya/python-docx-template/blob/master/tests/escape.py
还有这个https://github.com/elapouya/python-docx-template/blob/master/tests/templates/escape_tpl.docx
我已经找到了解决方案,您可以在模板 docx 中手动添加分页符,而不是从代码中添加分页符,并且它的工作正常
简单的方法是在模板表格的一行中添加分页符。从 Word 中插入分页符。
并没有真正为我工作。尝试了多行中的多个。它所做的只是添加越来越多的空白行。就我而言,我有多个表,因此表对齐很混乱。在模板文档表中插入分页符解决了我的问题
您可以使用变量从 jinja2 代码中插入分页符并将其显示为 docx 模板。
Python代码:
from docxtpl import DocxTemplate
docxFields = {}
docxFields["pageBreak"] = "\f"
doc = DocxTemplate("myTemplate.docx")
doc.render(docxFields)
doc.save("myResult.docx")
在 MSWord 中编辑的 Docx 模板:
{%- for key in xxx %}{{ pageBreak }}
xxxx
{% endfor %}
来源 https://docxtpl.readthedocs.io/en/stable/(请参阅显示变量)