如何使用Extendscript从inDesign文档中正确删除超链接?

问题描述 投票:3回答:2

我们导入过程的一部分是从word文档中删除超链接。我们现有的脚本非常简单,直接并且在某种程度上起作用。

我们遇到的问题是,即使我们使用下面的代码删除链接也很困难,超链接符号仍然显示在故事编辑器中,这阻止我们将来手动添加链接到此文本块。

我还从inDesign中手动添加了一个超链接,以显示两个超链接之间的差异,请参见下图。话虽如此,即使我在从inDesign添加链接后运行脚本,结果与上述相同。

剧本

var activeDocument = app.activeDocument;

trace("There are " + activeDocument.hyperlinks.length + " link(s) in the document.");

for(var i=(activeDocument.hyperlinks.length - 1); i >= 0; i--)
{
    trace("Removing hyperlink: " + activeDocument.hyperlinks.item(i).destination.name);
    activeDocument.hyperlinks.item(i).remove();
}

trace("There are " + activeDocument.hyperlinks.length + " link(s) in the document.");

故事编辑器和超链接面板

从导入输出

There are 1 link(s) in the document.
Removing hyperlink: http://www.google.com
There are 0 links(s) in the document.
extendscript
2个回答
2
投票

超链接由几个不同的部分组成,您必须小心地删除它们中的每一个。单个“超链接”对象只是一种抽象容器对象;它包含对超链接项及其目标的引用。

试试这个:

app.activeDocument.hyperlinkTextDestinations.everyItem().remove();
app.activeDocument.hyperlinkTextSources.everyItem().remove();
app.activeDocument.hyperlinks.everyItem().remove();

0
投票

我带着类似的问题来到这里,非常感谢usr2564301的回答,因为它对InDesign中超链接的性质有了很多了解。但是在我自己的脚本中的一些东西没有按预期工作之后,我进行了更多的探索并发现答案并不完全准确。

为了测试hyperlinkhyperlinkTextSourcehyperlinkURLDestination之间的关系,我写了一个脚本,只删除了三个对象中的一个,我用共享和非共享超链接测试了它。这是我发现的:

使用非共享超链接目标:

删除超链接: 删除超链接?:是的 消除了来源?:没有 目的地已删除?:是的

删除来源: 删除超链接?:是的 消息来源?:是的 目的地已删除?:是的

删除目的地: 删除了超链接?:没有 消除了来源?:没有 目的地已删除?:是的

使用共享超链接目标:

删除超链接: 删除超链接?:是的 消除了来源?:没有 目的地已删除?:没有

删除来源: 删除超链接?:是的 消息来源?:是的 目的地已删除?:没有

删除目的地: 删除了超链接?:没有 消除了来源?:没有 目的地已删除?:是的

删除目标正是您所期望的 - 它只是删除目标并保留超链接和源。这就像在超链接中有一个空的目标字段。

正如您所发现的,删除包含超链接的结果不那么直观。您可能希望它会删除所有内容,但它只删除目标(如果它是非共享的)。

让我感到惊讶的是,仅删除源代码就足以删除所有内容(对于非共享目标)。我认为这种理解是有道理的 - 没有源的超链接是没有意义的。

你去吧在我的脚本中,我需要删除单个超链接,这种行为实际上简化了一些事情。删除hyperlinkTextSource可以完成这项工作,而不必担心它是否是共享目的地(可能被其他超链接使用)。

© www.soinside.com 2019 - 2024. All rights reserved.