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

时间:2013-07-05 13:58:45

标签: extendscript

我们导入过程的一部分是从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.");

故事编辑器和超链接面板

Story Editor showing hyperlinks not present in the Hyperlinks Panel

从导入输出

There are 1 link(s) in the document.
Removing hyperlink: http://www.google.com
There are 0 links(s) in the document.

2 个答案:

答案 0 :(得分:2)

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

试试这个:

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

答案 1 :(得分:0)

我来到这里时也遇到了类似的问题,并非常感谢usr2564301的回答,因为它使InDesign中超链接的性质更加明了。但是在我自己的脚本中的某些事情未能按预期工作后,我进行了更多探索,发现答案并不完全准确。

为了测试hyperlinkhyperlinkTextSourcehyperlinkURLDestination之间的关系,我编写了一个脚本,该脚本仅删除了三个对象之一,并使用共享和非共享对象对其进行了测试。超链接。这是我发现的:

  

具有非共享的超链接目标:

     

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

     

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

     

删除目的地:
  超级链接已删除?:否
  来源已删除?:否
  目的地已删除?:是

     

具有共享的超链接目标:

     

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

     

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

     

删除目的地:
  超级链接已删除?:否
  来源已删除?:否
  目的地已删除?:是

删除目标完全符合您的期望,它只是删除目标并将超链接和源保留在原处。就像超链接中的目标字段为空。

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

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

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