InDesign脚本:如何为文本框内指定文字添加超链接?
解决同一文本框内指定文字添加不同内部链接的问题
修改思路
要给文本框内特定文字单独加超链接,核心是精准定位目标文字的文本范围,而非选中整个文本框。通过InDesign脚本的findText方法匹配指定字符串,再提取其textRange作为超链接源即可实现。
修改后的完整代码
doc = app.activeDocument; var layers = doc.layers; var pages = doc.pages; var firstPage = pages.item(0); // 添加5个新页面(保留原逻辑) for (var i = 1; i < 6; i++) { var anotherPage = pages.add(); } // 创建文本框并填充内容 var tfPage1 = firstPage.textFrames.add(); tfPage1.geometricBounds = [2, 2, 20, 20]; tfPage1.contents = "yaddda yadda LINK-A yadda yadda\nAnd a LINK-B on the 2nd line"; // -------------------------- // 处理LINK-A的超链接 // -------------------------- // 设置查找参数:匹配"LINK-A" app.findTextPreferences = NothingEnum.NOTHING; app.findTextPreferences.findWhat = "LINK-A"; // 执行查找,获取匹配的文本范围 var linkA = tfPage1.findText()[0]; if (linkA) { var hyperlinkSource1 = doc.hyperlinkTextSources.add(linkA); var hyperlinkDestination1 = doc.hyperlinkPageDestinations.add(pages.item(3)); doc.hyperlinks.add(hyperlinkSource1, hyperlinkDestination1); } // -------------------------- // 处理LINK-B的超链接 // -------------------------- // 重置查找偏好,避免残留上一次的查找条件 app.findTextPreferences = NothingEnum.NOTHING; app.findTextPreferences.findWhat = "LINK-B"; var linkB = tfPage1.findText()[0]; if (linkB) { var hyperlinkSource2 = doc.hyperlinkTextSources.add(linkB); var hyperlinkDestination2 = doc.hyperlinkPageDestinations.add(pages.item(2)); doc.hyperlinks.add(hyperlinkSource2, hyperlinkDestination2); } // 清空查找偏好,防止影响后续操作 app.findTextPreferences = NothingEnum.NOTHING;
关键说明
- 定位目标文本:通过
app.findTextPreferences设置查找内容,调用textFrame.findText()获取匹配的文本对象,取第一个结果([0])即为目标文字的范围。 - 重置查找偏好:每次查找前必须用
app.findTextPreferences = NothingEnum.NOTHING清空之前的查找条件,否则会延续上一次规则导致匹配错误。 - 判空处理:添加
if (linkA)类判断,避免目标文字不存在时脚本报错。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

