コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

067.【Id】一括再リンク

実行方法

  1. extendscript-es5-shimから、indexOf()のポリフィルをダウンロードする
  2. このスクリプトと同階層に「indexOf.js」を移動する
  3. 以下のようなテキストデータを作成する
    リンクAの現在の絶対パス[タブ]リンクAの差し替え後の絶対パス
    リンクBの現在の絶対パス[タブ]リンクBの差し替え後の絶対パス
  4. 対象としたいinddを開いた状態で実行する

コード

//@include "./indexOf.js"

var list = fileRead("before", "after");
var doc = app.activeDocument;

var log1 = log2 = [];
var tmp = doc.links.everyItem().filePath;
for (var i = 0; i < list.length; i++) {
  //実際のリンクのなかにbeforeのパスのものがなかったら
  if (tmp.indexOf(list[i]['before']) === -1) {
    log1.push(i + 1);
  }
  //もし差し替え先のファイルが存在していなかったら
  if (!new File(list[i]['after']).exist) {
    log2.push(i + 1)
  }
}
if (log1.length > 0) {
  alert(log1 + "行目の変更前のパスを確認してください");
}
if (log2.length > 0) {
  alert(log2 + "行目の変更後のパスを確認してください");
}
if (log1.length > 0 || log2.length > 0) {
  exit();
}

for (var i = 0; i < list.length; i++) {
  for (var j = 0; j < doc.links.length; j++) {
    if (doc.links[j].filePath === list[i].before) {
      doc.links[j].relink(new File(list[i].after));
    }
  }
}


function fileRead(value /*string*/ ) {
  var tgtFile = File.openDialog("ファイルを選んでください", "*.txt");
  if (!tgtFile || !tgtFile.exists) {
    alert("中断しました");
    exitFlag = true;
    exit();
  }
  var res = [];
  var fileReadFlag;
  tgtFile.open("r");
  tgtFile.encoding = "UTF-8";

  try {
    while (!tgtFile.eof) {
      var args = arguments;
      var ln = tgtFile.readln().split(/\t/);
      if (ln.length !== args.length) {
        alert("読み込みテキストに不備があるため中断します。");
        exit();
        exitFlag = true;
      }
      var item = {};
      for (var i = 0; i < args.length; i++) {
        item[args[i]] = ln[i];
      }
      res.push(item);
    }
    fileReadFlag = true;
  } catch (e) {
    alert(e);
    fileReadFlag = false;
  } finally {
    tgtFile.close();
  }
  if (!fileReadFlag || res.length === 0) {
    alert("ファイルを読み込めませんでした");
    exit();
    exitFlag = true;
  }
  return res;
}