var Widows_Report = new Window("dialog", "Let's Find Some Widows", undefined, {borderless: false, resizeable: false});
Widows_Report.orientation = "column";
Widows_Report.alignChildren = ["center", "top"];
Widows_Report.spacing = 10;
Widows_Report.margins = 16;

var panel1 = Widows_Report.add("panel", undefined, "Select the pages you want to search");
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, undefined, {name: "edittext1"});
edittext1.helpTip = "Enter the page number where you want the search to start";
edittext1.preferredSize.width = 45;
edittext1.preferredSize.height = 23;

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

var edittext2 = Page_Input.add('edittext', undefined, undefined, {name: "edittext2"});
edittext2.helpTip = "Enter the page number where you want the search to end";
edittext2.preferredSize.width = 45;
edittext2.preferredSize.height = 23;

var group2 = Widows_Report.add("group");
group2.orientation = "column";
group2.alignChildren = ["left", "center"];
group2.spacing = 10;
group2.margins = 1;

var group3 = group2.add("group");
group3.orientation = "row";
group3.alignChildren = ["center", "top"];
group3.spacing = 10;
group3.margins = 0;

var button1 = group3.add("button", undefined, "Start");
button1.preferredSize.width = 68;

var button2 = group3.add("button", undefined, "Close");
button2.preferredSize.width = 61;

var group4 = group2.add("group");
group4.orientation = "column";
group4.alignChildren = ["center", "bottom"];
group4.spacing = 12;
group4.margins = 5;

// Start Button Click Event
button1.onClick = function() {
    var startPage = parseInt(edittext1.text);
    var endPage = parseInt(edittext2.text);

    // Validate page numbers
    if (isNaN(startPage) || isNaN(endPage) || startPage < 1 || startPage > app.activeDocument.pages.length || endPage < 1 || endPage > app.activeDocument.pages.length || startPage > endPage) {
        alert("Invalid page numbers. Please enter valid page numbers.");
    } else {
        var reportWidow = "HERE ARE YOUR RESULTS:\nThese pages have widows\n\n_______________________\n\n";         
                                              
        for (var i = startPage - 1; i < endPage; i++) {
            var page = app.activeDocument.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;
                    if (fontSize >= 9.5 && fontSize <= 11) {
                        var lastLine = paragraph.lines[-1];
                        if (lastLine && lastLine.words.length === 1) {
                            reportWidow += "PAGE " + (i + 1) + ",     PARAGRAPH " + (k + 1) + "\r";
                                reportWidow += lastLine.words[0].contents + "\r\r";
                            }
                        }
                    }
                }
            }

        if (reportWidow !== "HERE ARE YOUR RESULTS:\n") {
            alert(reportWidow);
        } else {
           alert("Congratulations, No Widows Were Found!");
        }
    }
};

// Close Button Click Event
button2.onClick = function() {
    Widows_Report.close();
};

Widows_Report.show();

我需要脚本运行,找到任何widows(最后一行只有一个词的文本段落.然后在原始脚本窗口内生成搜索结果(而不是现在的第二个alert 窗口).搜索结果是正确的,但我需要能够查看结果(列表widows),同时在InDesign文档中进行更正.

2 main issues:

1 - Script Window Format -我不知道如何使脚本窗口独立,以便在查看搜索结果的同时仍然可以在InDesign中工作.有时候,结果是一个很长的列表,我需要有结果显示,直到我关闭窗口.

2 - Script Search Results -现在,脚本将运行并正确地找到widows,问题是,脚本会生成第二个警告窗口,其中有搜索结果.所产生的信息是正确的,但我需要它显示在原始脚本窗口(首选)或代替alert 窗口,显示在一个新的独立窗口,将保持打开,同时作出更正的搜索结果.

以下是搜索结果的截图,因为他们现在出现:

Current Search Results Alert Window

我已经搜索了这个网站,网页,甚至要求聊天GPT的帮助.我承认我对InDesign脚本是新手,所以这两个问题对大多数人来说可能是基本的东西.

推荐答案

这是一个简单的快速解决方案.它将最终消息保存为文本文件,并打开它(可能在Windows上的记事本或macOS上的TextEdit应用程序中),而不是alert 窗口.

更改线路:

alert(reportWidow);

与:

report(reportWidow);

在代码的末尾添加函数:

function report(text) {
    var report_file = File(Folder.temp + '/widows.txt');
    report_file.encoding = 'utf-8';
    report_file.open('w');
    report_file.write(text);
    report_file.execute();
    report_file.close();
}

另一种方法是将对话框窗口转换为调色板,并在其中添加文本区域.以下是修改后的代码:

#target "InDesign"
#targetengine "session"

// "palette", not "dialog"
var Widows_Report = new Window("palette", "Let's Find Some Widows", undefined, {borderless: false, resizeable: false});
Widows_Report.orientation = "column";
Widows_Report.alignChildren = ["center", "top"];
Widows_Report.spacing = 10;
Widows_Report.margins = 16;

var panel1 = Widows_Report.add("panel", undefined, "Select the pages you want to search");
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, undefined, {name: "edittext1"});
edittext1.helpTip = "Enter the page number where you want the search to start";
edittext1.preferredSize.width = 45;
edittext1.preferredSize.height = 23;

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

var edittext2 = Page_Input.add('edittext', undefined, undefined, {name: "edittext2"});
edittext2.helpTip = "Enter the page number where you want the search to end";
edittext2.preferredSize.width = 45;
edittext2.preferredSize.height = 23;

var group2 = Widows_Report.add("group");
group2.orientation = "column";
group2.alignChildren = ["left", "center"];
group2.spacing = 10;
group2.margins = 1;

var group3 = group2.add("group");
group3.orientation = "row";
group3.alignChildren = ["center", "top"];
group3.spacing = 10;
group3.margins = 0;

var button1 = group3.add("button", undefined, "Start");
button1.preferredSize.width = 68;

var button2 = group3.add("button", undefined, "Close");
button2.preferredSize.width = 61;

var group4 = group2.add("group");
group4.orientation = "column";
group4.alignChildren = ["center", "bottom"];
group4.spacing = 12;
group4.margins = 5;

// the text area for the report
var group5 = group2.add("group");
group5.orientation = "column";
group5.alignChildren = ["center", "bottom"];
group5.spacing = 1;
group5.margins = 1;

var text_area_w = 300;
var text_area_h = 600;
var text_area = group5.add("edittext", [10, 16, text_area_w - 16, text_area_h - 20], " ", {multiline: true, wantReturn: true});

// Start Button Click Event
button1.onClick = function() {
    var startPage = parseInt(edittext1.text);
    var endPage = parseInt(edittext2.text);

    // Validate page numbers
    if (isNaN(startPage) || isNaN(endPage) || startPage < 1 || startPage > app.activeDocument.pages.length || endPage < 1 || endPage > app.activeDocument.pages.length || startPage > endPage) {
        alert("Invalid page numbers. Please enter valid page numbers.");
    } else {
        var reportWidow = "HERE ARE YOUR RESULTS:\nThese pages have widows\n\n_______________________\n\n";

        for (var i = startPage - 1; i < endPage; i++) {
            var page = app.activeDocument.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;
                    if (fontSize >= 9.5 && fontSize <= 11) {
                        var lastLine = paragraph.lines[-1];
                        if (lastLine && lastLine.words.length === 1) {
                            reportWidow += "PAGE " + (i + 1) + ",     PARAGRAPH " + (k + 1) + "\r";
                                reportWidow += lastLine.words[0].contents + "\r\r";
                            }
                        }
                    }
                }
            }

        if (reportWidow !== "HERE ARE YOUR RESULTS:\n") {
            text_area.text = reportWidow; // <------------------ HERE
        } else {
            alert("Congratulations, No Widows Were Found!");
        }
    }
};

// Close Button Click Event
button2.onClick = function() {
    Widows_Report.close();
};

Widows_Report.show();

enter image description here

Javascript相关问答推荐

使用redux-toolet DelivercThunks刷新访问令牌

Cypress -使用commands.js将数据测试id串在一起失败,但在将它们串在一起时不使用命令有效

从mat—country—select获取整个Country数组

将2D数组转换为图形

当运行d3示例代码时,没有显示任何内容

成功完成Reducers后不更新状态

如何在bslib nav_insert之后更改导航标签的CSS类和样式?

如何控制Reaction路由加载器中的错误状态?

IF语句的计算结果与实际情况相反

在SHINY R中的嵌套模块中,不能使用Java代码

将嵌套数组的元素乘以其深度,输出一个和

如何在Jest中模拟函数

连续添加promise 时,如何在所有promise 都已结算时解除加载覆盖

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

Played link-Initialize.js永远显示加载符号

Firefox的绝对定位没有达到预期效果

在使用JavaScript以HTML格式显示Google Drive中的图像时遇到问题

如何从Reaction-Redux中来自API调用的数据中筛选值

在AgGrid中显示分组行的单元格值

从客户端更新MongoDB数据库