ぼんやりDTP

DTPに関係したりしなかったりするぼんやりとした話をなんとなく。

InDesign の JavaScript でドキュメントの目次を更新する

InDesignJavaScript でドキュメントの目次を更新したいのだが、目次を作成する Document.createTOC() メソッドはあるものの、更新用のメソッドらしいものがない模様。

menuActionsinvoke() でまわす感じになるようだ。

以下、開いている indd ドキュメントの目次を更新するサンプルコード。

//DESCRIPTION:開いているドキュメントの目次を更新する

var docIDs = extractDocIDs();

for (var i = docIDs.length - 1; i >= 0; i--) {
    var myDoc = app.documents.itemByID(docIDs[i]);
    updateTOCs(myDoc);
}

function extractDocIDs() {
    var docIDs = [];
    for (var i = 0; i < app.documents.length; i++) {
        docIDs.push(app.documents[i].id);
    }
    return docIDs;
}

function updateTOCs(myDoc) {
    var targetMenuItem = app.menuActions.itemByName("目次の更新");
    app.activeDocument = myDoc;
    var stories = myDoc.stories;
    for(var i = 0; i < stories.length; i++) {
        var story = stories[i];
        if(story.storyType != StoryTypes.TOC_STORY) {
            continue;
        } else {
            story.textContainers[0].select();
            try {
                targetMenuItem.invoke();
            } catch(e) {
                $.writeln (myDoc.name + ": \n" + e);
            }
        }
    }
}

参考ページ:

  1. adobe indesign - How to refresh all TOCs via a script? - Graphic Design Stack Exchange