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

求助:Python-docx修改Word全文字体为Times New Roman仅生效字号

解决Python-docx无法修改Word文档字体为Times New Roman的问题

问题原因

  • 仅设置font.name仅对西文字符生效,若文档包含中文等东亚字符,Word会优先使用东亚字体设置,python-docx的高层API未默认覆盖该配置。
  • 文档中文本可能继承了段落/字符样式的字体规则,单独修改Run的字体可能被样式覆盖。

修复后的代码

需补充XML操作相关模块,同时处理Run和文档样式的字体设置,还要修正路径转义问题:

from docx import Document
from docx.shared import Pt
from docx.oxml.ns import qn, OxmlElement
from docx.enum.style import WD_STYLE_TYPE

def set_font_for_entire_document(docx_path):
    doc = Document(docx_path)
    
    # 遍历所有段落的Run,设置字体
    for paragraph in doc.paragraphs:
        for run in paragraph.runs:
            font = run.font
            font.name = 'Times New Roman'
            font.size = Pt(13)
            
            # 直接操作XML元素,覆盖所有字体分类
            r_pr = font._element.rPr
            if r_pr is None:
                r_pr = font._element.add_rPr()
            r_fonts = r_pr.find(qn('w:rFonts'))
            if r_fonts is None:
                r_fonts = OxmlElement('w:rFonts')
                r_pr.append(r_fonts)
            # 设置所有字体类别为Times New Roman
            r_fonts.set(qn('w:ascii'), 'Times New Roman')
            r_fonts.set(qn('w:hAnsi'), 'Times New Roman')
            r_fonts.set(qn('w:eastAsia'), 'Times New Roman')
            r_fonts.set(qn('w:cs'), 'Times New Roman')
    
    # 修改文档所有样式的字体,防止继承样式的文本未生效
    for style in doc.styles:
        if style.type not in (WD_STYLE_TYPE.PARAGRAPH, WD_STYLE_TYPE.CHARACTER):
            continue
        font = style.font
        font.name = 'Times New Roman'
        font.size = Pt(13)
        
        r_pr = font._element.rPr
        if r_pr is None:
            continue
        r_fonts = r_pr.find(qn('w:rFonts'))
        if r_fonts is None:
            r_fonts = OxmlElement('w:rFonts')
            r_pr.append(r_fonts)
        r_fonts.set(qn('w:ascii'), 'Times New Roman')
        r_fonts.set(qn('w:hAnsi'), 'Times New Roman')
        r_fonts.set(qn('w:eastAsia'), 'Times New Roman')
        r_fonts.set(qn('w:cs'), 'Times New Roman')
    
    doc.save(docx_path)

# 修正路径转义问题,使用原始字符串或正斜杠
input_docx_path = r'E:\TEST FONT.docx'
set_font_for_entire_document(input_docx_path)

关键说明

  1. XML直接操作:通过修改Word底层XML的w:rFonts元素,覆盖所有字体分类(西文、东亚、复杂脚本),确保无论字符类型都应用指定字体。
  2. 样式修改:同时调整文档的段落和字符样式,避免后续编辑或继承样式的文本恢复原字体。
  3. 路径修正:用原始字符串r''包裹路径,防止反斜杠被Python识别为转义字符(比如\T会被解析为制表符)。

内容的提问来源于stack exchange,提问作者Đặng Văn Quốc Bảo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 03:05:24