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

Illustratorの画像ファイルのリンクが切れたときなんて記事を書いたので、せっかくだから俺は赤い扉を画像のリンク先をどばーっと書き出すJSを書いてみた。\(^o^)/オワタになってないかどうかの確認用です。
10.0向けに作って、一応CSに対応させたつもり。リファレンス見たかぎりCS2以降も大丈夫だと思うけど、環境がないので動作確認はWindows版Illustrator10.0とCSのみ行ってます。

// アクティブな文書内の画像の絶対パスを外部テキストファイルに書き出す
// ドキュメントのあるフォルダに「linkPath_<ドキュメント名>.txt」をつくって書き出し
// 埋め込みオブジェクトについても、ファイル情報があるものはとりあえず取得してみた

// Illustratorのバージョン(2桁の数字)
var appVersion = parseInt(version.substr(0,2),10);
// アクティブドキュメント取得しておく
var actDoc = activeDocument;

// ドキュメント上の画像を取得
var placed = actDoc.placedItems; // AI/PSD/EPS/PDF(埋め込むと編集できるもの)
var raster = actDoc.rasterItems; // ビットマップ画像

// パス文字列格納用の配列を作成
var resultArr = new Array;

// 配置画像について処理
var placedLen = placed.length;
for (var i = 0; i < placedLen ; i++) {
  var tmp = placed[i];
  var status = "Link"; // placedItemはリンクしかないので分岐なし
  var fileName = (appVersion > 10) ? decodeURI(tmp.file.absoluteURI) : tmp.file.fullName;
  resultArr.push(status + "\t" + fileName);
}

// ビットマップ画像について処理
var rasterLen = raster.length;
for (var i = 0; i < rasterLen ; i++) {
  try {
    var tmp = raster[i];
    if (tmp.file) {
      var status = (tmp.embedded) ? "Embed" : "Link"; // リンクか埋め込みか
      var fileName = (appVersion > 10) ? decodeURI(tmp.file.absoluteURI) : tmp.file.fullName;
    }
    resultArr.push(status + "\t" + fileName);
  } catch (e) {
    // リンク先ファイルの情報のない画像(ラスタライズしたものとか)は
    // fileプロパティにアクセスするとエラーになるので何も処理させない
  }
}

// ここから外部ファイルに書き出す処理
var saveFolder = actDoc.path; // アクティブなドキュメントの保存フォルダ
var actDocName = actDoc.name; // アクティブなドキュメントの名前

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

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

// 書き込みが成功したらダイアログを出す(いらない)
if(success) {
  var saveFileName = (appVersion > 10) ? decodeURI(saveFile.name) : saveFile.name;
  alert("配置画像のパスを保存しました。\n" + "ファイル名 : " + saveFileName);
}
else {
  alert("しっぱいしました");
}
// ここまで外部ファイルに書き出す処理

10.0にはFile.absoluteURIプロパティがなくて、CS以降にはFile.fullNameがないので分岐しています。
日本語ファイル名でもちゃんと日本語になるはず。

Link	/e/ほにゃらら/ほげげげ.eps
Link	/e/ほにゃらら/はちゅねさん.tif
Embed	/e/ほにゃらら/俺の嫁.tif

って感じで書き出されます。

参考

四苦八苦して↑を書いてる間に、なにする?DTP+Webの人が配置画像の相対パスを取得するJSを作られたようです。ていうか相対パスのほうが便利だ……!
イラストレーターのリンクを相対パスでテキストに保存しておくといいかも - なにする?DTP+WEB