在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中编写脚本
非常感谢任何帮助。
谢谢,
答案 0 :(得分:1)
将文本从end更改为start。反转您的for
循环,或(更简单)更改返回找到结果的顺序:
var results = app.activeDocument.findGrep(true);
(有关此处布尔值的含义,请参阅an online reference。)
它无法开始工作的原因是因为您将result
列表存储到变量中,并且在以后更改文本时它不会更新。不幸的是,这是插入超链接目的地&#39;确实:它在正在运行的文本中插入一个隐藏的字符。从那时起,以前找到的所有位置都不再受信任,因此您必须重新执行findGrep
命令(并跳过第一个找到的结果) - 或者从结束开始处理结果,因此您所做的任何更改都不会影响您仍需要处理的文本。