我们导入过程的一部分是从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.
超链接由几个不同的部分组成,您必须小心地删除它们中的每一个。单个“超链接”对象只是一种抽象容器对象;它包含对超链接项及其目标的引用。
试试这个:
app.activeDocument.hyperlinkTextDestinations.everyItem().remove();
app.activeDocument.hyperlinkTextSources.everyItem().remove();
app.activeDocument.hyperlinks.everyItem().remove();
我带着类似的问题来到这里,非常感谢usr2564301的回答,因为它对InDesign中超链接的性质有了很多了解。但是在我自己的脚本中的一些东西没有按预期工作之后,我进行了更多的探索并发现答案并不完全准确。
为了测试hyperlink
,hyperlinkTextSource
和hyperlinkURLDestination
之间的关系,我写了一个脚本,只删除了三个对象中的一个,我用共享和非共享超链接测试了它。这是我发现的:
使用非共享超链接目标:
删除超链接: 删除超链接?:是的 消除了来源?:没有 目的地已删除?:是的
删除来源: 删除超链接?:是的 消息来源?:是的 目的地已删除?:是的
删除目的地: 删除了超链接?:没有 消除了来源?:没有 目的地已删除?:是的
使用共享超链接目标:
删除超链接: 删除超链接?:是的 消除了来源?:没有 目的地已删除?:没有
删除来源: 删除超链接?:是的 消息来源?:是的 目的地已删除?:没有
删除目的地: 删除了超链接?:没有 消除了来源?:没有 目的地已删除?:是的
删除目标正是您所期望的 - 它只是删除目标并保留超链接和源。这就像在超链接中有一个空的目标字段。
正如您所发现的,删除包含超链接的结果不那么直观。您可能希望它会删除所有内容,但它只删除目标(如果它是非共享的)。
让我感到惊讶的是,仅删除源代码就足以删除所有内容(对于非共享目标)。我认为这种理解是有道理的 - 没有源的超链接是没有意义的。
你去吧在我的脚本中,我需要删除单个超链接,这种行为实际上简化了一些事情。删除hyperlinkTextSource
可以完成这项工作,而不必担心它是否是共享目的地(可能被其他超链接使用)。