InDesignのjavaScriptで
IndesignのCS2、Mac OSX(10.3.4)で作業しています。
スクリプトラベル設定したものにテキストと画像を流し込むスクリプトなのですが、現状単ページにしか動作できないためこれを複数ページに渡って処理を行いたいのですが、その場合はどのように処理を行えばよいでしょうか...
・2pページと3pにラベル設定したオブジェクトを置いています。
・2pの処理が終わったら3pに続きから処理を行う
スクリプトも始めたばかりでなかなかうまくいかず・・・ご指導頂けたら幸いです。
以下現状のスクリプトです
(function() {
var TAB = String.fromCharCode(9);
if (app.documents.length < 1) {
alert("あらかじめドキュメントを開いてから実行してください");
return;
}
var fileObj = File.openDialog("タブ区切りファイルを選択してください")
if (fileObj == null) return; //キャンセルボタンが押された時は処理しない
var flag = fileObj.open("r");
if (flag == false) {
alert("タブ区切りファイルが開けません");
return; //ファイルが開けなかったので以後の処理を中止する
}
var folObj = Folder.selectDialog("写真があるフォルダを選択してください");
if (folObj == null) return; //キャンセルボタンが押されたときには処理しない
var grObj = app.activeDocument.pages[1].groups; //2ページに割り付ける
var No = 1; //自動レイアウトする項目の先頭番号
while(fileObj.eof == false){ //ファイルが終わりになるまで繰り返す
text = fileObj.readln();//一行読み込む
var itemDATA = text.split(TAB);//タブコードで区切って配列に入れる
var checkFlag = checkTextFrame(grObj, "item"+No);
if (checkFlag == false) break;
try { var tfSubObj = grObj.item("item"+No).textFrames; }catch(e){} //割り付けるテキスト
try { var imgObj = grObj.item("item"+No).rectangles; }catch(e){} //割り付ける画像
try { //写真を設定する
imgObj.item("写真").place(new File(folObj+"/"+itemDATA[3]));
//imgObj.item("写真").fit(FitOptions.proportionally); //画像をフレームにあわせて配置
imgObj.item("写真").fit(FitOptions.centerContent); //画像をフレームのセンターに
}catch(e){}
try { tfSubObj.item("タイトル").contents = itemDATA[1];
} catch(e){}//項目名にテキストを当てはめる
No = No+1//次の番号にする
}
})();
//割り付けるべきテキストフレームがあるか調べる
function checkTextFrame(grObj,tfLabel){
for (var i=0; i<grObj.length; i++){
if (grObj[i].label == tfLabel) return true;
}
return false;
}
» 1
スクリプトラベル設定したものにテキストと画像を流し込むスクリプトなのですが、現状単ページにしか動作できないためこれを複数ページに渡って処理を行いたいのですが、その場合はどのように処理を行えばよいでしょうか...
・2pページと3pにラベル設定したオブジェクトを置いています。
・2pの処理が終わったら3pに続きから処理を行う
スクリプトも始めたばかりでなかなかうまくいかず・・・ご指導頂けたら幸いです。
以下現状のスクリプトです
(function() {
var TAB = String.fromCharCode(9);
if (app.documents.length < 1) {
alert("あらかじめドキュメントを開いてから実行してください");
return;
}
var fileObj = File.openDialog("タブ区切りファイルを選択してください")
if (fileObj == null) return; //キャンセルボタンが押された時は処理しない
var flag = fileObj.open("r");
if (flag == false) {
alert("タブ区切りファイルが開けません");
return; //ファイルが開けなかったので以後の処理を中止する
}
var folObj = Folder.selectDialog("写真があるフォルダを選択してください");
if (folObj == null) return; //キャンセルボタンが押されたときには処理しない
var grObj = app.activeDocument.pages[1].groups; //2ページに割り付ける
var No = 1; //自動レイアウトする項目の先頭番号
while(fileObj.eof == false){ //ファイルが終わりになるまで繰り返す
text = fileObj.readln();//一行読み込む
var itemDATA = text.split(TAB);//タブコードで区切って配列に入れる
var checkFlag = checkTextFrame(grObj, "item"+No);
if (checkFlag == false) break;
try { var tfSubObj = grObj.item("item"+No).textFrames; }catch(e){} //割り付けるテキスト
try { var imgObj = grObj.item("item"+No).rectangles; }catch(e){} //割り付ける画像
try { //写真を設定する
imgObj.item("写真").place(new File(folObj+"/"+itemDATA[3]));
//imgObj.item("写真").fit(FitOptions.proportionally); //画像をフレームにあわせて配置
imgObj.item("写真").fit(FitOptions.centerContent); //画像をフレームのセンターに
}catch(e){}
try { tfSubObj.item("タイトル").contents = itemDATA[1];
} catch(e){}//項目名にテキストを当てはめる
No = No+1//次の番号にする
}
})();
//割り付けるべきテキストフレームがあるか調べる
function checkTextFrame(grObj,tfLabel){
for (var i=0; i<grObj.length; i++){
if (grObj[i].label == tfLabel) return true;
}
return false;
}
[4679]Re: InDesignのjavaScriptで |
投稿者:chata |
投稿日:2010/05/12(Wed) 10:57:20
//割り付けるべきテキストフレームがあるか調べるの後にapp.activeDocument.pages[1]のカウンタを1つ増やすとかいう繰り返しをさせるんだと思うんですがー先頭番号がーファイルを読み込み位置がーとか色々いじらないとダメっぽいので、ソレの1個前の「フォルダ内のJEPG画像ファイルを指定した枚数と間隔で配置する」で、繰り返しとかページの移動・追加の感覚をつかんでみてください。
» 2
[4694]Re: InDesignのjavaScriptで |
投稿者:ねこ |
投稿日:2010/05/12(Wed) 18:51:02
chata様>ありがとうございます。やっぱりいろいろいじらないといけないのですね・・・、どこかを1カ所かえればいいと思ってやっててできなかったのでどこが悪いやらという状況でした。
前のスクリプト文を解読して作り直してみます。
» 3
前のスクリプト文を解読して作り直してみます。
[4697]Re: InDesignのjavaScriptで |
投稿者:梅花藻 |
投稿日:2010/05/12(Wed) 21:32:30
実際に動かしていないので上手くいかないかもしれせんが。
ねこさんのスクリプトの14行目以降、割り付けるべきテキストフレームがあるか調べる関数の前までを以下のようにしてみました。
var folObj = Folder.selectDialog("写真があるフォルダを選択してください");
if (folObj == null) return; //キャンセルボタンが押されたときには処理しない
//var grObj = app.activeDocument.pages[1].groups; //2ページに割り付ける★コメントアウト
var pn = 1; //★追加 開始ページ
var No = 1; //自動レイアウトする項目の先頭番号
while(fileObj.eof == false){ //ファイルが終わりになるまで繰り返す
text = fileObj.readln();//一行読み込む
var itemDATA = text.split(TAB);//タブコードで区切って配列に入れる
while(true){ //★追加 無限ループ(breakで抜ける)
if (pn > 2) break; //★追加 終了ページを越えていたら無限ループから抜ける
var grObj = app.activeDocument.pages[pn].groups; //★追加
var checkFlag = checkTextFrame(grObj, "item"+No);
if (checkFlag) break; //★追加 目的のラベルのあるグループがあったらbreak
else {
pn++; //★ pn = pn + 1と同じ(次のページへ)
//No = 1; //ページごとに1から始まるのならばこれが必要
}
}
if (pn > 2) break; //★追加 終了ページを越えていたらwhileループから抜ける
try { var tfSubObj = grObj.item("item"+No).textFrames; }catch(e){} //割り付けるテキスト
try { var imgObj = grObj.item("item"+No).rectangles; }catch(e){} //割り付ける画像
try { //写真を設定する
imgObj.item("写真").place(new File(folObj+"/"+itemDATA[3]));
//imgObj.item("写真").fit(FitOptions.proportionally); //画像をフレームにあわせて配置
imgObj.item("写真").fit(FitOptions.centerContent); //画像をフレームのセンターに
}catch(e){}
try { tfSubObj.item("タイトル").contents = itemDATA[1];
} catch(e){}//項目名にテキストを当てはめる
No = No+1;//次の番号にする
}
})();
» 4
ねこさんのスクリプトの14行目以降、割り付けるべきテキストフレームがあるか調べる関数の前までを以下のようにしてみました。
var folObj = Folder.selectDialog("写真があるフォルダを選択してください");
if (folObj == null) return; //キャンセルボタンが押されたときには処理しない
//var grObj = app.activeDocument.pages[1].groups; //2ページに割り付ける★コメントアウト
var pn = 1; //★追加 開始ページ
var No = 1; //自動レイアウトする項目の先頭番号
while(fileObj.eof == false){ //ファイルが終わりになるまで繰り返す
text = fileObj.readln();//一行読み込む
var itemDATA = text.split(TAB);//タブコードで区切って配列に入れる
while(true){ //★追加 無限ループ(breakで抜ける)
if (pn > 2) break; //★追加 終了ページを越えていたら無限ループから抜ける
var grObj = app.activeDocument.pages[pn].groups; //★追加
var checkFlag = checkTextFrame(grObj, "item"+No);
if (checkFlag) break; //★追加 目的のラベルのあるグループがあったらbreak
else {
pn++; //★ pn = pn + 1と同じ(次のページへ)
//No = 1; //ページごとに1から始まるのならばこれが必要
}
}
if (pn > 2) break; //★追加 終了ページを越えていたらwhileループから抜ける
try { var tfSubObj = grObj.item("item"+No).textFrames; }catch(e){} //割り付けるテキスト
try { var imgObj = grObj.item("item"+No).rectangles; }catch(e){} //割り付ける画像
try { //写真を設定する
imgObj.item("写真").place(new File(folObj+"/"+itemDATA[3]));
//imgObj.item("写真").fit(FitOptions.proportionally); //画像をフレームにあわせて配置
imgObj.item("写真").fit(FitOptions.centerContent); //画像をフレームのセンターに
}catch(e){}
try { tfSubObj.item("タイトル").contents = itemDATA[1];
} catch(e){}//項目名にテキストを当てはめる
No = No+1;//次の番号にする
}
})();
[4709]Re: InDesignのjavaScriptで |
投稿者:ねこ |
投稿日:2010/05/13(Thu) 18:47:11
梅花藻様>ありがとうございます。上記のを試したらうまく動きました。本当にありがとうございます。
これからより便利になるよういろいろ勉強していきます。
ありがとうございました。
これからより便利になるよういろいろ勉強していきます。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)