Illustratorスクリプトのあれこれ

はじめに

こんにちは、イメージ・マジックのもあいです。
弊社開発部のメインはWeb(PHP/JavaScript/Css)なのですが、それ以外にも工場を効率的に稼働させるためにもいろいろ行っています。
今年になって、通常は人が手作業で行っているAdobe Illustratorの作業を自動化させようとして苦戦したことについて書いていきます。

オブジェクトを配置するための座標

ここは最後まで悩みの種でした。通常、PCやWebで座標の原点は左上となるのですが、Illustratorスクリプトでは左下となります。長年左上で考える癖がついていると座標計算には苦労しました。最終的には、Illustratorのアクションで真ん中に移動させることができるのと、それで問題が無いように処理する画像を作成することによって対処しました。

距離の単位がPt(ポイント)である

要求がmmやピクセルで表されるのですが、Illustratorではポイントで設定しなければいけないため、変換処理をいたるところに記述していたのですが、最終的には下記のような関数を定義して対処しました。

function convertUnit(num, before, after) {
    return new UnitValue(num, before).as(after);
}

当然ですが、印刷機の解像度(DPI)を考えないといけない場合は単純にはできません。

ドキュメントに載っていない、アクションを実行する

実際に動かして印刷機にデータを送信してみるものの、問題がたくさんでてきましたが、その中で一番困ったのはスクリプトではどうにもならなくてアクションだと問題無く処理ができるというとこ。
ドキュメントを見ているとアクションが実行できるようなメソッドが存在しません。(ただし、Photoshopにはドキュメントにあります)
いろいろ調べてみるとapp.doScriptというメソッドでアクションが実行できることがわかり、一部は対処可能となりました。

アクションでも完全に実行できるものと不完全に実行ができるものがある

アクションに登録すればapp.doScriptで実行はできるが、手動で実行したときとIllustratorスクリプトで実行したときに結果が異なることがありました。
これについては、解決できていないのですが、Illustrator以外で解決させるようにしました。

デバッグをする環境が非常に貧弱

Illustratorスクリプトをデバッグする環境として、Extendscript Toolkit CCというツールが一応存在します。ですが、導入するにはAdobe Createve Cloudアプリの設定で古いアプリケーションを表示にチェックを入れておかないと表示されないのと、app.documents.addでドキュメントを追加しようとすると動かなくなるという事象が発生してほとんど使い物になりませんでした。
従って、alertを入れてデバッグを進めるという非常に古典的な方法しか使えないのが大変でした。

最後に

工場を効率的に稼働させることができれば最終的には利益になるので、こういった作業はWelcomeです。使ったことのないものに触れるというのはそれなりに楽しいです。
今回初めてIllustratorスクリプトを触りましたが、デバッグしにくい等の問題も多くあり非常に大変でした。