Indesign 2020 ScriptUI点击按钮添加text frame无响应问题求解
问题原因及修正方案
核心问题1:变量名冲突
你用了document作为存储激活文档的变量名,而ScriptUI运行环境中document是内置保留对象,在onClick回调的局部作用域内访问时,会优先指向内置对象而非你提前赋值的app.activeDocument,调用document.pages时直接报错,逻辑无法执行。
核心问题2:窗口类型事件适配问题
InDesign 2020对dialog类型的ScriptUI窗口的点击事件监听存在兼容性缺陷,部分场景下onClick回调不会被触发。
核心问题3:文本框坐标参数错误
geometricBounds的参数顺序是[上边界Y, 左边界X, 下边界Y, 右边界X],Y轴向下为正方向,你当前写的[25,284.5,15,226.5]下边界Y值小于上边界,文本框高度为负,即使代码运行也不会在页面显示。
修正后的完整代码
// 把变量名从document改成自定义的myDoc,避免保留字冲突 var myDoc = app.activeDocument; myDoc.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.MILLIMETERS; myDoc.viewPreferences.verticalMeasurementUnits = MeasurementUnits.MILLIMETERS; app.viewPreferences.rulerOrigin = RulerOrigin.SPREAD_ORIGIN; myDoc.viewPreferences.rulerOrigin = RulerOrigin.SPREAD_ORIGIN; myDoc.zeroPoint = [0,0]; // 窗口类型从dialog改成palette适配事件触发 var Labelpanel = new Window("palette"); Labelpanel.text = "Printer"; Labelpanel.orientation = "column"; Labelpanel.alignChildren = ["center","top"]; Labelpanel.spacing = 10; Labelpanel.margins = 16; var Button1 = Labelpanel.add("button", undefined, undefined, {name: "Button 1"}); Button1.text = "Magenta 1"; Button1.onClick = function() { var Label = myDoc.pages[0].textFrames.add(); // 修正geometricBounds的参数顺序,确保下边界大于上边界 Label.properties = { geometricBounds : [ 15,226.5,25,284.5 ], contents : "1234_Mag1" } Label.paragraphs[0].appliedFont = app.fonts.item("Arial"); Label.paragraphs[0].pointSize = 30; Label.paragraphs[0].justification = Justification.RIGHT_ALIGN; Labelpanel.close(); } // 模态显示窗口,和原有dialog效果一致 Labelpanel.show(true);
内容的提问来源于stack exchange,提问作者user17280916
相关产品推荐
相关产品推荐

