JavaScript + InDesign: найдите слово в документе .indd и напишите файл .txt с номерами страниц - PullRequest
0 голосов
/ 14 января 2019

Я столкнулся с проблемой при попытке выполнить скрипт, чтобы найти определенное слово - в данном случае имя проекта в книге - и записать номера страниц всех его вхождений в моем документе InDesign в. текстовый файл.

Проблема: По какой-либо причине возвращенные значения «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;
}

1 Ответ

0 голосов
/ 31 января 2019

Вот скрипт, модифицированный для переноса результатов в массив, а затем сортировки их по порядку появления в документе.

Ясно, что ответ уже поздно ... Но, надеюсь, он пригодится в будущем.

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;
    }
...