Word控件Spire.Doc 【超链接】教程(6):在C#去除word文档中的超链接

本文将重点演示如何在 C# 中删除 word 文档中的所有超链接。欢迎查阅~

借助Spire.Doc,我们可以很方便的在word文档中添加超链接和编辑超链接。本文将重点演示如何在 C# 中删除 word 文档中的所有超链接。

下面就详细介绍如何去除word文档中的超链接。首先,查看带有许多超链接的示例文档:

C#去除word文档中的超链接的方法

第 1 步:创建一个新的 word 文档并从文件中加载示例文档:

Document doc = new Document();doc.LoadFromFile("Sample.docx");

第 2 步:创建一个方法 FindAllHyperlinks() 以获取示例文档中的所有超链接。

private 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;}

第 3 步:删除超链接的字体颜色和下划线格式。

private 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);}}}}private void FormatText(TextRange tr){tr.CharacterFormat.TextColor = Color.Black;tr.CharacterFormat.UnderlineStyle = UnderlineStyle.None;}

第 4 步:展平超链接字段。

private 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);}}}

第 5 步:将文档保存到文件

doc.SaveToFile("removehyperlinks.docx", FileFormat.Docx);

去除word文档超链接后的有效截图:

C#去除word文档中的超链接的方法

如何从word文档中删除超链接的完整代码:

public Removehyperlink(){Document doc = new Document();doc.LoadFromFile("Sample.docx");List hyperlinks = FindAllHyperlinks(doc);for (int i = hyperlinks.Count - 1; i >= 0; i--){FlattenHyperlinks(hyperlinks[i]);}doc.SaveToFile("removehyperlinks.docx", FileFormat.Docx);}private 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;}private 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);}}}private 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);}}}}private void FormatText(TextRange tr){tr.CharacterFormat.TextColor = Color.Black;tr.CharacterFormat.UnderlineStyle = UnderlineStyle.None;}

以上便是如何在C#去除word文档中的超链接,如果您有其他问题也可以继续浏览本系列文章,获取相关教程,你还可以给我留言或者加入我们的官方技术交流群。


欢迎下载|体验更多E-iceblue产品

获取更多信息请咨询在线客服  


标签:

来源:慧都

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年10月19日
下一篇 2022年10月19日

相关推荐

发表回复

登录后才能评论