国产化Word处理控件Spire.Doc教程:通过C# 删除 Word 文档中的超链接

Word 文档中的超链接是可点击的链接,允许读者导航到一个网站或另一个文档。虽然超链接可以提供有价值的补充信息,但有时也会分散注意力或造成不必要的困扰,因此可能会需要删除这些超链接。本文将介绍如何使用 Spire.Doc for .NET通过 C# 删除 Word 文档中的超链接

安装 Spire.Doc for .NET

Spire.Doc for .NET 是一款功能强大的 .NET 组件,它提供了丰富的 API 来操作 Word 文档,包括删除超链接。在开始前,您需要先将该.NET Word 库安装到您的项目中。可以从官网上下载该组件,然后手动将 DLL 文件作为引用添加到您的 .NET 程序中。也可以直接通过 NuGet 安装。

Spire.Doc for .NET试用下载

复制代码
PM> Install-Package Spire.Doc

如何通过 C# 删除 Word 文档中超链接

要一次性删除 Word 文档中的所有超链接,您需要先找到文档中的所有超链接,然后创建自定义方法 FlattenHyperlinks() 将其进行处理扁平化处理以移除超链接。步骤如下:

  • 创建 Document 类的对象。
  • 使用 Document.LoadFromFile() 方法加载 Word 文档。
  • 使用自定义方法 FindAllHyperlinks() 查找文档中的所有超链接。
  • 循环遍历每一个超链接,然后使用自定义方法 FlattenHyperlinks() 将其进行扁平化处理。
  • 使用 Document.SaveToFile() 方法保存结果文档。
复制代码
using System.Drawing;
using Spire.Doc;
using Spire.Doc.Documents;
using System.Collections.Generic;
using Spire.Doc.Fields;


namespace removeWordHyperlink
{
    class Program
    {
        static void Main(string[] args)
        {
            // 创建Document对象
            Document doc = new Document();

            // 加载示例Word文档
            doc.LoadFromFile("示例.docx");

            // 查找所有超链接
            List hyperlinks = FindAllHyperlinks(doc);

            // 扁平化所有超链接
            for (int i = hyperlinks.Count - 1; i >= 0; i--)
            {
                FlattenHyperlinks(hyperlinks[i]);
            }

            // 保存结果文件
            doc.SaveToFile("删除超链接.docx", FileFormat.Docx);

        }

        // 创建自定义方法FindAllHyperlinks()来获取文档中所有超链接
        private static List FindAllHyperlinks(Document document)
        {
            List hyperlinks = new List();

            // 遍历文档中每一节的所有元素以查找超链接
            foreach (Section section in document.Sections)
            {
                foreach (DocumentObject sec in section.Body.ChildObjects)
                {
                    if (sec.DocumentObjectType == DocumentObjectType.Paragraph)
                    {
                        foreach (DocumentObject para in (sec as Paragraph).ChildObjects)
                        {
                            if (para.DocumentObjectType == DocumentObjectType.Field)
                            {
                                Field field = para as Field;

                                if (field.Type == FieldType.FieldHyperlink)
                                {
                                    hyperlinks.Add(field);
                                }
                            }
                        }
                    }
                }
            }
            return hyperlinks;
        }

        // 创建自定义方法FlattenHyperlinks()来移除所有超链接域
        private static void FlattenHyperlinks(Field field)
        {
            int ownerParaIndex = field.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.OwnerParagraph);
            int fieldIndex = field.OwnerParagraph.ChildObjects.IndexOf(field);
            Paragraph sepOwnerPara = field.Separator.OwnerParagraph;
            int sepOwnerParaIndex = field.Separator.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.Separator.OwnerParagraph);
            int sepIndex = field.Separator.OwnerParagraph.ChildObjects.IndexOf(field.Separator);
            int endIndex = field.End.OwnerParagraph.ChildObjects.IndexOf(field.End);
            int endOwnerParaIndex = field.End.OwnerParagraph.OwnerTextBody.ChildObjects.IndexOf(field.End.OwnerParagraph);
            FormatFieldResultText(field.Separator.OwnerParagraph.OwnerTextBody, sepOwnerParaIndex, endOwnerParaIndex, sepIndex, endIndex);

            field.End.OwnerParagraph.ChildObjects.RemoveAt(endIndex);

