InDesign CS で文書内の画像のパス一覧を書き出す JavaScript

似たような名前のファイルを使いまわしてると、どのフォルダのファイルにリンクしてるかわからなくなるときがあるので、配置した画像のリンク先をどばーっと書き出すJSを書いてみた。
例によってCS用。でもたぶんCS2とCS3でも動くんじゃないかしら……
せっかくファイルとフォルダのあたりを勉強したので、テキストファイルに書き出してみることにする。

// アクティブな文書内の画像のパスをすべて書き出す
// ドキュメントのあるフォルダに「linkPath_<ドキュメント名>.txt」をつくって書き出し
// ページごとに分ける(「ページ数<タブ>パス<改行>」)

if(app.documents.length > 0) {

  var resultArr = new Array; // 結果文字列の格納用配列(タブ区切りテキスト)

  var pageObjs = app.activeDocument.pages; // ページオブジェクトのコレクション
  var pLen = pageObjs.length;

  // 全ページループ
  for(var p = 0 ; p < pLen ; p++) {

    var tmpPage = pageObjs[p];

    var graphArr = tmpPage.allGraphics; // 現在のページにある画像の配列
    var gLen = graphArr.length;

    // 全画像についてパスを取得、格納用配列に格納
    for(var g = 0 ; g < gLen ; g++) {
      resultArr.push(tmpPage.name + "\t" + decodeURI(graphArr[g].itemLink.filePath));
    }

  } // 全ページループここまで


  // 画像があったらパスの一覧をテキストファイルに保存する
  if(resultArr.length != 0) {

    var saveFolderPath = app.activeDocument.filePath; // アクティブなドキュメントの保存フォルダ
    var actDocName = app.activeDocument.name; // アクティブなドキュメントの名前

    // 新規ファイルオブジェクトをつくる
    var saveFile = new File(saveFolderPath + "/linkPath_" + actDocName + ".txt");

    // 書き込みモードでファイルを開き、改行でjoinした配列を書き込んで閉じる
    saveFile.open("w");
    var success = saveFile.write(resultArr.join("\n"));
    saveFile.close();

    // 書き込みが成功したらダイアログを出す(いらない)
    if(success) {
      alert("リンクされた画像のパスを保存しました。\n" + "ファイル名 : " + decodeURI(saveFile.name));
    }

  }
  else {
    alert("リンクされた画像はありません。");
  }

}

テストがめんどくさいからアクティブな文書だけにしちゃったけど、実際使うなら開いてる文書すべてを一気に処理したほうが楽だろうな。

ちなみにファイル名とか保存先とか決めちゃったのはFile.saveDialogがなんだか使いにくかったから。