From aa7b7a77e3791eaf2a22ed7597f2cee415b6ac5d Mon Sep 17 00:00:00 2001 From: ST-Imrie <117174577+ST-Imrie@users.noreply.github.com> Date: Fri, 28 Feb 2025 17:53:26 +0000 Subject: [PATCH] Rich Text Paragraph Formatting Update --- docxtpl/__init__.py | 2 +- docxtpl/richtext.py | 45 ++++++++++++++++++++ docxtpl/template.py | 16 ++++++- tests/richtextparagraph.py | 32 ++++++++++++++ tests/templates/richtext_paragraph_tpl.docx | Bin 0 -> 18357 bytes tests/templates/richtext_tpl.docx | Bin 11440 -> 14126 bytes 6 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 tests/richtextparagraph.py create mode 100644 tests/templates/richtext_paragraph_tpl.docx diff --git a/docxtpl/__init__.py b/docxtpl/__init__.py index 1c0e1df..0ec37f1 100644 --- a/docxtpl/__init__.py +++ b/docxtpl/__init__.py @@ -9,6 +9,6 @@ __version__ = "0.19.1" # flake8: noqa from .inline_image import InlineImage from .listing import Listing -from .richtext import RichText, R +from .richtext import RichText, R, RichTextParagraph, RP from .subdoc import Subdoc from .template import DocxTemplate diff --git a/docxtpl/richtext.py b/docxtpl/richtext.py index 75c3b1c..759eed0 100644 --- a/docxtpl/richtext.py +++ b/docxtpl/richtext.py @@ -119,5 +119,50 @@ class RichText(object): def __html__(self): return self.xml +class RichTextParagraph(object): + """class to generate Rich Text Paragraphs when using templates variables + + This is much faster than using Subdoc class, + but this only for texts OUTSIDE an existing paragraph. + """ + + def __init__(self, text=None, **text_prop): + self.xml = "" + if text: + self.add(text, **text_prop) + + def add( + self, + text, + parastyle=None, + ): + + # If a RichText is added + if not isinstance(text, RichText): + text = RichText(text) + + prop = "" + if parastyle: + prop += '' % parastyle + + xml = "" + if prop: + xml += "%s" % prop + xml += text.xml + xml += "" + self.xml += xml + + def __unicode__(self): + return self.xml + + def __str__(self): + return self.xml + + def __html__(self): + return self.xml + + + R = RichText +RP = RichTextParagraph diff --git a/docxtpl/template.py b/docxtpl/template.py index b246ca7..e9c9cc4 100644 --- a/docxtpl/template.py +++ b/docxtpl/template.py @@ -160,7 +160,7 @@ class DocxTemplate(object): flags=re.DOTALL, ) src_xml = re.sub( - r"({{r\s.*?}}|{%r\s.*?%})", + r"({{r.\s.*?}}|{%r.\s.*?%})", r'\1', src_xml, flags=re.DOTALL, @@ -173,7 +173,7 @@ class DocxTemplate(object): r"-%}(?:(?!]|{%|{{).)*?]*?>", "%}", src_xml, flags=re.DOTALL ) - for y in ["tr", "tc", "p", "r"]: + for y in ["tr", "tc", "p"]: # replace into xml code the row/paragraph/run containing # {%y xxx %} or {{y xxx}} template tag # by {% xxx %} or {{ xx }} without any surrounding tags : @@ -183,6 +183,18 @@ class DocxTemplate(object): % {"y": y} ) src_xml = re.sub(pat, r"\1 \2", src_xml, flags=re.DOTALL) + + for y in ["p", "r"]: + # replace into xml paragraph or run containing + # {%rp xxx %} or {{rp xxx}} template tag + # by {% xxx %} or {{ xx }} without any surrounding tags + # This allow for inline {rr }} and paragraph {rp }) styling + # This is mandatory to have jinja2 generating correct xml code + pat = ( + r"](?:(?!]).)*({%%|{{)r%(y)s ([^}%%]*(?:%%}|}})).*?" + % {"y": y} + ) + src_xml = re.sub(pat, r"\1 \2", src_xml, flags=re.DOTALL) for y in ["tr", "tc", "p"]: # same thing, but for {#y xxx #} (but not where y == 'r', since that diff --git a/tests/richtextparagraph.py b/tests/richtextparagraph.py new file mode 100644 index 0000000..e06bf47 --- /dev/null +++ b/tests/richtextparagraph.py @@ -0,0 +1,32 @@ +""" +Created : 2025-02-28 + +@author: Hannah Imrie +""" + +from docxtpl import DocxTemplate, RichText, RichTextParagraph + +tpl = DocxTemplate("templates/richtext_paragraph_tpl.docx") + +rtp = RichTextParagraph() +rt = RichText() + +rtp.add("The rich text paragraph function allows paragraph styles to be added to text",parastyle="myrichparastyle") + +rtp.add("This allows for the use of") +rtp.add("bullet\apoints.", parastyle="SquareBullet") + +rt.add("This works with ") +rt.add("Rich ", bold=True) +rt.add("Text ", italic=True) +rt.add("Strings", underline="single") +rt.add(" too.") + +rtp.add(rt, parastyle="SquareBullet") + +context = { + "example": rtp, +} + +tpl.render(context) +tpl.save("output/richtext_paragraph.docx") \ No newline at end of file diff --git a/tests/templates/richtext_paragraph_tpl.docx b/tests/templates/richtext_paragraph_tpl.docx new file mode 100644 index 0000000000000000000000000000000000000000..738c5025ba172ecaa1d41abfc64a3c1a2174eb5c GIT binary patch literal 18357 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 literal 11440 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 B4uk*z