diff --git a/docxtpl/template.py b/docxtpl/template.py index d6d28ec..2a442fa 100644 --- a/docxtpl/template.py +++ b/docxtpl/template.py @@ -351,6 +351,19 @@ def render_properties( rendered = template.render(context) setattr(self.docx.core_properties, prop, rendered) + def render_footnotes( + self, context: Dict[str, Any], jinja_env: Optional[Environment] = None + ) -> None: + if jinja_env is None: + jinja_env = Environment() + + for section in self.docx.sections: + for part in section.part.package.parts: + if part.content_type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml': + xml = self.patch_xml(part.blob.decode('utf-8') if isinstance(part.blob, bytes) else part.blob) + xml = self.render_xml_part(xml, part, context, jinja_env) + part._blob = xml + def resolve_listing(self, xml): def resolve_text(run_properties, paragraph_properties, m): @@ -483,6 +496,8 @@ def render( self.render_properties(context, jinja_env) + self.render_footnotes(context, jinja_env) + # set rendered flag self.is_rendered = True diff --git a/tests/footnotes.py b/tests/footnotes.py new file mode 100644 index 0000000..c6ec59c --- /dev/null +++ b/tests/footnotes.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +""" +Created : 2024-09-23 + +@author: Bart Broere +""" + +from docxtpl import DocxTemplate + +DEST_FILE = "output/footnotes.docx" + +tpl = DocxTemplate("templates/footnotes_tpl.docx") + +context = { + "a_jinja_variable": "A Jinja variable!" +} + +tpl.render(context) +tpl.save(DEST_FILE) diff --git a/tests/templates/footnotes_tpl.docx b/tests/templates/footnotes_tpl.docx new file mode 100644 index 0000000..838c002 Binary files /dev/null and b/tests/templates/footnotes_tpl.docx differ