FC2ブログ
QLOOKアクセス解析

DTPを快適に!

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

カテゴリー "javascript" の記事

Illsutratorオーバープリント検索(2)

今回つくりましたオーバープリントの検索スクリプトをご紹介します。

「検索」とありますが「解除」もできます…ある程度。

Illsutratorオーバープリント検索(1)で説明したように、
アピアランスやシンボル、ブラシ等にオーバープリントが含まれている場合は処理できません。

方針としては「あるかないか」そして「どこにあるのか」です。

続きを読む

スポンサーサイト

Illsutratorオーバープリント検索(1)

再度、オーバープリントの自動処理に挑戦してみました。
結論から言うと残念ながら、
またも無条件オーバープリント全解除は出来ませんでした。

ただ、回避策として、解除ではなくオーバープリントの位置を探すことに、
方針転換しました。

そのためには、不本意ながら、ひと手間お願いしたいのが、
アピアランスを手動で分割していただくことです。

それを皆さんは受け入れてくれるでしょうか?

続きを読む

各行テキストおさめ 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。。。。

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

Illustrator javascriptの教科書 & 取扱い注意

今日は本の紹介を・・・

私はillustratorでのjavascriptの基本をこの本で学びました。

古旗一浩さんという方がかかれている
「Illustrator10自動化作戦with JavaScript」という本です。


基本的な実例がたっぷりと掲載されてます。
私はscriptを作るときはまず、この本を横に置いてとりかかります。
この方のサイト「OPEN SPACE」にも、この実例と基本的な説明が載っています。

じゃ本いらない?.....私の場合、やっぱり本がいいです。検索&コピペはできないですが、見やすさはネットに間違いなく負けません。


しかし、上のアマゾンのリンク先を見てみると、
「この本は現在お取り扱いできません。」
なんてでてきます。
この本、絶版なんです。何年も前に、

illustratorのjavascriptを扱った本なんて他に無いんですよ。この本以外。(月刊誌の記事的なのはありますが...)

で、この本随分前から欲しかったんです。
ですが、絶版

それでしたことの一部として
1)ネットでひたすら検索。
・・・・・・・・・・・・どこも「在庫なし」マーク

2)ブックオフオンラインで入荷まち
・・・・・・・・・・・・ブックオフのサイトで、入荷するとメールで知らせてくれるサービスがあるんです。何ヶ月か(1年近く?)たちましたが、何の反応もありません。
 ※ブックオフオンラインさんからコメントを頂きました。
  「発行後3ヶ月以上のパソコン雑誌、発行後3年以上の参考書などは、買取対象外」とのこと...ということで買取がないものは入荷するわけがないということのようでした。解決


3)ヤフオク
・・・・・・・・・・・・オークションにたま〜にでてます。一度、挑戦したのですが、あまりにも値段が上がりすぎて、定価の倍以上に.........あきらめました。でも定価ぐらいで、落ちることもあるようです。

4)図書館
・・・・・・・・・・・・図書館って読みたい本があると、他の図書館から取り寄せて貸してくれたりするんですよ。....しかし、どこにも無いと言われました。工業大とかの図書館にはありそうだけど......。

こんな感じで探してて、ふとした拍子に見つけました。
先程の「取扱いできません」アマゾンです。

アマゾンって、新品以外に「中古商品」も売ってるんですね。この場合つまり古本です。
正確にはアマゾンが売ってるんじゃなく、アマゾンが他の業者や一般の売りたい人に売り場を設けてるんです。

そこでゲットしました。本の代金1900円、本の場合の配送料340円、あわせて2240円でした。
とってもヤニ臭い本でしたが..........。(ニオイをとるのに、ネットで調べた方法で3日ぐらいかかりました。)

このブログを書いている現時点では、残念ながら中古商品が0のようです。探している人は気長に確認を。

あっ、もう一つ問題を忘れていました。
この本、すごくためになるんですが、内容が古いんです。(だから絶版なのか?)

この本はIllustrator10を対象にしたjavascriptがかかれているので、今ここにかかれているとおりに、CS以降で動かそうとすると、エラーが出てしまうものが多いんです。(ほとんど?)
特に文字関係の構文が変わってしまってるので、そこをふまえつつ、変換作業が必要になります。

最初に書いた古旗一浩さんのサイトには、CS1、2、3、4についても説明&実例が書いてあるのでものすごく参考になります。

Illustratorのjavascriptって、需要が無いんですかね。
どなたか、新しい本を書いてくれるといいんですが.......。

複数画像並べて配置 by illustrator javascript

illustratorCSの頃からなんでしょうか? 画像をファインダーやBridgeからドラッグ&ドロップで配置可能になりました。それも複数!これは便利bikkuri01

ちなみにですが、私は使い始めの頃、リンクで配置したいのに埋め込みになったり、ならなかったりして、これは使えないbikkuri01とずっと思っていました。
何かの時に、ネットで見つけました。「Caps lock」です。
CapsをOnにしておくと埋め込み、Offにしておくとリンクになるようです。これで一気に使える機能になりました。これって常識?

