Illustrator 10で価格や商品写真などを自動配置

 広告やダイレクトメールなどで商品の写真入り+価格や宣伝文句などを入れることがあります。それなりのコストをかけて全自動に近い状態でできる所ならよいのですが、そうでない場合には何となく手作業で文字を入力したり(またはコピー&ペースト)しなければなりません。
 さすがに、それでは面倒です。しかし全自動で配置してしまってはデザイン上の都合もあって、という場合には半分自動で処理させておいて、必要な部分だけ手作業で行えば問題なし(?)。今回のスクリプトは商品の写真や見出し、価格などを自動的に配置します。

x = 0; // 表示するX座標
y = 600; // ■表示する開始Y座標
bw = 170; // ■枠の横幅
bh = 100; // ■枠の縦幅
CRCODE = String.fromCharCode(13); // 改行コード
TABCODE = String.fromCharCode(9); // タブコード
fileObj = new File("/data.txt"); // ■ファイルのパス
if (fileObj.open("r","","")) {
docObj = documents.add(); // 新規書類作成
Line = (fileObj.read()).split(CRCODE);
for (i=0; i<Line.length; i++) {
Data = Line[i].split(TABCODE);
(docObj.pathItems.rectangle(0,0,bw,bh)).translate(x,y); // 外枠を描く
if (Data[5]) { // ■画像を配置する
pItem = docObj.placedItems.add();
pItem.file = new File("/image/"+Data[5]); // ■画像のあるパス
pItem.width = 60; // ■配置画像の横幅
pItem.height = 60; // ■配置画像の縦幅
pItem.position = [x,y]; // 画像の位置
}
setText(x+6,y-45,Data[0],6); // ■小見出し
setText(x+6,y-60,Data[1],12); // ■品名
setText(x+6,y-70,Data[2],6); // ■詳細
setText(x+6,y-80,Data[3],6); // ■入り数「200g×6個」
setText(x+75,y-96,Data[4],24); // ■金額
y -= bh;
}
}
function setText(xx,yy,txt,tSize) { // 文字表示設定
var tObj = docObj.textArtItems.add();
tObj.contents = txt;
tObj.translate(xx,yy);
(tObj.textRange()).size = tSize; // 文字サイズ
}

 ちなみに、このスクリプトはIllustrator 10では動作しますが、Illustrator CSでは動作しません。
まず、商品の情報が入ったテキストファイルを用意します。このファイルの名前をdata.txtとしてボリュームのルート(一番上の階層)に保存します。文字コードはSHIFT JIS、改行コードはCR (Macのもの)にします。
 このdata.txtの中身は以下のようになっています。

問屋ギフト CD-40E ブルマン・ブレンド 200g×6個入 4200円 1.eps
問屋ギフト AD-240E ブルマン・ブレンド 100g×7個入 2000円
問屋ギフト CD-112 ブルマン・ブレンド 150g×8個入 2600円 2.eps
問屋ギフト CX-90B ブルマン・ブレンド 120g×9個入 4000円
問屋ギフト CW-R22 ブルマン・ブレンド 180g×10個入 3250円

 商品情報などは「タブ」で区切られています。6番目のデータは配置する画像ファイル名です。画像ファイル名はあってもなくても構いません。ない場合は画像は配置されないだけです。エクセルで作成してタブ区切りテキストで保存するのが楽で良いでしょう。その場合、文字の前後に"(ダブルクオーテーション)が付く事がありますが、それを削除するような処理は行っていません。手作業で削除してください。(プログラムを改良すれば自動的に処理できますが)

 スクリプトのコメント部分の先頭に■がついてる部分の行は数値などを変更しても構わないところです。枠サイズや位置などは全て「ポイント単位」になります。mmやcmは使えないのでポイントに変換した値を指定してください。

 画像データのあるフォルダはボリュームのルート(一番上の階層)にimageという名前にしてください。そのフォルダ内に1.epsや2.epsなどの画像ファイルを入れます。画像フォルダの名前を変えたい場合には以下のスクリプト部分のimageという部分を変更してください。

pItem.file = new File("/image/"+Data[5]); // ■画像のあるパス

 次に配置する文字ですが以下のように書かれています。

setText(x+6,y-45,Data[0],6); // ■小見出し

 最初のx+6は枠の左からの位置、y-45は枠の上からの位置になっています。いずれも単位はポイントです。Data[0]というのは商品情報の文字列です。

問屋ギフト CD-40E ブルマン・ブレンド 200g×6個入 4200円 1.eps

 とある場合にはData[0]とすると問屋ギフトの文字になります。Data[1]だとCD-40Eです。最初が0から始まります。
 最後の6は文字のサイズです。これもポイント単位で指定します。

 あと、改行コードの都合上、Windowsでは期待通り動かないかもしれません。また、MacOS Xの場合にフォルダ名とファイル名に日本語が含まれていると動きません。

 実際には文字の色を指定したり、より自動化したりすることになりますが、とりあえずざっとデータを配置するだけでも作業が楽になるのではないでしょうか。商品情報をエクセルデータでもらうか掲載するものをリストアップするような形にした方がいいかもしれません。



[サンプルをダウンロード]