今回も前回と同じネタです。ただし、今回のスクリプトはIllustrator CS3/CS4で、なおかつCMYKカラーモード用になっています。Illustrator CS3/CS4とCS5では原点の位置が異なるため、そのまま実行すると用紙サイズからはみだしてしまうことがあります。ここらへんは、基準となる座標を調整することで対処しています。
実際のスクリプトは以下の通りです。使い方は同じですが、用意するタブ区切りデータは以下のようにCMYK、4つの値で構成されています。0〜100%範囲であれば整数値でも小数値でも構いません。
●タブ区切りデータ
0 50 100 0
0 90 70 0
0 0 100 0
0 70 20 0
70 10 0 0
// カラーサンプルブロックを描画する(CS3/CS4, CMYK用)
var myFont = app.textFonts["Arial-Black"];
var defFont = app.textFonts["Helvetica"];
(function(){
if (app.documents.length == 0){
alert("ベースとなるドキュメントを新規に作成してください");
return;
}
var saveFolder = Folder.selectDialog("保存先のフォルダを指定してください");
if (!saveFolder){ return; }
var tabFile = File.openDialog("タブ区切りファイルを指定してください");
if (!tabFile){ return; } // キャンセルされたら何もしない
var flag = tabFile.open("r");
if (!flag){
alert("タブ区切りファイルが開けません");
return;
}
var baseX = 20;
var baseY = app.activeDocument.height - 50; // CS3/CS4
var boxW = 120; // 四角形の横幅
var boxH = 100; // 四角形の縦幅
var dx = 200; // 横の間隔(boxW + オフセット)
var dy = 200; // 縦の間隔(boxH + オフセット)
var count = 1; // ファイル名を示すカウンタ変数
// ファイルの終わりまで繰り返す
while(true){ // 最初に全てのパスなどを削除
for(var i=app.activeDocument.pageItems.length-1; i>=0; i--){
try { app.activeDocument.pageItems[i].remove(); }catch(e){}
}
for(var yy=0; yy<4; yy++){
for(var xx=0; xx<3; xx++){
var data = tabFile.readln().split(String.fromCharCode(9));
if (data.length == 0){ return; } // 空行の場合も終了
$.writeln(data[0]+","+data[1]+","+data[2]);
drawRect(baseX+xx*dx, baseY+yy*-dy, boxW, boxH, setColor(data[0], data[1], data[2], data[3]));
if (tabFile.eof == true){
saveFile(saveFolder.fullName+"/"+count+".ai");
return;
} // ファイルの終わり
}
}
saveFile(saveFolder.fullName+"/"+count+".ai");
count = count + 1; // 1つずつ増やす。ページ数に合わせて数値を変えてもOK
}
})();
// ファイルを保存する
function saveFile(filename){
var savefile = new File(filename);
activeDocument.saveAs(savefile);
}
// 指定した色で四角形と文字を描く
function drawRect(x, y, w, h, tempColor){
var layerObj = app.activeDocument.activeLayer;
// 上の大きい四角形を描く
var rect = layerObj.pathItems.rectangle(y, x, w, h/2);
rect.filled = true; // 塗りあり
rect.stroked = false; // 線なし
rect.fillColor = tempColor; // 塗りの色を指定
// 中央の四角形を描く
rect = layerObj.pathItems.rectangle(y-h/2-2, x, w, h/4);
rect.filled = true; // 塗りあり
rect.stroked = false; // 線なし
rect.fillColor = tempColor; // 塗りの色を指定
// 下の四角形を描く
rect = layerObj.pathItems.rectangle(y-h/2-h/4-4, x, w, h/4);
rect.filled = true; // 塗りあり
rect.stroked = false; // 線なし
rect.fillColor = tempColor; // 塗りの色を指定
// BLACKとWHITEの文字を描く
drawText(x+8, y-h/2-h/4+2, "BLACK", 20, myFont, setColor(0, 0, 0, 100));
drawText(x+8, y-h, "WHITE", 20, myFont, setColor(0, 0, 0, 0));
// RGBの文字と値を描画
drawText(x+w+4, y-12, "C "+tempColor.cyan, 9, defFont, setColor(0, 0, 0, 100));
drawText(x+w+4, y-22, "M "+tempColor.magenta, 9, defFont, setColor(0, 0, 0, 100));
drawText(x+w+4, y-32, "Y "+tempColor.yellow, 9, defFont, setColor(0, 0, 0, 100));
drawText(x+w+4, y-42, "K "+tempColor.black, 9, defFont, setColor(0, 0, 0, 100));
}
function setColor(c, m, y, k){
var tempColor = new CMYKColor();
tempColor.cyan = c;
tempColor.magenta = m;
tempColor.yellow = y;
tempColor.black = k;
return tempColor;
}
function drawText(x, y, str, fsize, font, color){
var textObj = activeDocument.textFrames.add();
textObj.contents = str;
textObj.paragraphs[0].fillColor = color;
textObj.paragraphs[0].size = fsize;
textObj.paragraphs[0].textFont = font;
textObj.translate(x, y);
}
[
サンプルをダウンロード]