C#使用Spire.Doc for .NET获取并替换Word文档中的字体

 更新时间:2026年03月10日 10:03:54   作者:缺点内向  
在企业文档处理流程中,C# Word 字体替换需求频繁出现,手动查找并替换 Word 文档字体,不仅耗费时间,还易遗漏,Spire.Doc for .NET 作为专业库,提供查找并替换字体功能,支持自动化批量操作,本文基于 Spire.Doc,分享精确 C# 代码,实现字体标准化,需要的朋友可以参考下

在企业文档处理流程中,C# Word 字体替换需求频繁出现。手动查找并替换 Word 文档字体,不仅耗费时间,还易遗漏,尤其跨平台共享时,字体缺失常导致显示乱码或布局偏移。Spire.Doc for .NET 作为专业库,提供查找并替换字体功能,支持自动化批量操作。本文基于 Spire.Doc,分享精确 C# 代码,实现字体标准化。

Word 文档字体管理的原理

Word 文档(.docx)以 XML 格式存储字体信息,主要通过 CharacterFormat 类定义每个 TextRange 的字体属性,包括 FontNameFontSizeFontStyle。文档加载时,若系统缺少指定字体,默认替换为“Calibri”或“Times New Roman”,但这无法满足企业统一规范。

常见痛点:

  • 嵌入字体缺失:Windows “微软雅黑” 在 Mac 上变“Helvetica”,影响专业性。
  • 多语言兼容:2024 Word 更新增强 Unicode 支持,但跨系统仍需替换为通用字体。
  • 批量场景:数千文档标准化,手动操作效率低下。

Spire.Doc 通过遍历文档结构,实现精确字体扫描与替换,处理速度达手动 20 倍。

使用 Spire.Doc for .NET 获取文档字体

Spire.Doc 的 GetAllFonts() 方法可一键获取文档所有字体。安装 NuGet 包 Install-Package Spire.Doc 后,使用以下 C# 代码:

using Spire.Doc;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Document doc = new Document("input.docx");
        List<string> fonts = new List<string>(doc.GetAllFonts());
        
        Console.WriteLine("文档字体列表:");
        foreach (string font in fonts)
        {
            Console.WriteLine($"- {font}");
        }
        doc.Close();
    }
}

关键 API 表格

API描述返回类型
GetAllFonts()获取唯一字体集合IEnumerable<string>
CharacterFormat.FontName文本范围字体名string

输出示例

文档字体列表:
- 微软雅黑
- Arial
- Times New Roman

此步骤用于预分析,确定替换目标。

实现 C# Word font replacement 功能

核心逻辑:遍历段落 Paragraph 和文本范围 TextRange,条件替换 FontName。完整代码如下,支持批量与条件替换:

using Spire.Doc;

class Program
{
    static void Main()
    {
        Document doc = new Document("input.docx");
        
        foreach (Section section in doc.Sections)
        {
            foreach (Paragraph para in section.Paragraphs)
            {
                foreach (DocumentObject obj in para.ChildObjects)
                {
                    if (obj.DocumentObjectType == DocumentObjectType.TextRange)
                    {
                        TextRange tr = obj as TextRange;
                        if (tr.CharacterFormat.FontName == "微软雅黑")
                        {
                            tr.CharacterFormat.FontName = "宋体";
                            tr.CharacterFormat.FontSize = 12f;
                        }
                    }
                }
            }
        }
        
        doc.DefaultSubstitutionFontName = "Arial"; // 缺失字体默认替换
        doc.SaveToFile("output.docx", FileFormat.Docx2019);
        doc.Close();
    }
}

效率对比表格

操作方式100 页文档时间准确率
手动替换25 分钟90%
Spire.Doc 自动化2 秒100%

高级用法:结合 SetCustomFonts() 嵌入自定义字体包,确保跨平台一致。

最佳实践与注意事项

  1. 性能优化:超大文档分节处理,避免内存溢出;使用 doc.ClearCustomFonts() 释放资源。
  2. 异常处理:
try { /* 加载与处理 */ }
catch (Exception ex) { Console.WriteLine(ex.Message); }
  1. 兼容性:支持 Word 365 格式,测试多语言文档时优先 “SimSun” (宋体)。
  2. 字体嵌入:替换后保存为 Docx2019,确保字体随文档携带。

总结

Spire.Doc for .NET 简化了 C# Word 字体替换的步骤,实现高效查找和替换字体。开发者可据此标准化文档,提升跨平台兼容。你可以先先下载 Spire.Doc 免费试用版,运行本文代码,验证自动化字体管理。

到此这篇关于C#使用Spire.Doc for .NET获取并替换Word文档中的字体的文章就介绍到这了,更多相关C#获取并替换Word字体内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中数组、ArrayList和List三者的区别详解及实例

    C#中数组、ArrayList和List三者的区别详解及实例

    这篇文章主要介绍了C#中数组、ArrayList和List三者的区别详解及实例的相关资料,需要的朋友可以参考下
    2016-12-12
  • 用 C# Winform做出全透明的磨砂玻璃窗体效果代码

    用 C# Winform做出全透明的磨砂玻璃窗体效果代码

    就是一个简单的例子, 调用系统的 dwm 去重绘窗口. 只能在 Vista 和 7 之后才可以, 并且要确保已经开启主题服务等等, 总之不是非常实用, 好玩而已
    2011-05-05
  • C#使用windows服务发送邮件

    C#使用windows服务发送邮件

    这篇文章主要为大家详细介绍了C#使用windows服务发送邮件的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • C#游戏开发之实现俄罗斯方块游戏

    C#游戏开发之实现俄罗斯方块游戏

    这篇文章主要为大家详细介绍了C#如何实现经典俄罗斯方块游戏,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-01-01
  • c# Base关键字的使用

    c# Base关键字的使用

    c# Base关键字的使用示例代码,大家可以参考下用法。
    2009-07-07
  • C# xmlSerializer简单用法示例

    C# xmlSerializer简单用法示例

    这篇文章主要介绍了C# xmlSerializer简单用法,结合实例形式分析了C#基于xmlSerializer操作xml的读取、输出等相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Unity中使用反射机制调用函数

    Unity中使用反射机制调用函数

    这篇文章主要为大家详细介绍了Unity中使用反射机制调用函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • 详解C#中==、Equals、ReferenceEquals的区别

    详解C#中==、Equals、ReferenceEquals的区别

    C#中Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等,本篇文章详解C#中Equals , == , ReferenceEquals都可以用于判断两个对象的个体是不是相等,有兴趣的可以了解一下。
    2016-12-12
  • C# HttpClient超时重试机制详解

    C# HttpClient超时重试机制详解

    超时重试的实现方式可以使用循环结构,在请求发起后等待一定时间,若超时未收到响应,则再次发起请求,循环次数可以根据实际情况进行设置,一般建议不超过三次,这篇文章主要介绍了C# HttpClient超时重试,需要的朋友可以参考下
    2023-06-06
  • 使用C#对JSON进行序列化和反序列化处理的两种方法

    使用C#对JSON进行序列化和反序列化处理的两种方法

    本指南探讨了如何使用 C# 编程语言进行 JSON 序列化和反序列化,我们将介绍 .NET 生态系统中可用的两个本机选项,即命名空间和广泛使用的 Newtonsoft.Json 库(也称为 Json.NET),需要的朋友可以参考下
    2024-06-06

最新评论