FC2ブログ
QLOOKアクセス解析

DTPを快適に!

なにかと短時間作業を強いられることの多いDTPの仕事。この苦しみから少しでも解放されたい思いで、只今勉強中!javascript、applescriptの習得を中心にその他のチップス、素材のことなんかを書いていきます。

各行テキストおさめ by illustrator javascript

今日はillusutratorのjavascriptを一つご紹介。

私の仕事のメインは折込チラシの制作です。
いろんなチラシがある中で、中古のゲーム屋さんのちらしというのがあります。こいうお店のチラシはたいがい、表面が販売商品で、裏面が買取の価格表です。

この買取表には何百という数のゲームソフトが並んでますが、原稿はEXCELのリストで頂けるので、大助かりなのです。

しかし、ゲームのソフト名は短い名前もあったり、やたらと長い名前があったりするんです。
そんな長い名前も一行に収めなくてはならないため、今までは一つずつはみ出した物を探して長体をかけて一行におさめていました。
これがなかなかのイライラもので、、、

こんなチマチマした作業ができるかー�{というわけでscriptを作ってみました。

今回はエリア内文字のリストの各行を1行に収めるスクリプトです。

市販のillustratorのプラグインで組版ROBOというのがありますが、このプラグインの機能の一つに「テキスト自動調整」というのがあります。この機能はエリア内文字でエリアからあふれてしまった場合に、文字全てに長体をかけてエリア内に収めるというものです。
今回のスクリプトも同じように長体をかけていくのですが、改行コードまでの各行を1行に収めるという物です。

ちなみに、エリア内文字というのは四角などのパスの中に文字が入ってるやつです。

実際にはこんな感じになります。
テキストおさめ

わかりやすいように、制御文字を表示しました。(逆にわかりにくい?)
左が使用前、右が使用後です。
Pを反対に左右反転したような制御文字のところで改行となっています。
最初の「リラックマ・・・・」など、2行になってたものを1行に縮められています。

スクリプトはこんな感じです。


CRCODE=String.fromCharCode(13);
txtsplit=new Array();
txtw=new Array();
charaCount=0;


sel = activeDocument.selection;

txtRange=sel[0].textRange;
txt=txtRange.contents;


txtsplit = txt.split(CRCODE);


for(ii=0;ii{

txtRange.contents = txtsplit[ii];

for(w=100;w>=20; w -=10) //100%から10%ずつ縮める
{
for(i=0;i {
txtRange.characters[i].scaling=[w/100,1];
}

txtRow= txtRange.lines.length;

if(txtRow == 1)
{
txtw[ii] = w;
break;
}
}


if(txtw[ii]<100)
{
for(w=txtw[ii]+1; w<=txtw[ii]+10; w++) //さらに1%ずつ調製
{
for(i=0;i {
txtRange.characters[i].scaling=[w/100,1];
}

txtRow= txtRange.lines.length;

if(txtRow > 1)
{
txtw[ii] = w-1;
break;
}
}
}
}



txtRange.contents = txt;

for(ii=0;ii{
for(i=0;i {
txtRange.characters[i+charaCount].scaling=[txtw[ii]/100,1];
}
charaCount +=txtsplit[ii].length+1;
}


↓↓ここからダウンロード出来ます。右クリック等でお願いします。
「テキストおさめ.js」

使い方はエリア内文字を1つ選択状態にしてスクリプトを実行するだけです。

基本的にはみ出さない物は横100%となります。(設定できるようにすればよかった��G

はみ出す物は長体をかけていき、収まる所を探します。

最初は100%から1%ずつ縮めていくスクリプトを作ったのですが、1%刻みだとかなりの時間がかかってしまいました。

そこで90%、80%、70%、、、、20%と10%刻みで縮めていき、おさまったところで1%ずつ広げていく形としました。

例えば63%でちょうど1行に収まる場合は、
90%・80%・70%・60%と収まるところを探し
次に61%・62%・63%・64%でまたはみ出すので、63%で決定となります。

それでも上のサンプルで5〜6秒かかりました。(by G5)

実行時間の短縮は課題ですが、ほっておけばやってくれるし、私よりも見落としなしに正確にやってくれるので、大変助かってます。

書式(フォントやサイズ、色など)は全て、一番最初の文字に統一されてしまいます。
これも課題。でもかなり面倒なかんじです��G。。。。

上のサンプルは左揃えですが、中央揃えでも、両端揃えでも使えるので、ちょっとした表組みでも使えるかと思います。
使える用途のあるかた、ぜひおためしを