在处理 Word 文档时,字体管理往往是一项繁琐的工作,尤其是当文件较大或需要处理多个文档时。如果您希望统一文档中的字体,或者修复字体不一致的问题,掌握高效的字体检索与替换方法将非常有用。本指南将介绍如何使用 Spire.Doc for Python 来自动化字体的获取与替换流程,提高文档处理效率。
安装 Spire.Doc for Python
本教程需要 Spire.Doc for Python 和 plum-dispatch v1.7.4。您可以通过以下 pip 命令将它们轻松安装到 Windows 中。
pip install Spire.Doc如果您不确定如何安装,请参考此教程: 如何在 Windows 中安装 Spire.Doc for Python
通过 Python 获取 Word 文档中的字体
想要从 Word 文档中提取字体信息,需要遍历文档的各个节、段落及其子对象。在检查子对象时,需要查找其中是否包含 TextRange 类的实例,如果有,就可以通过 CharacterFormat 属性获取字体名称和字号等信息。
使用 Python 读取 Word 文档中的字体信息,具体步骤如下:
- 创建一个 Document 对象。
- 使用 Document.LoadFromFile() 方法加载 Word 文档。
- 遍历文档的所有节、段落和子对象。
- 检查每个子对象是否为 TextRange 实例。
- 如果是,则通过 TextRange.CharacterFormat.FontName 和 TextRange.CharacterFormat.FontSize 属性获取字体名称和字号。
- 保存字体信息为 Text 文件。
- Python
from spire.doc import *
from spire.doc.common import *
 
# 将字符串写为 txt 文件的函数
def WriteAllText(fname:str,text:List[str]):
    fp = open(fname,"w", encoding="utf-8")
    for s in text:
        fp.write(s)
 
# 自定义 FontInfo 类
class FontInfo:
    def __init__(self):
        self._m_name = ''
        self._m_size = None
 
    def __eq__(self,other):
        if isinstance(other,FontInfo):
            return self._m_name == other.get_name() and self._m_size == other.get_size()
        return False
 
    def get_name(self):
        return self._m_name
 
    def set_name(self, value):
        self._m_name = value
 
    def get_size(self):
        return self._m_size
 
    def set_size(self, value):
        self._m_size = value
 
# 声明变量
fontInformations = ""
font_infos = []
 
# 创建一个 Document 类的对象
document = Document()
 
# 加载 Word 文档
document.LoadFromFile("/示例文档.docx")
 
# 遍历文档的所有节
for i in range(document.Sections.Count):
 
    # 获取当前节
    section = document.Sections.get_Item(i)
 
    # 遍历该节中的所有段落
    for j in range(section.Body.Paragraphs.Count):
 
        # 获取当前段落
        paragraph = section.Body.Paragraphs.get_Item(j)
 
        # 遍历段落中的所有子对象
        for k in range(paragraph.ChildObjects.Count):
             
            # 获取指定子对象
            obj = paragraph.ChildObjects.get_Item(k)
 
            # 判断子对象是否为文本范围
            if isinstance(obj, TextRange):
 
                # 获取指定文本范围
                txtRange = obj if isinstance(obj, TextRange) else None
       
                # 获取字体的名称和大小
                fontName = txtRange.CharacterFormat.FontName
                fontSize = txtRange.CharacterFormat.FontSize
 
                # 获取文本的颜色
                textColor = txtRange.CharacterFormat.TextColor.Name
 
                # 将字体信息保存在 fontInformations 变量中
                fontInfo = FontInfo()
                fontInfo.set_name(fontName)
                fontInfo.set_size(fontSize)
                if  fontInfo not in font_infos:
                    font_infos.append(fontInfo)                  
                    str = "字体名称:{0:s}、字号:{1:f}、字体颜色:{2:s}".format(fontInfo.get_name(), fontInfo.get_size(), textColor)
                    fontInformations += str
                    fontInformations += '\r'
# 将字体信息写入 txt 文件
WriteAllText("/获取字体.txt", fontInformations)
document.Dispose()
使用 Python 替换 Word 文档中的字体
当获取了特定文本范围的字体名称后,您就可以轻松将其替换为其它字体。要实现这一点,可以使用 TextRange.CharacterFormat.FontName 属性来指定新的字体。此外,您还可以通过 TextRange 类中的相关属性修改字体大小和文本颜色。
使用 Python 在 Word 文档中替换指定字体的具体步骤如下:
- 创建 Document 对象。
- 使用 Document.LoadFromFile() 方法加载一个 Word 示例文档。
- 遍历文档的所有节、段落和子对象。
- 检查每个子对象是否为 TextRange 实例。
- 如果是,则通过 TextRange.CharacterFormat.FontName 获取字体名称。
- 判断字体名称是否为需要替换的目标字体。
- 如果匹配,则使用 TextRange.CharacterFormat.FontName 设置新的字体名称并替换原来的字体。
- 通过 Document.SaveToFile() 方法将修改后的文档保存为新文件。
- Python
from spire.doc import *
from spire.doc.common import *
 
# 创建一个 Document 类的对象
document = Document()
 
# 加载 Word 文档
document.LoadFromFile("/示例文档.docx")
 
# 遍历所有节
for i in range(document.Sections.Count):
 
    # 获取当前节
    section = document.Sections.get_Item(i)
 
    # 遍历每一个段落
    for j in range(section.Body.Paragraphs.Count):
 
        # 获取指定段落
        paragraph = section.Body.Paragraphs.get_Item(j)
        # 遍历段落下的所有子对象
        for k in range(paragraph.ChildObjects.Count):
             
            # 获取子对象
            obj = paragraph.ChildObjects.get_Item(k)
 
            # 检查子对象是否是文本范围
            if isinstance(obj, TextRange):
 
                # 获取文本范围
                txtRange = obj if isinstance(obj, TextRange) else None
       
                # 获取字体名称
                fontName = txtRange.CharacterFormat.FontName
 
                # 检查字体名称是否为 FangSong
                if (fontName == "FangSong"):
 
                    # 替换为另一个字体
                    txtRange.CharacterFormat.FontName = "LiSu"
 
# 保存修改后文档
document.SaveToFile("/替换字体.docx", FileFormat.Docx)
 
# 释放资源
document.Dispose()
申请临时 License
如果您需要去除生成文档中的评估提示或解除功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。
 



 
					



