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

InDesign脚本优化:实现独立窗口与widows检测结果内嵌显示

InDesign 孤行检测脚本优化方案

原脚本存在两个核心问题:

  • 模态弹窗阻塞操作:运行时无法切换到InDesign文档修改问题
  • 结果弹窗无法留存:alert弹窗关闭后无法随时参考检测结果

以下是修改后的完整优化脚本:

// 创建非模态面板窗口,可悬浮操作文档
var Widows_Report = new Window("palette", "Widow Detector", undefined, {borderless: false, resizeable: true});
Widows_Report.orientation = "column";
Widows_Report.alignChildren = ["center", "top"];
Widows_Report.spacing = 10;
Widows_Report.margins = 16;

// 页面选择面板
var panel1 = Widows_Report.add("panel", undefined, "选择搜索范围");
panel1.orientation = "column";
panel1.alignChildren = ["center", "center"];
panel1.spacing = 10;
panel1.margins = [10, 10, 9, 10];

var Page_Input = panel1.add("group");
Page_Input.orientation = "row";
Page_Input.alignChildren = ["center", "center"];
Page_Input.spacing = 10;
Page_Input.margins = 6;

var edittext1 = Page_Input.add('edittext', undefined, "1", {name: "edittext1"});
edittext1.helpTip = "输入起始页码";
edittext1.preferredSize.width = 45;
edittext1.preferredSize.height = 23;

var statictext1 = Page_Input.add("statictext", undefined, "至");
statictext1.preferredSize.width = 30;
statictext1.preferredSize.height = 17;
statictext1.justify = "center";

var edittext2 = Page_Input.add('edittext', undefined, app.activeDocument.pages.length.toString(), {name: "edittext2"});
edittext2.helpTip = "输入结束页码";
edittext2.preferredSize.width = 45;
edittext2.preferredSize.height = 23;

// 按钮组
var group3 = Widows_Report.add("group");
group3.orientation = "row";
group3.alignChildren = ["center", "top"];
group3.spacing = 10;
group3.margins = 0;

var button1 = group3.add("button", undefined, "开始检测");
button1.preferredSize.width = 80;

var button2 = group3.add("button", undefined, "关闭窗口");
button2.preferredSize.width = 80;

// 结果展示面板(可滚动)
var resultPanel = Widows_Report.add("panel", undefined, "检测结果");
resultPanel.orientation = "column";
resultPanel.alignChildren = ["fill", "top"];
resultPanel.spacing = 5;
resultPanel.margins = 10;
resultPanel.preferredSize.width = 300;
resultPanel.preferredSize.height = 200;

// 滚动文本框,用于显示结果(只读)
var resultText = resultPanel.add("edittext", undefined, "点击「开始检测」查看结果", {multiline: true, readonly: true});
resultText.preferredSize.width = 280;
resultText.preferredSize.height = 180;
resultText.scrolling = true;

// 开始检测按钮事件
button1.onClick = function() {
    var startPage = parseInt(edittext1.text);
    var endPage = parseInt(edittext2.text);
    var doc = app.activeDocument;

    // 页码有效性验证
    if (isNaN(startPage) || isNaN(endPage) || startPage < 1 || startPage > doc.pages.length || endPage < 1 || endPage > doc.pages.length || startPage > endPage) {
        resultText.text = "⚠️ 页码无效,请输入1到" + doc.pages.length + "之间的有效范围,且起始页码≤结束页码";
        return;
    }

    var reportWidow = "检测结果:\n存在孤行的段落如下\n\n------------------------\n\n";
    var foundWidows = false;

    for (var i = startPage - 1; i < endPage; i++) {
        var page = doc.pages[i];
        var textFrames = page.textFrames;
        for (var j = 0; j < textFrames.length; j++) {
            var textFrame = textFrames[j];
            var paragraphs = textFrame.paragraphs;
            for (var k = 0; k < paragraphs.length; k++) {
                var paragraph = paragraphs[k];
                var fontSize = paragraph.pointSize;
                // 仅检测9.5-11号字体的段落
                if (fontSize >= 9.5 && fontSize <= 11) {
                    var lastLine = paragraph.lines[-1];
                    if (lastLine && lastLine.words.length === 1) {
                        foundWidows = true;
                        reportWidow += "页面 " + (i + 1) + ",段落 " + (k + 1) + "\n";
                        reportWidow += "孤行内容:" + lastLine.words[0].contents + "\n\n";
                    }
                }
            }
        }
    }

    if (foundWidows) {
        resultText.text = reportWidow;
    } else {
        resultText.text = "✅ 恭喜,未检测到孤行!";
    }
};

// 关闭窗口按钮事件
button2.onClick = function() {
    Widows_Report.close();
};

// 显示窗口
Widows_Report.show();

关键修改说明

  • 窗口类型切换:将dialog改为palette,这是InDesign支持的非模态窗口类型,可悬浮在软件上方,完全不阻塞文档操作
  • 新增结果展示区:添加可滚动的只读文本框,替代alert弹窗,检测结果可随时查看、滚动
  • 优化用户体验:给页码输入框设置默认值(起始1,结束为文档总页数),减少手动输入操作
  • 统一提示逻辑:错误提示和检测结果都显示在结果框内,避免频繁弹窗干扰
  • 支持窗口缩放:开启resizeable: true,可根据需要调整窗口大小,查看更多结果

内容的提问来源于stack exchange,提问作者Bryan Pinkey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:52:46