当前位置: 首页 > news >正文

超链接以字段(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)可以提取这一信息。

字段代码的典型格式如下:

http://www.jsqmd.com/news/1091179/

相关文章:

  • 德州仪器DRV2667压电触觉驱动器评估与开发全攻略
  • 2026高考志愿资料(本科+专科)免费分享
  • 工业互联网组建与维护全域学习总结、技术体系探究与行业未来发展就业全景分析
  • 很多人一提到“省钱”,第一反应就是别用最新模型。但从一条真实的开发账单看,影响成本的关键,未必只是模型新不新,而是这次请求里有没有把缓存价值吃满。
  • Shell 脚本从入门到写出第一个自动化脚本
  • 【WorkBuddy专栏50】代码开发技术体系深度分析——前端、后端、全栈、移动端、数据工程,WB和CODEBUDDY谁更擅长?
  • Win11Debloat:如何用4个步骤让Windows 11运行速度快65%?
  • 第01篇:从一颗芯片看透智能座舱——座舱MCU的“世界观”
  • 基于物联网、时序模型、大模型和智能问数,设备预测性维护【智能体】应用案例
  • Web安全实战:路径遍历漏洞原理、复现与防御指南
  • VinXiangQi:基于YOLOv5的中国象棋智能辅助工具终极指南
  • 基于微信小程序的贵阳市特色农产品交易系统的设计与实现
  • 从多引擎探测到优化闭环
  • SpringBoot 本地项目部署云服务器 + 公网域名流程
  • 用 Claude Opus 4.8 辅助故障复盘:从告警日志到可验证 RCA 的一套工作流
  • 年薪73W,AI产品经理面经
  • API Key 泄露后会发生什么——5 个真实泄露场景和防御方案
  • 三步构建个人数字图书馆:novel-downloader完全指南
  • 电气工程考核基础
  • WSUS服务器遭CVE-2025-59287漏洞攻击后的进程行为审计与应急响应实战
  • 如何5分钟实现Windows和Office永久激活:KMS智能激活完整指南
  • DeepSeek幫我設計的會員模塊
  • OBS-ASIO插件深度解析:专业音频采集的技术实现与架构设计
  • Steam成就管理器完整指南:如何安全解锁与重置游戏成就
  • 刹那.相位宇宙
  • 渗透测试实战入门:从零到精通DC-1靶场攻防全流程解析
  • SuperMap GIS 三维性能优化实战:从数据处理到流畅体验的全链路解析
  • 如何用图像识别技术让原神日常任务效率提升3倍?
  • 电商详情页AI生成有哪些注意事项?最全AI生图工具实操指南来了
  • PCIe拓扑探秘:从Root Complex到Switch,构建高效数据通路