Illustratorで、たくさんのアートボードを自動で作るスクリプト(2)

※長いので2ページに分けてあります。
ここまでの経緯&そもそもイラレのスクリプトの作り方は?はこちら→
Adobe® Illustrator®は、Javascriptなどのプログラミングで自動化できます。
たくさんのアートボードを手入力で作るのが面倒なので、あらかじめCSVでリストアップして自動化してしまおう、というプログラムのお話です。
スクリプトの中身解説
スクリプトの中身は、だいたいこういう流れになっています。
ファイルダイヤログを開いて、CSVファイルを選んでもらう
↓
(*)一行ずつ、図版名・横寸・縦寸を読み取る
↓
(A) 座標を計算して、アートボードをつくる
↓
(B) ついでに、図版の名前をテキスト入力してアートボードの近くに置く
↓
(*)に戻って以下ループ…
以下、ポイントだけ説明します。
(A)アートボードをつくる
アートボードを作る命令は、これです。
newBoard = docRef.artboards.add ([locA, locB, locC, locD]);
[locA, locB, locC, locD]は、アートボードの座標です。
ちょいとややこしいのですが、座標の関係はこのようになっています。
[locA, locB, locC, locD] = [左端のX座標, 上端のY座標, 右端のX座標, 下端のY座標]
つまり、
C-A=横寸
D-B=縦寸
という関係になっています。
ふだんイラレをお使いの方には分かると思いますが、いつもは上への移動がマイナス数値ですね。でもここでのY軸は逆、です。原点(0の位置)は同じですが、下がマイナス数値です。混乱してしまいやすい感じなので、注意してください。
もうひとつの注意点は、単位がポイントであること。ミリ単位でリストアップしてある場合は変換が必要です。
1mm = 2.834645pt
で計算できます。
そして、
newBoard.name = nameHoge;
でアートボードに名前を付けられます。
今回はA4のシート内にお行儀よく並べたいので、そのあたりの計算を加えました。ループごとに縦寸を足していって、その数値が294mmを超えるときに右への座標を足し、縦の座標を上へ戻す、という感じのことをしてます。
(B)テキストを入力して、アートボードの近くに置く
テキストオブジェクトを置く命令は、これです。
textRef = docRef.textFrames.add();
あとは、属性を指示していくだけです。
textRef.position = [locLeft, locTop];//位置を左上端の座標で指示する
textRef.contents = nameHoge;//テキストの内容を入力
textRef.textRange.size = 12;//テキストのサイズ(pt)
今回はアートボードを作ったときに計算した座標を利用して、そこから文字の大きさ分だけ戻した位置にセットしました。
まとめ
以上、プログラムとしてはあまり難しいものではありません。これで毎回1時間以上かかる作業がなくなりますから、今回は少し時間がかかってでも作ってよかった!というわけです。
サンプルスクリプトをダウンロードできるようにしておきました。
A4サイズシートを並べた.aiファイルと、CSVファイルのサンプルもいっしょに入ってます。
スクリプトのプリセットフォルダに入れておいてメニューから選ぶか、あるいは任意の場所に置いておいて「その他のスクリプト」で指定すれば使えます。
尚、制作環境は次のとおりです。
- Mac OS X 10.6 Snow Leopard
- Adobe® Illustrator® CS5
参考サイト
- Illustrator Scripting
http://www.adobe.com/devnet/illustrator/scripting.html - Adobeの公式っぽいスクリプトガイド。リファレンス的な文書が置いてあります。
- イラレでべんり
- いろんなイラレ自動化スクリプトが置いてあります。
- Rubyist Magazine – Win32OLE 活用法【第4回】Adobe Illustrator
- テキストの入力や座標の指定など参考になりました。
はまったところ:
an Illustrator error occurred: 1346458189 (‘MRAP’)
というエラーが出て困った。どうやら、四角形の座標の整合性が取れてなかったりすると出るようです。例えば私の場合は、計算ミスで「右端のX座標 < 左端のX座標」になっちゃったりしてました。
※長いので2ページに分けてあります。
ここまでの経緯&そもそもイラレのスクリプトの作り方は?はこちら→