超链接通常出现在文本上,只需要点击这些超链接,我们就可以跳转到特定的网页、文档、邮箱地址或是其他元素。但有些文档中,尤其是复制网页内容生成的 word 文档,可能会有一些令人讨厌的超链接,例如广告。本文将展示如何用 spire.doc for java 移除 word 文档中的超链接。
安装 spire.doc for java
首先,您需要在 java 程序中添加 spire.doc.jar 文件作为依赖项。您可以从 这个链接 下载 jar 文件;如果您使用 maven,则可以通过在 pom.xml 文件中添加以下代码导入 jar 文件。
com.e-iceblue
e-iceblue
https://repo.e-iceblue.cn/repository/maven-public/
e-iceblue
spire.doc
5.4.10
移除 word 文档中的指定超链接
以下是实现移除 word 文档中指定超链接的详细操作步骤:
- 创建 document 的对象,并用 document.loadfromfile() 从磁盘中加载 word 文档。
- 用自定义的 findallhyperlinks() 方法找到文档中所有超链接。
- 用自定义的 flattenhyperlinks() 方法移除第一个超链接及格式。
- 用 document.savetofile() 方法保存文档到文件。
- java
import com.spire.doc.*;
import com.spire.doc.documents.documentobjecttype;
import com.spire.doc.documents.paragraph;
import com.spire.doc.documents.underlinestyle;
import com.spire.doc.fields.field;
import com.spire.doc.fields.textrange;
import java.awt.*;
import java.util.arraylist;
public class removehyperlink {
public static void main(string[] args) {
//创建 document 的对象,并从磁盘加载word文档
string input = "d:/testp/示例.docx";
document doc = new document();
doc.loadfromfile(input);
//找到所有超链接
arraylist hyperlinks = findallhyperlinks(doc);
//移除第一个超链接及格式
flattenhyperlinks(hyperlinks.get(0));
//保存文档到文件
string output = "d:/javaoutput/移除超链接.docx";
doc.savetofile(output, fileformat.docx);
}
//创建 findallhyperlinks() 方法来获取文档中所有超链接
private static arraylist findallhyperlinks(document document)
{
arraylist hyperlinks = new arraylist();
//在文档中循环查找所有超链接
for (section section : (iterable)document.getsections())
{
for (documentobject object : (iterable)section.getbody().getchildobjects())
{
if (object.getdocumentobjecttype().equals(documentobjecttype.paragraph))
{
paragraph paragraph = (paragraph) object;
for (documentobject cobject : (iterable)paragraph.getchildobjects())
{
if (cobject.getdocumentobjecttype().equals(documentobjecttype.field))
{
field field = (field) cobject;
if (field.gettype().equals(fieldtype.field_hyperlink))
{
hyperlinks.add(field);
}
}
}
}
}
}
return hyperlinks;
}
//创建 flattenhyperlinks() 方法来移除超链接及格式
public static void flattenhyperlinks(field field)
{
int ownerparaindex = field.getownerparagraph().ownertextbody().getchildobjects().indexof(field.getownerparagraph());
int fieldindex = field.getownerparagraph().getchildobjects().indexof(field);
paragraph sepownerpara = field.getseparator().getownerparagraph();
int sepownerparaindex = field.getseparator().getownerparagraph().ownertextbody().getchildobjects().indexof(field.getseparator().getownerparagraph());
int sepindex = field.getseparator().getownerparagraph().getchildobjects().indexof(field.getseparator());
int endindex = field.getend().getownerparagraph().getchildobjects().indexof(field.getend());
int endownerparaindex = field.getend().getownerparagraph().ownertextbody().getchildobjects().indexof(field.getend().getownerparagraph());
formatfieldresulttext(field.getseparator().getownerparagraph().ownertextbody(), sepownerparaindex, endownerparaindex, sepindex, endindex);
field.getend().getownerparagraph().getchildobjects().removeat(endindex);
for (int i = sepownerparaindex; i >= ownerparaindex; i--)
{
if (i == sepownerparaindex && i == ownerparaindex)
{
for (int j = sepindex; j >= fieldindex; j--)
{
field.getownerparagraph().getchildobjects().removeat(j);
}
}
else if (i == ownerparaindex)
{
for (int j = field.getownerparagraph().getchildobjects().getcount() - 1; j >= fieldindex; j--)
{
field.getownerparagraph().getchildobjects().removeat(j);
}
}
else if (i == sepownerparaindex)
{
for (int j = sepindex; j >= 0; j--)
{
sepownerpara.getchildobjects().removeat(j);
}
}
else
{
field.getownerparagraph().ownertextbody().getchildobjects().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 = (paragraph) ownerbody.getchildobjects().get(i);
if (i == sepownerparaindex && i == endownerparaindex)
{
for (int j = sepindex 1; j < endindex; j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else if (i == sepownerparaindex)
{
for (int j = sepindex 1; j < para.getchildobjects().getcount(); j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else if (i == endownerparaindex)
{
for (int j = 0; j < endindex; j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else
{
for (int j = 0; j < para.getchildobjects().getcount(); j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
}
}
//创建 formattext() 方法把字体颜色改为黑色并移除下划线
private static void formattext(textrange tr)
{
//将字体设置为黑色
tr.getcharacterformat().settextcolor(color.black);
//将下划线设置为无下划线
tr.getcharacterformat().setunderlinestyle(underlinestyle.none);
}
}
移除 word 文档中的所有超链接
移除 word 文档中所有超链接的详细操作步骤如下:
- 创建 document 的对象,并用 document.loadfromfile() 从磁盘中加载 word 文档。
- 用自定义的 findallhyperlinks() 方法找到文档中所有超链接。
- 循环所有超链接,用自定义的 flattenhyperlinks() 方法移除超链接及格式。
- 用 document.savetofile() 方法保存文档到文件。
- java
import com.spire.doc.*;
import com.spire.doc.documents.documentobjecttype;
import com.spire.doc.documents.paragraph;
import com.spire.doc.documents.underlinestyle;
import com.spire.doc.fields.field;
import com.spire.doc.fields.textrange;
import java.awt.*;
import java.util.arraylist;
public class removehyperlink {
public static void main(string[] args) {
//创建 document 的对象,并从磁盘加载word文档
string input = "d:/testp/示例.docx";
document doc = new document();
doc.loadfromfile(input);
//找到所有超链接
arraylist hyperlinks = findallhyperlinks(doc);
// 循环所有超链接,移除超链接及格式
for (int i = hyperlinks.size() -1; i >= 0; i--)
{
flattenhyperlinks(hyperlinks.get(i));
}
//保存文档到文件
string output = "d:/javaoutput/移除超链接.docx";
doc.savetofile(output, fileformat.docx);
}
//创建 findallhyperlinks() 方法来获取文档中所有超链接
private static arraylist findallhyperlinks(document document)
{
arraylist hyperlinks = new arraylist();
//在文档中循环查找所有超链接
for (section section : (iterable)document.getsections())
{
for (documentobject object : (iterable)section.getbody().getchildobjects())
{
if (object.getdocumentobjecttype().equals(documentobjecttype.paragraph))
{
paragraph paragraph = (paragraph) object;
for (documentobject cobject : (iterable)paragraph.getchildobjects())
{
if (cobject.getdocumentobjecttype().equals(documentobjecttype.field))
{
field field = (field) cobject;
if (field.gettype().equals(fieldtype.field_hyperlink))
{
hyperlinks.add(field);
}
}
}
}
}
}
return hyperlinks;
}
//创建 flattenhyperlinks() 方法来移除超链接及格式
public static void flattenhyperlinks(field field)
{
int ownerparaindex = field.getownerparagraph().ownertextbody().getchildobjects().indexof(field.getownerparagraph());
int fieldindex = field.getownerparagraph().getchildobjects().indexof(field);
paragraph sepownerpara = field.getseparator().getownerparagraph();
int sepownerparaindex = field.getseparator().getownerparagraph().ownertextbody().getchildobjects().indexof(field.getseparator().getownerparagraph());
int sepindex = field.getseparator().getownerparagraph().getchildobjects().indexof(field.getseparator());
int endindex = field.getend().getownerparagraph().getchildobjects().indexof(field.getend());
int endownerparaindex = field.getend().getownerparagraph().ownertextbody().getchildobjects().indexof(field.getend().getownerparagraph());
formatfieldresulttext(field.getseparator().getownerparagraph().ownertextbody(), sepownerparaindex, endownerparaindex, sepindex, endindex);
field.getend().getownerparagraph().getchildobjects().removeat(endindex);
for (int i = sepownerparaindex; i >= ownerparaindex; i--)
{
if (i == sepownerparaindex && i == ownerparaindex)
{
for (int j = sepindex; j >= fieldindex; j--)
{
field.getownerparagraph().getchildobjects().removeat(j);
}
}
else if (i == ownerparaindex)
{
for (int j = field.getownerparagraph().getchildobjects().getcount() - 1; j >= fieldindex; j--)
{
field.getownerparagraph().getchildobjects().removeat(j);
}
}
else if (i == sepownerparaindex)
{
for (int j = sepindex; j >= 0; j--)
{
sepownerpara.getchildobjects().removeat(j);
}
}
else
{
field.getownerparagraph().ownertextbody().getchildobjects().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 = (paragraph) ownerbody.getchildobjects().get(i);
if (i == sepownerparaindex && i == endownerparaindex)
{
for (int j = sepindex 1; j < endindex; j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else if (i == sepownerparaindex)
{
for (int j = sepindex 1; j < para.getchildobjects().getcount(); j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else if (i == endownerparaindex)
{
for (int j = 0; j < endindex; j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
else
{
for (int j = 0; j < para.getchildobjects().getcount(); j )
{
formattext((textrange)para.getchildobjects().get(j));
}
}
}
}
//创建 formattext() 方法把字体颜色改为黑色并移除下划线
private static void formattext(textrange tr)
{
//将字体设置为黑色
tr.getcharacterformat().settextcolor(color.black);
//将下划线设置为无下划线
tr.getcharacterformat().setunderlinestyle(underlinestyle.none);
}
}
申请临时 license
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用javascript。获取有效期 30 天的临时许可证。