Indesign脚本GREP在应用超链接目的地时出错

Indesign script GREP messes up when applying hyperlink destination

本文关键字:目的地 出错 超链接 应用 脚本 GREP Indesign      更新时间:2023-09-26

在InDesign中遇到一个非常奇怪的脚本、GREP和超链接问题。我正在尝试编写一个脚本(js),它可以自动创建大型书籍(电子书)中的超链接。我已经成功地编写了一个词汇表超链接脚本,但这是为了参考章节。其想法是进行GREP搜索,查找所有与标题样式匹配的单词(在这种情况下为下划线,20磅),然后在该点插入超链接目的地。奇怪的是,当脚本运行时,它会打乱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中的脚本一些文本

向控制台输出以下内容:

信任的头衔控制和确定性

TitlxtInDesi 中的脚本

前两个是正确的,但后两个搞砸了。如果我注释掉对添加超链接目的地方法的调用,我会在控制台中看到正确的文本:

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

非常感谢您的帮助。

谢谢,

将文本从末尾改为开头。反转for循环,或者(更容易)更改返回已找到结果的顺序:

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

(有关布尔值的含义,请参阅在线参考资料)。

它从头到尾都不起作用的原因是,您将result列表存储到一个变量中,并且在之后更改文本时不会更新它。不幸的是,这就是"插入超链接目的地"的作用:它在运行的文本中插入一个隐藏字符。从那时起,以前找到的所有位置都将不再可信,因此您必须重新执行findGrep命令(并跳过第一个找到的结果),或者从头到尾处理结果,这样您所做的任何更改都不会影响仍需处理的文本。