如何控制docxtpl中的spces和分页符(基于现有的docx模板)?

问题描述 投票:0回答:5

我创建了一个 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 行空格。

python docx python-docx
5个回答
4
投票
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


0
投票

您可以放置有条件的分页符。

要做的步骤:

  1. 在 Microsoft Word 打开文档中打开文档
  2. 单击“主页”,然后单击 (Ctrl+*) 或引号
  3. 您会发现所有分页符和空格,如屏幕截图
  4. 然后添加条件语句,如屏幕截图所示enter image description here

0
投票

我已经找到了解决方案,您可以在模板 docx 中手动添加分页符,而不是从代码中添加分页符,并且它的工作正常


0
投票

简单的方法是在模板表格的一行中添加分页符。从 Word 中插入分页符。

并没有真正为我工作。尝试了多行中的多个。它所做的只是添加越来越多的空白行。就我而言,我有多个表,因此表对齐很混乱。在模板文档表中插入分页符解决了我的问题


0
投票

您可以使用变量从 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/(请参阅显示变量)

© www.soinside.com 2019 - 2024. All rights reserved.