でも、この使える機能、使っていると人間欲がでるもので、もう少し便利にならないかなと、思ってしまうわけです。
それは、複数を一気に配置する時です。複数配置が今まで出来なかったので、便利になってはいるのですが、一気にドラッグすると、同じ所に重なって配置されるのです。それも大きいのも小さいのも。

これを結局、大きさをそろえつつ、一つ一つめくりながらタイル状に並べてる私です。
これはjavascriptでつくらなければ�s�[�X
というわけで初めからタイル状に配置するスクリプトを作ってみました。
ただし、ファイル形式をとりあえず、epsのみとしました。

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

docObj = activeDocument;
sel = activeDocument.selection;

if(sel.length == 1){

Xo = sel[0].left;
Yo = sel[0].top;

Sw = sel[0].width;
Sh = sel[0].height;

slt = 0.2; //隙間の比率


Pfolder = Folder.selectDialog("画像フォルダを選択して下さい","" );

if (Pfolder != null){
Plist = Pfolder.getFiles("*.eps");

A = Plist.length; //画像の数

Ay = Math.round(Math.pow(A*Sh/Sw,0.5)); //縦に並べる数
Ax = Math.ceil(A/Ay); //横に並べる数

Pmaxw = Sw/(Ax+(Ax-1)*slt); //画像の最大幅
Pmaxh = Sh/(Ay+(Ay-1)*slt); //画像の最大高さ

for(i=0;i < A;i++){
Py = Math.floor(i/Ax);
Px = i-Py*Ax;

Pfile = new File(Plist[i]);

Phaiti = docObj.placedItems.add();
Phaiti.file = Pfile;
Phaiti.position = [Xo+Px*(1+slt)*Pmaxw,Yo-Py*(1+slt)*Pmaxh];

Porgw = Phaiti.width; //画像の元の幅
Porgh = Phaiti.height; //画像の元の高さ

if(Pmaxw/Pmaxh < Porgw/Porgh){ //幅基準
Phaiti.width = Pmaxw;
Phaiti.height = Pmaxw*Porgh/Porgw;
}else{ //高さ基準
Phaiti.height = Pmaxh;
Phaiti.width = Pmaxh*Porgw/Porgh;
}
}
sel[0].remove();

}

}else{
alert("画像配置範囲となるオブジェクトを1つだけ選択して、再度実行して下さい");
}

↓↓ここからダウンロード出来ます。右クリック等でお願いします。
「複数画像並べて配置.js」

このブログでは「.jsx」形式がアップできなかったので「.js」としました。
(・・・・・誰か違いをおしえて!)

◆使い方
★まず、スクリプト実行前に、画像を並べる範囲を指定します。これは四角等のオブジェクトを描くことで範囲指定としました。オブジェクトは丸でも星形でもいいのですが、そのオブジェクトの幅と高さの範囲に画像を並べていきます。
オブジェクトを描いたらそれを選択状態にしておきます。

★選択したままスクリプトを実行します。
 javascriptの基本的な実行の仕方は以前のエントリーを見て下さい。

★画像の入ったフォルダの場所を聞かれますので、指定して下さい。

★すると、オブジェクトで指定した範囲に画像が並びます。オブジェクトは不要なので削除されます。

◆スクリプト概要
画像の並び方は、画像と画像の間にある程度すき間をとりながら、指定した範囲内で画像が大きく取れるようにしました。(この計算がちょっとやっかいでした��G
オブジェクトの縦横比にあわせて、画像の数だけマス目をつくり、そのマス目にあわせて、縦長だったり横長だったりする画像を拡大縮小して納めています。
並び順はファイル名順に左上から右へ、右端まで行くと下の段へとなります。

最初の方でとりあえずepsだけと言いました。
11行目(空行のぞく)に「Plist = Pfolder.getFiles("*.eps");」とあります。
これは拡張子epsのファイルだけを抽出している文です。例えばこのepsをpsdとすると、psdでも可能となります。

私的には普段epsぐらいしか使わないので、epsなのですが、ここで困ったことが。
私はずっとmacを使いDTPをやっていて、お客様(印刷会社等)からも画像データを頂くことが多々あります。macを使っている人には拡張子の感覚がほぼゼロの方がいらっしゃいます。なので、epsもaiも拡張子がついていないことがよくあります。
自分もmac使いなのでそこは否定しないのですが、このscriptを実行する上では問題となりました。

先ほどの「Plist = Pfolder.getFiles("*.eps");」を「Plist = Pfolder.getFiles();」とするとすべてのファイルとなります。
これで実行すると
「.DS_Store」ファイルの形式では配置できません。

とエラーがでます。
mac osxではすべてのフォルダに「.DS_Store」という不可視ファイルが入ってます。
これが引っかかってしまうのです。

解決策
1.「.DS_Store」を無視する方法
2.拡張子なし画像ファイルを抽出する方法
3.その他

どなたか教えて下さいjumee��whyR

これでも1分ぐらい短縮になるでしょうか?

p.s. ブログのCSSテンプレート変えました。スクリプトをのせるのに横幅とりたかったので。そのうち、このあっさりとしたテンプレートを自分なりに変えたいのですが......