You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:52:42