            for (int i = sepOwnerParaIndex; i >= ownerParaIndex; i--)
            {
                if (i == sepOwnerParaIndex && i == ownerParaIndex)
                {
                    for (int j = sepIndex; j >= fieldIndex; j--)
                    {
                        field.OwnerParagraph.ChildObjects.RemoveAt(j);

                    }
                }
                else if (i == ownerParaIndex)
                {
                    for (int j = field.OwnerParagraph.ChildObjects.Count - 1; j >= fieldIndex; j--)
                    {
                        field.OwnerParagraph.ChildObjects.RemoveAt(j);
                    }

                }
                else if (i == sepOwnerParaIndex)
                {
                    for (int j = sepIndex; j >= 0; j--)
                    {
                        sepOwnerPara.ChildObjects.RemoveAt(j);
                    }
                }
                else
                {
                    field.OwnerParagraph.OwnerTextBody.ChildObjects.RemoveAt(i);
                }
            }
        }

        // 创建自定义方法FormatFieldResultText()对超链接文本进行格式设置
        private static void FormatFieldResultText(Body ownerBody, int sepOwnerParaIndex, int endOwnerParaIndex, int sepIndex, int endIndex)
        {
            for (int i = sepOwnerParaIndex; i <= endOwnerParaIndex; i++)
            {
                Paragraph para = ownerBody.ChildObjects[i] as Paragraph;
                if (i == sepOwnerParaIndex && i == endOwnerParaIndex)
                {
                    for (int j = sepIndex + 1; j < endIndex; j++)
                    {
                        FormatText(para.ChildObjects[j] as TextRange);
                    }

                }
                else if (i == sepOwnerParaIndex)
                {
                    for (int j = sepIndex + 1; j < para.ChildObjects.Count; j++)
                    {
                        FormatText(para.ChildObjects[j] as TextRange);
                    }
                }
                else if (i == endOwnerParaIndex)
                {
                    for (int j = 0; j < endIndex; j++)
                    {
                        FormatText(para.ChildObjects[j] as TextRange);
                    }
                }
                else
                {
                    for (int j = 0; j < para.ChildObjects.Count; j++)
                    {
                        FormatText(para.ChildObjects[j] as TextRange);
                    }
                }
            }
        }

        // 创建自定义方法FormatText()将超链接文本的字体颜色设置为黑色并移除下划线
        private static void FormatText(TextRange tr)
        {
            //Set the text color to black
            tr.CharacterFormat.TextColor = Color.Black;

            //Set the text underline style to none
            tr.CharacterFormat.UnderlineStyle = UnderlineStyle.None;
        }
    }
}

总结

使用**++Spire.Doc for .NET++** 库,您能快速定位并删除 Word 文档中的超链接,同时保留原始文本内容。通过消除不相关的链接,您可以提高文档质量、改善用户体验。Spire.Doc for .NET 库直观的 API 和高效的性能使其成为企业应用程序的理想选择。

Spire技术交流Q群(125237868)

相关推荐
喜欢喝果茶.15 分钟前
QOverload<参数列表>::of(&函数名)信号槽
开发语言·qt
亓才孓16 分钟前
[Class类的应用]反射的理解
开发语言·python
努力学编程呀(๑•ี_เ•ี๑)16 分钟前
【在 IntelliJ IDEA 中切换项目 JDK 版本】
java·开发语言·intellij-idea
向上的车轮33 分钟前
为什么.NET(C#)转 Java 开发时常常在“吐槽”Java:checked exception
java·c#·.net
island131438 分钟前
CANN GE(图引擎)深度解析:计算图优化管线、内存静态规划与异构任务的 Stream 调度机制
开发语言·人工智能·深度学习·神经网络
坚持就完事了42 分钟前
Java中的集合
java·开发语言
魔芋红茶1 小时前
Python 项目版本控制
开发语言·python
云小逸1 小时前
【nmap源码解析】Nmap OS识别核心模块深度解析:osscan2.cc源码剖析(1)
开发语言·网络·学习·nmap
冰暮流星1 小时前
javascript之二重循环练习
开发语言·javascript·数据库
风指引着方向1 小时前
自定义算子开发入门:基于 CANN op-plugin 的扩展实践
开发语言