Skip to content

Conversation

@StuCM
Copy link

@StuCM StuCM commented Dec 5, 2025

Description

Problem
The RichText.add() method generates <w:rPr> (run properties) with elements in an order that doesn't comply with the OOXML specification (ECMA-376). Currently, <w:rFonts> is added after <w:b> and <w:i>, but the spec requires <w:rFonts> to come before these formatting elements. This causes Microsoft Word to ignore the font parameter when used together with bold=True or italic=True.

Current behavior
rt = RichText()
rt.add("Hello", bold=True, font="Arial")
print(rt.xml)

Output: <w:rPr><w:b/><w:rFonts .../></w:rPr>

Expected behavior: <w:rPr><w:rFonts .../><w:b/></w:rPr>

OOXML spec reference

The correct order for <w:rPr> child elements per ECMA-376:
rStyle, rFonts, b, bCs, i, iCs, caps, smallCaps, strike, ...

Fix

Move the if font: block to immediately after the if style: block in richtext.py.

Related Issues

#625

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant