Indesign脚本GREP在应用超链接目标时会混乱

时间:2016-07-21 11:59:06

标签: javascript adobe-indesign extendscript

在InDesign中遇到了一个非常奇怪的问题,包括脚本,GREP和超链接。我正在尝试编写一个脚本(js),可以自动创建跨大书(电子书)的超链接。我已成功编写了词汇表超链接脚本,但这是用于章节参考。我们的想法是进行GREP搜索,找到与标题样式匹配的所有单词(在这种情况下为下划线,20pt),然后在该点插入超链接目标。奇怪的是,当脚本运行时,它会混淆GREP搜索结果,从上一行找到文本。

 
var doc = app.activeDocument;  
  
doc.hyperlinkTextDestinations.everyItem().remove();  
doc.hyperlinkTextSources.everyItem().remove();  
doc.hyperlinks.everyItem().remove();  
  
app.findGrepPreferences = app.changeGrepPreferences = null;  
app.findGrepPreferences.pointSize = 20;  
app.findGrepPreferences.underline = true;  
app.findGrepPreferences.findWhat = '';  
  
var results = app.activeDocument.findGrep();  
  
for (var i=0; i < results.length; i++) {  
    var text = results[i].texts.firstItem();  
    $.writeln(text.contents);  
    doc.hyperlinkTextDestinations.add(  
         text,   
         {  
             name: text.contents  
         }  
     );   
} 

在以下文本上运行此脚本(删除了indesign样式): 有信任的头衔 一些文字 控制和确定性 一些文字 标题 一些文字 在InDesign中编写脚本 一些文字

将以下内容输出到控制台:

有信任的头衔 控制和确定性

TITL XT InDesi中的脚本

前两个是正确的,但是它搞砸了最后一个2.如果我注释掉添加超链接目标方法的调用,我在控制台中看到了正确的文本:

有信任的头衔 控制和确定性 标题 在InDesign中编写脚本

非常感谢任何帮助。

谢谢,

1 个答案:

答案 0 :(得分:1)

将文本从end更改为start。反转您的for循环,或(更简单)更改返回找到结​​果的顺序:

var results = app.activeDocument.findGrep(true);

(有关此处布尔值的含义,请参阅an online reference。)

它无法开始工作的原因是因为您将result列表存储到变量中,并且在以后更改文本时它不会更新。不幸的是,这是插入超链接目的地&#39;确实:它在正在运行的文本中插入一个隐藏的字符。从那时起,以前找到的所有位置都不再受信任,因此您必须重新执行findGrep命令(并跳过第一个找到的结果) - 或者从结束开始处理结果,因此您所做的任何更改都不会影响您仍需要处理的文本。