You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

python-docx设置RTL文本方向时字号失效的解决方法

解决python-docx中设置RTL后字体大小失效的问题

问题原因

在python-docx中,直接设置run.font.rtl = True时,会重新创建一个Font对象实例,导致之前对run.font的属性设置(比如size、name)被覆盖重置。

解决方案

方案1:调整属性设置顺序

将run.font.rtl = True放在字体属性设置的最前面,让后续的字体大小、名称设置作用在新创建的Font对象上:

from docx import Document
from docx.shared import Pt

# 假设doc是已加载的Document对象,text是库尔德语文本列表
i = 0  # 示例索引
for paragraph in doc.paragraphs:
    if '{text}' in paragraph.text:
        paragraph.text = paragraph.text.replace('{text}', text[i].strip())
        for run in paragraph.runs:
            run.font.rtl = True  # 先设置RTL
            run.font.size = Pt(20)
            run.font.name = 'Arial'

方案2:直接操作XML元素设置RTL(更可靠)

绕过run.font.rtl的封装,直接修改run的XML元素来设置双向文本属性,避免干扰已设置的字体属性:

from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn

# 假设doc是已加载的Document对象,text是库尔德语文本列表
i = 0  # 示例索引
for paragraph in doc.paragraphs:
    if '{text}' in paragraph.text:
        paragraph.text = paragraph.text.replace('{text}', text[i].strip())
        for run in paragraph.runs:
            run.font.size = Pt(20)
            run.font.name = 'Arial'
            # 直接添加RTL的XML元素
            rPr = run._element.get_or_add_rPr()
            rPr.append(rPr.makeelement(qn('w:rtl')))

验证说明

两种方案都能确保RTL文本方向生效的同时,保留字体大小和名称的设置。方案2直接操作底层XML,避免了python-docx封装层的属性覆盖问题,稳定性更强。

内容的提问来源于stack exchange,提问作者Hama Sabah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:37:10