読者です 読者をやめる 読者になる 読者になる

Adobe Illustrator CSのjavascriptでの制御

javascript

Illustratorを自動化したい、なんて相談があったので、ちょっといじってみた。

基本的には、VBAのオブジェクトをいじるときにような感覚で問題なかった。
問題なかったのだけど、たとえば
activeDocument.textFramesの要素数はcountで返ってくるのかとか、どんな要素を持っているのか、といった情報がなくてサッパリわからなかった。

もうひとつやりづらかったのは、操作したいテキストエリアというかオブジェクトを、どうやっていじったらよいのかがわからない。TextAreaなのかTextRangeなのか、オブジェクトの情報を得る手段があってもいいと思うのだけど。

jashみたいなツールがないので、スクリプトを書いては実行して、と言う試行錯誤をするしかなくて、簡単なスクリプトなのに難儀した。デバッガないのかな?

やったのは、現在のドキュメントのTextFrameのコンテンツを、CSVから読んで置き換える、というだけ。なんだかCSVから読んでパースするあたりが気持ち悪いやり方をしているのだけど、スマートなやり方がわからなかった。。
これはIllustratorの問題じゃなくて、私のjavascriptの理解不足が原因だけど。

スクリプトでやってること

CSVからデータを読んで、既存のテキストを置き換えてPDFで保存。
行数分繰り返す。

課題

  1. CSVの列数が固定になっちゃうのだけど、これはパースライブラリがどっかにありそう。
  2. TextFrame内のテキストのフォントサイズや、フォントを変えたい。

参考にしたサイト

Illustrator CS自動化作戦 with JavaScript

//CSVファイルのデータでイラレのテキストを置き換える。

parseCSVandReplace();

function parseCSVandReplace() {
	//改行の文字コード設定
	CRCODE = String.fromCharCode(13);
	
	//CSVファイルを開く
	//CSVのファイル形式は、下記を想定。
	//最後の行は、空白行を想定してる。
    fileObj = new File("list.csv");
	flag = fileObj.open ("r","","");
	if (flag){
		txt = fileObj.read();
	}
	
	//CSVの行ごとにlineに入れる
	var line = txt.split('\n');

	//行データを","で分割するための正規表現
	var rgexp = /(.+?),(.+?),(.+?),(.+?),(.+?),(.+?)/ig;
	
	//CSV行ごとに、name.pdfというファイルに書き出し
	for(var ss = 0;ss<line.length-1;ss++){
		var tmp = line[ss].match(rgexp);
		
		//$1,$2は列の番号に対応
		var name		= RegExp.$1;
		var startday	= RegExp.$2;
		var endday	= RegExp.$3;
		var num	= RegExp.$4;
		var title		= RegExp.$5;

		//テキストを置き換える。
		activeDocument.textFrames[0].contents = ordernum;
		activeDocument.textFrames[1].contents = startday+" - "+endday;
		activeDocument.textFrames[3].contents = startday+" - "+endday;
		activeDocument.textFrames[4].contents = title +CRCODE;
		
		//PDF形式で保存する。
		pdfOpt = new PDFSaveOptions();
		pdfOpt.compatibility = PDFCompatibility.ACROBAT6;
		saveFile = new File(name+".pdf");
		activeDocument.saveAs(saveFile, pdfOpt);
		
	}
    return ;
}