2015/01/26

【Illustrator】CSVを読み込んで .ai を量産する

ただただCSVから .ai をいっぱい作りたかったんです。
さくっと検索した範囲では、先にドキュメントを開いてたりテキストオブジェクトを用意してないといけなかったりで、
ちょっと違うなーと。

そういう経緯から、勉強がてらスクリプト書いてみました。
欲を言えばもうちょっと足を伸ばしてフォント指定とか字詰めとかにも踏み込みたかったんですが、とりあえずあっさりなところに踏みとどまりました。

言語は Extend Script
これは、JavaScript をAdobeさんが拡張したもの、っていうことでよいんでしょうか?
拡張子は .jsx 。xはエクステンドのxですかね。
illustratorに限らずPhotoshop、AftterEffects、InDesign、Premiereとファミリーみんな使えるようですし、なにげにすごいぞ jsx 。ただし日本語ドキュメントが略



環境は、
win7 sp1
illustrator CS6
です。


(▼)できたやつ。

W = 1280;
H = 720;

var csvFile = new File("path/to/csv_file.csv");
var flag = csvFile.open ("r","","");
if (flag){
  var tmp = csvFile.read();
  csvFile.close();
 
  var line = tmp.split("\n");
  for (i=0; i < line.length; i++){
    var cell = line[i].split(",");
    if (cell[1]){
      documents.add(DocumentColorSpace.CMYK,W,H);
     
      // make text object from csv cell
      textObj = activeDocument.textFrames.add();
      textObj.contents = cell[1];
      textObj.paragraphs[0].size = 30;
      textObj.paragraphs[0].paragraphAttributes.justification = Justification.CENTER;
      textObj.translate(W/2,H/2);
     
      // save document
      saveFile = new File("path/to/result_"+i+".ai");
      activeDocument.saveAs(saveFile,);
      // document close
      activeDocument.close(SaveOptions.DONOTSAVECHANGES);      }
    }
  }



上の方から軽めに解説していきたいと思います。

冒頭、作成するドキュメントのサイズを変数に入れてます。
なんか、「var」つけなくても通るもんなんですね!きっと行儀悪いんだろうなとか思いつつ通過()
ポイントで指定します。
mm で指定したかったんですが、300dpiらへん?で換算して結局ポイント指定みたいなので、
潔く、見慣れた数値をとりあえず入れました。ハーフHDですが、なにか狙いがあるわけではありませんでした。

ファイルオブジェクトを取得して 変数 csvFile へ代入。
read()メソッドで読んで 変数 tmp に入れたらたぶんもう使わないので close()。

.split("\n") で、改行ごとに分割して 変数 line で受け取り、forでまわしてます。

for の対象になる各行を、まずカンマで分割し(<csvなので。)
変数 cell へ代入。
ここではたまたま二番目のセルしか利用しないので、cell[1]しか登場しません。

documents.add() でイラストレータドキュメントを新規作成。
これをforループごとに実行することで、csv各行につき一つファイルを作成します。
したがって、実行時はイラストレータでは何も開いていなくて大丈夫です。イラストレータからっぽの状態で実行してください。

activeDocument.textFrames.add() で、ドキュメントにテキストオブジェクトを追加。
.contents のところがテキスト記入部分。
ここでcsvから受け取った文言をテキストオブジェクトに書き込みます。
それからフォントサイズを指定したり、センター揃えにしたり、ドキュメントの真ん中に移動させたり。

一通りおわったら、保存。
ファイルパスには "path/to/result_"+i+".ai" みたいに i かなにかそういうのを入れておかないと、
上書きし続けるだけの不毛な仕事をイラストレータに課すことになるので、
そういう健気な様子を見たいとき以外は、気をつける必要があります。

最後にアクティブドキュメントを閉じます。
この「新規」→「テキストオブジェクト作成」→「保存、閉じる」

…が、csvの行数分 forでぐるぐる回ります。

===================================

とりあえずここまで模索したところで、
なんか検索してパッと出て来ないあたり、「illustratorってこういう使い方するんじゃないんだろうなー(あとアクションとか変数とか使えばできるんじゃないかなー)」とかうすうす察知してみたり、
どうせバッチ処理的にUI無しで使うなら Inkspace っていうのもあるよ
っていう電波を受信しかけたのですが、着拒しました。ふぅあぶなかった

Adobeさんから提供されるExtendScriptToolKit (ESTK) もありますが、
今回はエディタでがりがり。ほんと非効率だなこれって思いながら書き進めました。
よくないですね。
だれかESTKの上手な使い方教えてくだしああーー▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂



■ 参考

Adobe Illustrator CS6自動化作戦
http://www.openspc2.org/book/IllustratorCS6/

Adobe CS1〜C6, CC バージョンJavaScript リファレンス&ライブラリ
http://www.openspc2.org/reibun/AdobeJS/

Illustrator Scripting
http://www.adobe.com/jp/devnet/illustrator/scripting.html
ここに全てがある。と思ったけどちょっとふるい。なぜなんだぜ?

IllustratorもJavaScriptで自由自在に!
http://ascii.jp/elem/000/000/453/453500/

IllustratorのJavascriptでテキスト、フォントを操作する
http://logic.moo.jp/data/archives/787.html

Adobe Illustrator CS6 Type Library
http://jongware.mit.edu/iljscs6html/iljscs6/


0 件のコメント:

コメントを投稿