11
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

InDesign を JavaScript で自動化する

Last updated at Posted at 2014-10-04

Adobe InDesign (Photoshop や Illustrator も含む一式) は JavaScript を使って自動化できる。ExtendedScript と呼ぶそうな。

(Mac 版だと AppleScript、Windows 版だと VBScript も使える。未確認)

要るもの

資料

プログラマから見るとたいへん拙い感じのするコードが多くて残念な感じがする。グローバル変数をいっぱい使ってたりとか……。

デバッガ

ExtendedScript Toolkit 上で動作させることでブレークポイントデバッグができる。ブレークポイントはコード上に

$.bp();

と書いて仕掛ける。

コンソールへの出力

$.write("hogehoge");
$.writeln("hogehoge");

高速化

「スクリプト」パネルのメニューから「再描画を有効にする」をオフにする。これで20%くらい早くなる。

「取り消す」機能を無効にしてさらに高速化できる (20%くらい)。

var main = function() {
  // ここにプログラムを記述
}

app.doScript(main, ScriptLanguage.javascript, [], UndoModes.fastEntireScript);

JavaScript の処理系があまり賢くないので、古典的な最適化手法が意外に効くのでバカにできない。手元のコードで以下の最適化をしたら1割くらい早くなった。

// Before
for(var i = 0; i < doc.pages.length; i++) {
}

// After
var pages_total = doc.pages.length;
for(var i = 0; i < pages_total; i++) {
}
// 遅い (変数 'a' の探索のせい)
var a = 1;
var hoge = function() {
  return a + 1;
}
hoge();

// 早い
var a = 1;
var hoge = function(a) {
  return a + 1
}
hoge(a);

ExtendedScript Toolkit を使ってコンパイルするとさらに早くなるかもしれないが、デバッグが面倒になるので私は使ってない。

11
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?