InDesignでJavaScript その20
InDesignでJavaScript その20。

久しぶりにJavaScriptをアップしようか、と思い立ち。
前から書こう書こうと思ってめんどくさくて放置してたJavaScript。

●仕様
Scriptを起動するとますダイアログが表示されるので拡張子.inddのファイルのあるフォルダを選択。
次に表示されるダイアログでEPS保存先のフォルダを選択。
すると最初に選んだフォルダ内の拡張子.inddのファイルを開いて指定した保存先にEPSを保存する。
EPSの仕様は
・TIFFプレビュー
・PostScript 3
・ASCIIフォーマット
・ブリードなし(仕上がりサイズ)
・CMYKカラー

保存先のパスを生成する際にアクロバティックな処理してますが、不本意です(^^;
なんとなくOS Xの「濁点・半濁点が分離しちゃうよ」仕様のが原因な気もしますが、スラッシュをコロンに替えれば動くので、とりあえず。
そのうち原因究明します。
続きを読む
【2008/02/13 16:36 】 | JavaScript | コメント(2) | トラックバック(0) | page top↑
InDesignでJavaScript その19
InDesignでJavaScript その19。

お仕事で大量のファイルのスタイルを統一しなくちゃいけなくて作ったやつ。
スタイルを読み込みたいファイルを選択して、次にスタイルを更新したいファイルのあるフォルダを選択すると、スタイルを取り込んでくれる。
フォルダ選択にしたのは複数ファイルのエイリアスを一括で処理したかったから。
あ、あと同じスタイル名で作り込んでおかないと意味ないです。

基本このJavaScriptの中に統一後の処理を書いてあることが前提です。
スタイル統一しっぱなしってわけにはいかないしね。
具体的にはオーバーフローチェックとか、フレーム拡大とか入れてみると楽しいですよ。
せうぞーさんの言葉をお借りすると「幸せになれます」(笑)
続きを読む
【2007/10/10 13:37 】 | JavaScript | コメント(0) | トラックバック(0) | page top↑
IllustratorでJavaScript その2
IllustratorでJavaScript その2。

ちょっと必要に迫られてIllustratorCS2でJavaScriptのお勉強。
なぜInDesignと用語を統一してくれないのかと軽く憤りを感じたり。
突き詰めればいろいろできるんだろうけど、ページものメインの私としてはInDesign優先にならざるを得ないというのが正直な感想。

さて。
書いてみたのは「テキストフレームに文字を流し込む」というシンプルなもの。
これだけでも結構時間を食ってしまった。

まず、テキストフレームに名前をつける。
IllustratorにはInDesignのような「スクリプトラベル」ウインドウが実装されていないので、オブジェクトに名前をつけるところからJavaScriptで書かないといけない(鬱)
スクリプトは下記。


//選択しているオブジェクトにhonbunという名前をつける
var docObj = activeDocument ;
var nameObj = docObj.selection ;
nameObj.name = "honbun" ;


この短いスクリプトでさえもInDesignとの違いに戸惑わされました(^^;
まぁね、リファレンスとか読めばわかるんですけどね、でもね、あんなの読み解けない訳ですよ。
で、どこで戸惑ったかというと。
InDesign:app.activeDocument → Illustrator:activeDocument
InDesign:app.selection[0] → Illustrator:docObj.selection
また微妙に違うから腹が立つんだな、これが。
盛大に違ってくれればむしろ覚えやすいのに〜。

で、名前を付けたオブジェクトに文字を流し込むスクリプトは下記。


//文字を流し込む
var docObj = activeDocument ;
//とりあえずフレーム総当たり
for (i = 0 ; i switch (docObj.textFrames[i].name) {
case "title" :
docObj.textFrames[i].textRange.contents = "titleだよ" ;
break ;
case "honbun" :
docObj.textFrames[i].textRange.contents = "honbunだよ" ;
break ;
case "number" :
docObj.textFrames[i].textRange.contents = "00" ;
break ;
default : break
}
}


あとはテキストを1行ずつ読み込んで、とかやればそれなりにできそう。

やってみた結果、決定したこと。
「IllustratorでJavaScriptはやりません!」(苦笑)
【2007/10/03 18:22 】 | JavaScript | コメント(0) | トラックバック(0) | page top↑
indesignでJavaScript メモ書き
indesignでJavaScript メモ書き。

基本的なことをメモ書き(07.09.21更新)



●ラベルつきオブジェクトを選択するには
var preTumeG = docObj.pageItems.item("titlegroup");
preTumeG.select();
var preTumeGSelecton = app.selection[0];


●オブジェクトを削除するには
preTumeGSelecton.remove() ;


●ライブラリの読み込み&登録されたアイテムの配置は
var docObj = app.activeDocument;
var LibName = "ライブラリ.indl"
var myLibraries = app.libraries;
if (myLibraries.length == 0){
alert(LibName + "を開いてください。");
return;
}
try{
var myLib = myLibraries.item(LibName);
}
catch(e){
alert(e);
alert(LibName + "を開いてください。");
return;
}
//ライブラリ内のアイテム選択
var myAsset = myLib.assets.item("アイテム名");
var myObjArray = myAsset.placeAsset(docObj);
//ページ内に配置
var myObjGroup = myObjArray[0];
//配置したオブジェクトを確定させる
app.selection = myObjGroup.parent;


●テキストファイルを1行ずつ読み込むには
filename = File.openDialog("テキストファイルを指定してください");
if (filename) {
fileObj = new File(filename);
//ファイルを読み込みモードで開く
flag = fileObj.open("r");
if (flag == true) {
//テキストの終わりまで{}の処理を続ける
while (!fileObj.eof) {
//ファイルを1行だけ読み込む
line = fileObj.readln();
//空行(改行のみ)じゃなかったら
if (line != "") {
ここに処理を書く
}
}
}
}


●画像を貼り込むには
txtObj = pageObj[0].textFrames.add();
txtObj.visibleBounds = ["10mm","10mm","100mm","100mm"];
txtObj.contentType = ContentType.graphicType;
imageFile = "フルパス";
txtObj.place(imageFile);
//ボックスにフィット(変形)
txtObj.fit(FitOptions.centerContent);
}


●画像を相対的に移動させるには
var mydocument = app.activeDocument;
var myobj = mydocument.pageItems.item("hoge");
myobj.select();
myobj.place("System:Users:yokota:Desktop:A01_P1.eps");
//画像を現在の位置から相対的に移動させる
myobj.graphics[0].move("by",["5mm","10mm"])


●ページのルーラーを変更するには
//ドキュメントのrulerOriginを保存
var oldRular = docObj.viewPreferences.rulerOrigin ;
//ドキュメントのrulerOriginをページに変更(10進法で指定)
docObj.viewPreferences.rulerOrigin = 1380143983 ;//ページ
docObj.viewPreferences.rulerOrigin = 1380143984 ;//ノド元
docObj.viewPreferences.rulerOrigin = 1380143983 ;//スプレッド


●オブジェクトを絶対値で移動させるには
move([x,y]);//"to"や"by"はつけないほうがいいみたい


●グループされたオブジェクトの中のオブジェクトを選択するには
//グループ化されたアイテムを選択しておく
var nexTumeGSelecton = app.selection[0];
//pageItemsで入れ子の中に潜っていける
nexTumeGSelecton.pageItems.item("hoge").select();


<以下07.07.18追記>


●フォルダ中のファイルを一括取得
var folderObj = Folder.selectDialog("一覧にしたい画像のあるフォルダを選択してください") ;
var fileListEPS = folderObj.getFiles("*.eps") ; //EPSファイルを配列化


●Folder.selectDialogなどで取得したものをデコード(OSXだと濁点とか文字化け)
//取得したファイルをデコード
var capKakou = pictureList[p] ; //pictureListにはエンコードされたフルパスが入っているとする
var decodePath = decodeURI(capKakou)
var capKakouArray = decodePath.split("/") ;
var capContents = capKakouArray.pop() ; //配列の最後を取得


●マスターアイテムのオーバーライド
var myPage = app.activeDocument.pages[i]; //for文で回すことを考えて[i]のまま
//アイテムのオーバーライド処理(ラベルの有無判断付き)
var myObjects = myPage.masterPageItems
for (h = 0 ; h if (myObjects[h].label != "") { //ラベルがついてなかったら
//アイテムをオーバーライドする
myObjects[h].override(myPage);
}
}


●XMLからキーを取得しラインのカラーを変更
//XMLタグからコマのテーマカラーのキーを取得する
var komaColor = docObj.xmlElements.item("Root").xmlElements.item("record").xmlElements.item("EL地方").contents ;
komaObj.pageItems.item("sen").select() ;
var frameStrokeColor = app.selection[0] ;
frameStrokeColor.strokeColor = docObj.swatches.item(komaColor) ;


<以下07.09.20追記>


●段落スタイルと文字スタイルを読み込む
docObj.importStyles(ImportFormat.paragraphStylesFormat, myStyleFile);
docObj.importStyles(ImportFormat.characterStylesFormat, myStyleFile);


●テキストフレーム内天地センター
myItems.textFramePreferences.verticalJustification = VerticalJustification.centerAlign


●特定の文字に特定のスタイルを適用
//こむぎさんの「正規表現検索スタイル適用 (履歴付き)2006.08.26版」を
//一部(というかほとんど…)利用させていただいています
//感謝感謝
function applieStyleAtMatchString()
{
myFrame = app.selection[0]
var regexpArray = ["「","『","【","(","[","{","‘","“","〈","《","〔"] ; //配列化
// 選択中のTextFrameの行の集合を取り出す
myParagraphs = myFrame.paragraphs;
// 各行を処理対象に
for(j = 0; j < myParagraphs.length; j++)
{
// 選択中のTextFrameから1行テキストを取り出し
txtObj = myParagraphs.item(j).contents;
// 行末が改行だったら、処理対象行から改行を除く
// これにより、行末からのインデックスを使うと一つずれるので注意
if(escape(txtObj.substr(txtObj.length - 1, 1)) == "%0D")
{
txtObj = myParagraphs.item(j).contents.substr(0, txtObj.length - 1);
}
for (r = 0 ; r startPos = txtObj.indexOf(regexpArray[r]) ;
while (startPos != -1) {
//マッチした文字の数
matchStringLen = RegExp.lastMatch.length;
//マッチした文字列にスタイルを適用
myFrame.paragraphs.item(j).characters.itemByRange(startPos, startPos + matchStringLen - 1).appliedCharacterStyle = newStyle;
// マッチした文字列に同じものがあるとindexOf()が機能しないので
// マッチした次の文字を検索開始位置にする
startPos = txtObj.indexOf(regexpArray[r], startPos+matchStringLen) ;
}
}
}
}


●貼り込む画像数と1ページあたりに貼り込まれる数からページ数を計算
var EPSLength = 10 ; //総数
var komakazu = 10 ; //1ページあたりの数
if (EPSLength % komakazu != 0) { //余りがあれば(割り切れなければ)
var allPage = Math.ceil(EPSLength / komakazu) ; //総ページ数(小数点以下切り上げ。.0も切り上げるから注意)
} else {
var allPage = (EPSLength / komakazu) ;
}


<以下07.09.21追記>


●テキストファイルの中身を一気に取得(行数カウントも含む)
//テキストを一気に読み込むついでに行数も数えておく
var regObj = new RegExp(LF,"g"); //正規表現で目的の文字を探す
var fileObj = new File(fileListTEXT[t]);
var flag = fileObj.open("r") ; //ファイルを読み込みモードで開く
if (flag == true) {
var lineAll = fileObj.read() ; //ファイル内容を一度に読み込む
var LFCount = lineAll.match(regObj) ;
//今回のコメント数
if (LFCount == null) { //1行しかなかったら
var comment = 1; //LFの数を数える(最終行に改行がないため+1する)
} else {
var comment = LFCount.length + 1; //LFの数を数える(最終行に改行がないため+1する)
}
}
fileObj.close();
【2007/09/20 17:05 】 | JavaScript | コメント(0) | トラックバック(0) | page top↑
InDesignでJavaScript その18
InDesignでJavaScript その18。

mixiには載せてたんだけどこっちには載せてなかったので。

InDesignをJavaScriptで動かしてカレンダーを作ってみた。
正味1日ぐらいかかったけど(仕事の合間に思いつきで書き進めていったから、のべ1週間ぐらいはかかっているんだけどね)。
これで次の仕事のカレンダー作成はわりと楽なはず。






まずエクセルで上の画像のようなシートを作る。
各月が何曜日から始まっているか、何週間あるか、何日あるか、を算出。
大した計算はしてないけど(^^;

次にInDesignで下の画像のようなカレンダーを作成(数字はもちろん入ってませんよ)。
各日のテキストフレーム、フレームを横一列でグループ化したもの、月のテキストフレーム、これらをグループ化したもの、それぞれにスクリプトラベルをつける。
各日のテキストフレームは0〜6の繰り返しでつけておく(1〜31ではない)。

あとはポチっとして、テキストを選択してOKしたら、カレンダーができてます。

左のエクセルに様々な情報を加えておけば結構いろいろ応用できると思う。
続きを読む
【2007/07/18 18:51 】 | JavaScript | コメント(0) | トラックバック(0) | page top↑
| ホーム | 次ページ