クリエイター手抜きプロジェクト[337]Illustrator CS5/CS6編 カレンダースクリプト
── 古籏一浩 ──

投稿:  著者:


今回は、指定した年のカレンダーを作成するスクリプトでCS5/CS6用です。カレンダー生成のスクリプトは以前にも掲載しました。しかし、CS5以降では座標系が違うので期待通り動作しません。

そこで座標系の部分を修正し、さらにRGBカラー指定だったものをCMYKカラー指定にしました。休日等の色はコメントの「■↓一週間分の色(C,M,Y,K)」と書いてある下の行にある[0,0,0,100]の数値を変更してください。

数値は0〜100でCMYKの順番になっています。会社の創立記念日など、特別に休日を設定したい場合はコメントの「//■休日・祭日設定」の下の行に数値があります。この数値が祭日になっています。設定するには12,23の後に, 7, 11のように月と日付を,で区切って記述してください。




// Calendar Script for Adobe Illustrator CS5/CS6
baseX = 10; //■カレンダーの最初の表示位置(X座標)
baseY = 0; //■カレンダーの最初の表示位置(Y座標)CS5は左上が原点
calDX = 30; //■カレンダーの1日あたりの横幅
calDY = 30; //■カレンダーの1日あたりの縦幅
blockX = 250; //■1月あたりの横の差
blockY = 250; //■1月あたりの縦の差
txtColor = new CMYKColor();
docObj = activeDocument;
function calendar(theYear_,theMonth_){
var wrtMonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
var wrtDate = new Array("日","月","火","水","木","金","土");
//■↓一週間分の色(C,M,Y,K)
var wrtColor= new Array([0,100,0,0],[0,0,0,100],[0,0,0,100],
[0,0,0,100],[0,0,0,100],[0,0,0,100],[100,0,0,0]);
//■休日・祭日設定
var special = new Array(3,21, 9,23, 1,1, 2,11, 4,29, 5,3, 5,4, 5,5, 11,3, 11,23, 12,23);
var specCnt = 15;
var specCol = [0,100,0,0]; // 休日の文字色
var theDate = new Date(); // 日付オブジェクトを生成
specCnt = 13; // Happy Monday対策
if (theYear_){ // 年月が指定されていた場合は年月を再設定
theDate.setYear(theYear_); // 指定年を設定
theDate.setMonth(theMonth_-1); // 指定月を設定
}
theYear_ = theDate.getFullYear();
theMonth_= theDate.getMonth()+1;
if (((theYear_ % 4 == 0) && (theYear_ % 100 != 0)) || (theYear_ % 400 == 0)){
wrtMonth[2] = 29; // 閏年だったら2月を29日にする
}
// 春分/秋分の日を求める(1980-2099まで)
special[1] = Math.floor(20.8431 + 0.242194 * (theYear_ - 1980) - Math.floor((theYear_ - 1980)/4));
special[3] = Math.floor(23.2488 + 0.242194 * (theYear_ - 1980) - Math.floor((theYear_ - 1980)/4));
theDate.setFullYear(theYear_); // 指定年を設定
theDate.setMonth(theMonth_-1); // 指定月を設定
theDate.setDate(1); // 日付を1日にし曜日を次の行で取得
var count = theDate.getDay();
var day = 0; // 曜日カウンタを0にする
var date = 1; // 日付を1日にする
var flag = false; // 休日&日曜日フラグ
var hFlag = false; // 休日フラグ
var xFlag = false; // 成人の日/体育の日
var i,j;
var week = 0; // 2000年からの体育の日と成人の日対策
calX = 0; //■カレンダーを表示する相対座標(X)
calY = 60; //■カレンダーを表示する相対座標(Y)
drawColor([0,0,0,100]); // 色の初期化
write(theYear_+"年"+theMonth_+"月", 95, 0); // 相対座標(95pt,0pt)に描画
for(i=0;i<7;i++) { write(wrtDate[i], 0+i*calDX, 30); } // 曜日書き出し
flag = false; // 休日が日曜日だった場合true
for(i=1;i<=wrtMonth[theMonth_]+count;i++){
hFlag = false; // 休日だったらtrue
if (day>=count){
wrt = ""+date;
for(j=0; j<specCnt; j++){
if ((special[j*2] == theMonth_) && (special[j*2+1] == date)){
drawColor(specCol);
if ((day % 7) == 0) { flag = true; } // 休日が日曜日だったらtrue
hFlag = true;
}
}
date++;
if ((day % 7) == 1) { week++; } // 月曜日の場合は週の数を増やす
}else{ wrt = " "; }
// 1月と7月と10月の休日処理(Happy Mondayの処理)
var xFlag = false;
if ( ((theMonth_ == 1) || (theMonth_ == 10)) && (week == 2) && ((day % 7) == 1)) { xFlag = true; }
if ( ((theMonth_ == 7) || (theMonth_ == 9)) && (week == 3) && ((day % 7) == 1)) { xFlag = true; }
if (xFlag){
drawColor(specCol);
}else{
if ((hFlag == false) && flag == false) { drawColor(wrtColor[day % 7]); }
if (((day % 7) == 1) && flag == true) { drawColor(specCol); flag = false;}
}
drawBox(calX, calY); //■枠を表示する部分。しない場合は行ごと削除
write(wrt, calX, calY);
calX += calDX;
if (day % 7 == 6) { calX = 0; calY += calDY; }
day++; // 1日増やす
}
}
function drawBox(x, y){ // 枠を描く
var pObj = docObj.pathItems.rectangle(0,0,calDX,calDY);
pObj.translate(baseX + x - 15,baseY-y+calDY-9); //■ここで位置を微調整
pObj.filled = false; // 塗りなし
pObj.stroked = true; // 線あり
pObj.strokeWidth = 0.2; // 線幅0.2ポイント
pObj.strokeColor = setColor(0,0,0,100); // 線の色を指定(黒色)
}
function write(txt, x,y){
var textObj = docObj.textFrames.add();
textObj.contents = txt;
textObj.translate(baseX + x, baseY - y);
for (var i=0; i<textObj.characters.length; i++){
textObj.characters[i].fillColor = txtColor;
}
textObj.paragraphs[0].justification = Justification.CENTER;
}
function drawColor(col){
txtColor.cyan=col[0];txtColor.magenta=col[1];txtColor.yellow=col[2];txtColor.black=col[3];
}
function setColor(c,m,y,k){
var tmpColor = new CMYKColor();
tmpColor.cyan = c;tmpColor.magenta = m;tmpColor.yellow = y;tmpColor.black = k;
return tmpColor;
}
(function(){
calYear = prompt("作成する年を入れてください",2012);
if (!calYear){ return; }
storeX = baseX;
cal = 1;
for (cy=0; cy<4; cy++){ //■縦に4つ
for (cx=0; cx<3; cx++){ //■横に3つ
calendar(calYear, cal);
baseX += blockX;
cal++;
}
baseX = storeX;
baseY -= blockY;
}
})();


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

今年もあと一か月でおしまい。夏に購入したゲームは少ししか遊べず。まあ、流行のゲームではなく大昔(1980年代のRPG)なので、パソコンがあればいつでも楽しめるのですが。昔のゲームをiPadとかに移植するのは歓迎ですが、いかんせん操作性が駄目で結局遊ばずに終わってしまうという空しいオチに......。

・Kindle(Paper White)使い方辞典
< http://www.openspc2.org/reibun/Kindle/paperwhite/
>

・kobo glo 使い方辞典
< http://www.openspc2.org/reibun/kobo/glo/
>

・iPad mini(アイパッドミニ)使い方辞典
< http://www.openspc2.org/reibun/iPad/mini/2012/
>

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>

・すべての人に知っておいてほしい jQuery & jQuery Mobileの基本原則
< http://www.amazon.co.jp/dp/4844362984
>

・HTML5ガイドブック 増補改訂版
< http://www.amazon.co.jp/dp/4844332937
>

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>

・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199
>

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。