#python #templates #utf-8 #jinja2 #docx
#python #шаблоны #utf-8 #jinja2 #docx
Вопрос:
Я создаю документы docx с помощью docxtpl и Jinja2. Я создал его, используя, как описано в руководстве, матрицу / словарь python, загружаемый данными из XML-файлов. Когда XML-файлы хранят данные latin-1, мои документы хорошо генерируются, но когда содержимое находится в кодировке utf-8 (например, на польском языке) Jinja2 или docxtpl не сохраняют эту кодировку, и docx, по-видимому, плохо отформатирован.
Как передать параметр кодировки или обвести эту проблему?
Мой процесс очень прост:
doc = DocxTemplate(<my_jinja2_docx_template>)
doc.render(<my_dictionnary_with_data>)
doc.save(<my_docx_file>)
Большое спасибо
Ответ №1:
Взгляните на исходный код DocxTemplate
класса по адресу https://github.com/elapouya/python-docx-template/blob/master/docxtpl/template.py . По-видимому, нет возможности изменить параметр кодировки. Однако вы можете добавить эту функциональность, создав свой собственный дочерний класс и заменив метод класса xml_to_string
. Похоже, именно там указана кодировка. Синтаксис для дочернего класса будет выглядеть следующим образом:
class NewDocxTemplate(DocxTemplate):
def xml_to_string(self, xml):
return etree.tostring(xml, encoding=<your_encoding_here>, pretty_print=False)
Затем создайте экземпляр NewDocxTemplate()
вместо DocxTemplate()
. Все методы DocxTemplate()
будут унаследованы, кроме того, который вы изменили.