From 0660a0f37e4dafe164097a1ad54728ab58861e52 Mon Sep 17 00:00:00 2001 From: sailingnn <457886446@qq.com> Date: Thu, 21 Jul 2022 09:01:30 +0800 Subject: [PATCH 1/5] Update richtext.py add support for eastAsia fonts in RichText --- docxtpl/richtext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docxtpl/richtext.py b/docxtpl/richtext.py index f78d6ef..80b567e 100644 --- a/docxtpl/richtext.py +++ b/docxtpl/richtext.py @@ -79,7 +79,7 @@ class RichText(object): if strike: prop += u'' if font: - prop += (u'' + prop += (u'' .format(font=font)) xml = u'' From badce481c61cd04f2da8eb3861cd85d43348a4ad Mon Sep 17 00:00:00 2001 From: sailingnn <457886446@qq.com> Date: Thu, 4 Aug 2022 08:58:59 +0800 Subject: [PATCH 2/5] add eastAsia test add eastAsia test --- tests/richtext_eastAsia.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 tests/richtext_eastAsia.py diff --git a/tests/richtext_eastAsia.py b/tests/richtext_eastAsia.py new file mode 100644 index 0000000..720eac0 --- /dev/null +++ b/tests/richtext_eastAsia.py @@ -0,0 +1,13 @@ +from docxtpl import DocxTemplate, RichText +tpl=DocxTemplate('test_files/richtext_eastAsia_tpl.docx') +rt = RichText('测试TEST', font = 'Microsoft YaHei') +ch = RichText('测试TEST', font = '微软雅黑') +sun = RichText('测试TEST', font = 'SimSun') +context = { + 'example' : rt, + 'Chinese' : ch, + 'simsun' : sun, +} + +tpl.render(context) +tpl.save('test_files/richtext_eastAsia.docx') \ No newline at end of file From b75867397a85a01a1f5d5a6834157dd0a51c83c1 Mon Sep 17 00:00:00 2001 From: sailingnn <457886446@qq.com> Date: Thu, 4 Aug 2022 09:01:33 +0800 Subject: [PATCH 3/5] add eastAsia template adding eastAsia template for test --- tests/templates/richtext_eastAsia_tpl.docx | Bin 0 -> 13623 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/templates/richtext_eastAsia_tpl.docx diff --git a/tests/templates/richtext_eastAsia_tpl.docx b/tests/templates/richtext_eastAsia_tpl.docx new file mode 100644 index 0000000000000000000000000000000000000000..9f25fcf51c07b38eae589d16b076570e45100fae GIT binary patch literal 13623 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 G?EeAhCqX#? literal 0 HcmV?d00001 From a9122c34d45a87ebc86af3fddeb29600f5e4733d Mon Sep 17 00:00:00 2001 From: sailingnn <457886446@qq.com> Date: Thu, 4 Aug 2022 09:05:06 +0800 Subject: [PATCH 4/5] Update richtext_eastAsia.py --- tests/richtext_eastAsia.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/richtext_eastAsia.py b/tests/richtext_eastAsia.py index 720eac0..168ad72 100644 --- a/tests/richtext_eastAsia.py +++ b/tests/richtext_eastAsia.py @@ -1,5 +1,10 @@ +# -*- coding: utf-8 -*- +''' +Created : 2022-08-03 +@author: Dongfang Song +''' from docxtpl import DocxTemplate, RichText -tpl=DocxTemplate('test_files/richtext_eastAsia_tpl.docx') +tpl=DocxTemplate('templates/richtext_eastAsia_tpl.docx') rt = RichText('测试TEST', font = 'Microsoft YaHei') ch = RichText('测试TEST', font = '微软雅黑') sun = RichText('测试TEST', font = 'SimSun') @@ -10,4 +15,4 @@ context = { } tpl.render(context) -tpl.save('test_files/richtext_eastAsia.docx') \ No newline at end of file +tpl.save('output/richtext_eastAsia.docx') From 4857a6ed72c376f020251d669b2c56413bf0a8cc Mon Sep 17 00:00:00 2001 From: Eric Lapouyade Date: Thu, 4 Aug 2022 10:27:02 +0200 Subject: [PATCH 5/5] Modify PR to be more generic --- CHANGES.rst | 4 ++++ docs/index.rst | 8 +++++++- docxtpl/__init__.py | 2 +- docxtpl/richtext.py | 10 ++++++++-- tests/richtext_eastAsia.py | 18 ++++++++++-------- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 4fee050..336b7a6 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,3 +1,7 @@ +0.16.4 (2022-08-04) +------------------- +- Regional fonts for RichText + 0.16.3 (2022-07-14) ------------------- - fix #448 diff --git a/docs/index.rst b/docs/index.rst index 2989c92..ff01e28 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -223,10 +223,16 @@ RichText When you use ``{{ }}`` tag in your template, it will be replaced by the string contained within `var` variable. BUT it will keep the current style. If you want to add dynamically changeable style, you have to use both : the ``{{r }}`` tag AND a ``RichText`` object within `var` variable. -You can change color, bold, italic, size and so on, but the best way is to use Microsoft Word to define your own *character* style +You can change color, bold, italic, size, font and so on, but the best way is to use Microsoft Word to define your own *character* style ( Home tab -> modify style -> manage style button -> New style, select ‘Character style’ in the form ), see example in `tests/richtext.py` Instead of using ``RichText()``, one can use its shortcut : ``R()`` +There is a specific case for font: if your font is not displayed correctly, it may be because it is defined +only for a region. To know your region, it requires a little work by analyzing the document.xml inside the docx template (this is a zip file). +To specify a region, you have to prefix your font name this that region and a column:: + + ch = RichText('测试TEST', font='eastAsia:微软雅黑') + **Important** : When you use ``{{r }}`` it removes the current character styling from your docx template, this means that if you do not specify a style in ``RichText()``, the style will go back to a microsoft word default style. This will affect only character styles, not the paragraph styles (MSWord manages this 2 kind of styles). diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index 94fc1fe..732521c 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -4,7 +4,7 @@ Created : 2015-03-12 @author: Eric Lapouyade """ -__version__ = '0.16.3' +__version__ = '0.16.4' # flake8: noqa from .inline_image import InlineImage diff --git a/docxtpl/richtext.py b/docxtpl/richtext.py index 80b567e..fc2a488 100644 --- a/docxtpl/richtext.py +++ b/docxtpl/richtext.py @@ -79,8 +79,14 @@ class RichText(object): if strike: prop += u'' if font: - prop += (u'' - .format(font=font)) + regional_font = u'' + if ':' in font: + region, font = font.split(':', 1) + regional_font = u' w:{region}="{font}"'.format(font=font, region=region) + prop += ( + u'' + .format(font=font, regional_font=regional_font) + ) xml = u'' if prop: diff --git a/tests/richtext_eastAsia.py b/tests/richtext_eastAsia.py index 168ad72..2a61074 100644 --- a/tests/richtext_eastAsia.py +++ b/tests/richtext_eastAsia.py @@ -1,17 +1,19 @@ # -*- coding: utf-8 -*- -''' +""" Created : 2022-08-03 @author: Dongfang Song -''' +""" + + from docxtpl import DocxTemplate, RichText tpl=DocxTemplate('templates/richtext_eastAsia_tpl.docx') -rt = RichText('测试TEST', font = 'Microsoft YaHei') -ch = RichText('测试TEST', font = '微软雅黑') -sun = RichText('测试TEST', font = 'SimSun') +rt = RichText('测试TEST', font='eastAsia:Microsoft YaHei') +ch = RichText('测试TEST', font='eastAsia:微软雅黑') +sun = RichText('测试TEST', font='eastAsia:SimSun') context = { - 'example' : rt, - 'Chinese' : ch, - 'simsun' : sun, + 'example': rt, + 'Chinese': ch, + 'simsun': sun, } tpl.render(context)