InDesign中如何通过脚本访问按钮内部的TextFrames?
解决InDesign中访问按钮内部文本框的问题
你遇到的问题是因为按钮(ButtonElement)内部的文本框不属于文档顶层的textFrames集合,而是嵌套在按钮的状态(State)对象的contentFrames里。要访问这些文本框,需要遍历文档中的按钮及其状态容器。
完整脚本示例
下面的脚本会遍历文档中所有顶层文本框 + 所有按钮内部的文本框,并为它们开启“收缩以适应”设置:
// 获取当前活动文档 var doc = app.activeDocument; var allTextFrames = []; // 1. 收集顶层文本框 var topLevelTextFrames = doc.textFrames.everyItem().getElements(); allTextFrames = allTextFrames.concat(topLevelTextFrames); // 2. 遍历所有按钮元素,收集内部文本框 var buttons = doc.buttonElements.everyItem().getElements(); for (var i = 0; i < buttons.length; i++) { var button = buttons[i]; // 遍历按钮的所有状态(正常、悬停、按下等) var states = button.states.everyItem().getElements(); for (var j = 0; j < states.length; j++) { var state = states[j]; // 遍历状态下的所有内容框 var contentFrames = state.contentFrames.everyItem().getElements(); for (var k = 0; k < contentFrames.length; k++) { var frame = contentFrames[k]; // 筛选出文本框类型 if (frame.constructor.name === "TextFrame") { allTextFrames.push(frame); } } } } // 对所有文本框应用“收缩以适应”设置 for (var m = 0; m < allTextFrames.length; m++) { var textFrame = allTextFrames[m]; textFrame.textFramePreferences.fitFrameToContent = true; } // 弹出统计结果 alert("共处理 " + allTextFrames.length + " 个文本框");
关键说明
doc.buttonElements:获取文档中所有按钮元素button.states:每个按钮包含多个状态(如NormalState、RolloverState、ClickState)state.contentFrames:每个状态下的内容容器集合,里面可能包含文本框、图形框等元素,需要筛选出TextFrame类型
内容的提问来源于stack exchange,提问作者lieven121
相关产品推荐
相关产品推荐

