:note

ひとつの画像を複数フレームに配置する

InDesign で画像を配置するのに、通常コンテナフレームを生成して配置か、既存フレームに配置することしかできないのですが、必要に迫られて、単一画像を複数フレームに同じ画像を配置したかったので、そのスクリプト。

  • ダイアログのテキストフィールドをクリックして、配置画像を選ぶ
  • ドキュメント上のグラフィックフレームを選択してPlaceボタンで配置
  • "Replace old graphic with new one" にチェックがはいってないと空フレームにしか配置しません
  • "Fit after placement" フィットオプション(内容をフレーム内に収める)を配置後実行

元画像を一度削除して、100%配置

ひとつの画像を複数フレームに配置する /images/2011/07/multi_placement_100.jpg

フィットオプション有効

(内容をフレーム内に収める)

ひとつの画像を複数フレームに配置する /images/2011/07/multi_placement_fit_option.jpg

おまけ

通常は配置可能なファイルは拡張子でフィルターされるのでダイアログで選択することのできない .js とか .rb とかのテキストファイル、拡張子が .js だけど中身は .png みたいなのも条件付きで配置する事ができます。

こんなのが必要なワークフローもどうかと思うんだけど。

#targetengine 'session'
/**
 *  place an image into multi frames
 * 
 * click to Edittext field to select an image, the click Place button
 */
win();

function win() {
  var u;
  var w = new Window('palette', "an image into multi frames", u);
  w.orientation = 'column';
  // w.margins = 5;
  w.spacing = 5;
  w.alignChildren = ['fill', 'fill'];

  w.main_g = w.add('group');
    w.main_g.orientation = 'column';
    w.main_g.alignChildren = 'left';
    var store_link_txt = w.main_g.add('edittext', u, "Click to select an image file");
    var confirm_chb    = w.main_g.add('checkbox', u, "Replace old graphic with new one");
    var fit_chb        = w.main_g.add('checkbox', u, "Fit after placement");

    store_link_txt.size = [240,28];
    confirm_chb.value   = true;
    fit_chb.value       = false;

  w.btn_g = w.add('group');
    var ok_btn  = w.btn_g.add('button', u, "Place", {name: "ok"});

    ok_btn.minimumSize = [66,23];
    ok_btn.size  = ok_btn.minimumSize;

  store_link_txt.onClick = function () {
    var place = File.openDialog();
    if (place !== null) {
      store_link_txt.text = place.fullName;
    };
  }

  ok_btn.onClick = function () {
    var sel    = app.selection;
    var file    = File(store_link_txt.text);
    var replace = confirm_chb.value;
    var fit     = fit_chb.value;
    place_to_multiple_frame (sel, file, replace, fit);
  }
  w.show();
}
/**
 * place an image into multi frames
 * 
 * @param {Object} sel Collection of selection
 * @param {File} file FileObject
 * @param {Boolean} replace If true, replace old image to new one
 * @param {Boolean} fit If true, apply fit option PROPORTIONALLY
 *  
 */
function place_to_multiple_frame (sel, file, replace, fit) {
  for (var si=0, siL=sel.length; si < siL ; si++) {
    if ( sel[si].hasOwnProperty("graphics") ) {// rectangle, polygon..., except for textframe
      if (sel[si].graphics.length === 0) {// nothing is placed
        sel[si].place( file );
        if (fit) {
          sel[si].fit(FitOptions.PROPORTIONALLY);
        };
      }
      else{
        if (replace) {
          sel[si].graphics[0].remove();// remove image to reset scaling
          sel[si].place( file );
          if (fit) {
            sel[si].fit(FitOptions.PROPORTIONALLY);
          };
        };
      }
    };
  };
}

 
comments powered by Disqus
back to top