超链接以字段(Field) 的形式存储。每个超链接字段包含两个核心部分:
读取超链接的基本思路是: 1.加载 Word 文档 2. 遍历文档的所有节(Section)和段落(Paragraph) 3. 检查每个子对象是否为Field类型 4. 再进一步判断其Type是否为FieldType.FieldHyperlink5. 最后提取链接地址、显示文本
二、环境准备
1. 组件引入
通过 NuGet 包管理器安装FreeSpire.Doc包,或在程序包管理器控制台执行:
Install-Package FreeSpire.Doc说明:该免费版本存在页面数量限制,适合小规模文档处理场景
2. 命名空间引用
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Collections.Generic; using System.IO; using System.Text;三、完整代码示例
以下代码演示了如何读取 Word 文档中的所有超链接,提取其显示文本和 URL,并将结果保存到文本文件:
using Spire.Doc; using Spire.Doc.Documents; using Spire.Doc.Fields; using System.Collections.Generic; using System.IO; using System.Text; namespace ExtractHyperlinks { class Program { static void Main(string[] args) { // 1. 创建 Document 实例并加载 Word 文档 Document doc = new Document(); doc.LoadFromFile(@"sample.docx"); // 2. 创建列表存储超链接 List<Field> hyperlinks = new List<Field>(); // 3. 遍历文档的所有节 foreach (Section section in doc.Sections) { // 遍历节中的所有子对象 foreach (DocumentObject secObj in section.Body.ChildObjects) { // 判断是否为段落 if (secObj.DocumentObjectType == DocumentObjectType.Paragraph) { Paragraph paragraph = secObj as Paragraph; // 遍历段落中的所有子对象 foreach (DocumentObject paraObj in paragraph.ChildObjects) { // 判断是否为 Field 类型 if (paraObj.DocumentObjectType == DocumentObjectType.Field) { Field field = paraObj as Field; // 判断是否为超链接字段 if (field.Type == FieldType.FieldHyperlink) { hyperlinks.Add(field); } } } } } } // 4. 输出超链接信息 StringBuilder sb = new StringBuilder(); foreach (Field hyperlink in hyperlinks) { sb.AppendLine("显示文本:" + hyperlink.FieldText); sb.AppendLine("URL地址:" + hyperlink.Code); sb.AppendLine(); } File.WriteAllText("Hyperlinks.txt", sb.ToString()); doc.Close(); } } }四、进阶:提取屏幕提示(ScreenTip)
部分超链接还包含屏幕提示(鼠标悬停时显示的文本)。通过解析字段代码(Field Code)可以提取这一信息。
字段代码的典型格式如下: