JavaScript + InDesign:在 .indd 文档中查找一个词并编写一个包含页码位置的 .txt 文件

JavaScript + InDesign: Find a word in a .indd document and write a .txt file with page number locations

我 运行 在尝试执行脚本以查找特定单词时遇到了问题 - 在本例中是书中项目的名称 - 并将其所有出现的页码写在我的 InDesign 文档到 .txt 文件。

问题:无论出于何种原因,返回的 "parentPage.name" 值都乱序列出(例如:它在第 184 页出现在第 11 页之前的列表中,等等)

我不确定它是否与这段代码(下面)或其他地方有关:

pg_nr = found_txt.parentTextFrames[0].parentPage.name;

如果有人对如何解决这个问题有任何想法,那就太好了。谢谢!

我的代码的完整版本如下:

main ();
function main() {

var file_name = new Date() + "-Title-Project_Name-Page_Location";
var filepath = "~/Desktop/" + file_name + ".txt";
var write_file = File(filepath);
    write_file = new File(filepath);
    var write_text;
        write_text = write_file.open('w', undefined, undefined);
        write_file.encoding = "UTF-8";
        write_file.lineFeed = "Macintosh";
        #target indesign;
        var doc = app.activeDocument;
            app.findTextPreferences = NothingEnum.nothing;
            app.changeTextPreferences = NothingEnum.nothing;
            app.findChangeTextOptions.includeLockedLayersForFind = true;
            app.findChangeTextOptions.includeLockedStoriesForFind = true;
            app.findChangeTextOptions.includeHiddenLayers = false;
            app.findChangeTextOptions.includeMasterPages = false;
            app.findChangeTextOptions.includeFootnotes = true;
            app.findChangeTextOptions.caseSensitive = false;
            app.findChangeTextOptions.wholeWord = false;
            project_name = "Project Name";
            app.findTextPreferences.findWhat = project_name;
                find_txt = doc.findText();
                for (var i = 0; i < find_txt.length; i++) {
                    if (find_txt[i].contents == project_name) {
                        found_txt = find_txt[i];
                        pg_nr = found_txt.parentTextFrames[0].parentPage.name;
                        write_file.writeln(project_name + " : p. " + pg_nr + "\r\r");
                        }
                    }
            app.findTextPreferences = NothingEnum.nothing;
            app.changeTextPreferences = NothingEnum.nothing;
    write_file.close();
return;
}

这里的脚本被修改为将结果推送到一个数组,然后按文档中出现的顺序对它们进行排序。

显然答案已经晚了...但希望它在将来有用。

main ();
function main() {
    var arrResults = [];
    #target indesign;
    var doc = app.activeDocument;
    app.findTextPreferences = NothingEnum.nothing;
    app.changeTextPreferences = NothingEnum.nothing;
    app.findChangeTextOptions.includeLockedLayersForFind = true;
    app.findChangeTextOptions.includeLockedStoriesForFind = true;
    app.findChangeTextOptions.includeHiddenLayers = false;
    app.findChangeTextOptions.includeMasterPages = false;
    app.findChangeTextOptions.includeFootnotes = true;
    app.findChangeTextOptions.caseSensitive = false;
    app.findChangeTextOptions.wholeWord = false;
    project_name = "Project Name";
    app.findTextPreferences.findWhat = project_name;
        find_txt = doc.findText();
        for (var i = 0; i < find_txt.length; i++) {
            if (find_txt[i].contents == project_name) {
                found_txt = find_txt[i];
                pg_nr = found_txt.parentTextFrames[0].parentPage.name;
                pg_index = found_txt.parentTextFrames[0].parentPage.documentOffset;
                // pushes results into an array of objects
                arrResults[arrResults.length] = {"project_name":project_name,"page_number":pg_nr,"page_index":pg_index};
                }
            }
    app.findTextPreferences = NothingEnum.nothing;
    app.changeTextPreferences = NothingEnum.nothing;
    // sorts array by the document offset (order of appearance in document)
    arrResults = arrResults.sort(function(a,b){return a.page_index>b.page_index});
    // convert object to string
    for(var i = 0; i<arrResults.length; i++){
        arrResults[i] = "project:"+arrResults[i].project_name+", pg:"+arrResults[i].page_number;
        }
    var file_name = new Date() + "-Title-Project_Name-Page_Location";
    var filepath = "~/Desktop/" + file_name + ".txt";
    var write_file = new File(filepath);
    var write_text;
    write_text = write_file.open('w');
    write_file.encoding = "UTF-8";
    write_file.lineFeed = "Macintosh";
    write_file.write(arrResults.join("\n"));
    return;
    }