オブジェクトの変更

[5821]オブジェクトの変更 | 投稿者:えふた | 投稿日:2011/05/31(Tue) 17:17:52
はじめまして。

InDesign CS4を使い始めたばかりなのですが、
学校のコース案内100ページ(コース数は200個ほど)を作ることになりました。

InDesignでの制作について2つ質問があります。

1つ目は、
200個あるコースに色違いで同じ形の枠を付けたいのですが、枠の形がまだ確定していません。
(数種類提出して決めていただいています)

入稿の期限日があるため作業を進めなくてはならず、オブジェクトライブラリに登録した枠を200コース分、配置したのですが、配置した枠のデザインが決定した時に一気に変更する方法はありますか?
(オブジェクトライブラリに登録した枠はグループ化したオブジェクトです。)

2つ目は、
枠の形によっては、コース名の入っているテキストボックスのみの横幅を変える必要があります。
テキストの流し込みは終わっているのですが、テキストボックスの横幅を一気に同じ大きさに変更する方法はありますでしょうか?
(コース名はほかの部分とフォントサイズが異なります)

始めたばかりでjavascriptは使ったことがありません。
javascriptで出来ることであれば、頑張ってやってみたいと思っています。
よろしくお願いいたします。
» 1
[5822]Re: オブジェクトの変更 | 投稿者:五月 貴 | 投稿日:2011/05/31(Tue) 18:46:21
私もJavaScriptはこちらの皆さんのお力を借りてなんとか作業している程度なのであまり大掛かりなことはできませんが,
「枠」というのはillustratorで作った貼付け画像でしょうか?
それともInDesignで作ったものでしょうか?

ご様子からすると流し込んでいるページを最初から最後まで管理し続けなければいけないようですが,そういった内容のスクリプトを書くのは未経験ではなかなか難しいと思います。
たとえ200件でも,プログラムを考えている間に作業してしまった方が早く終わってしまうことも決して少なくはありませんので,人海戦術のご検討も必要かと思います。
» 2
[5825]Re: オブジェクトの変更 | 投稿者:えふた | 投稿日:2011/05/31(Tue) 21:01:50
五月様ありがとうございます!!

>「枠」というのはillustratorで作った貼付け画像でしょうか?
>それともInDesignで作ったものでしょうか?

InDesignで作ったものです。線と矩形(塗り、線有り)で制作したものです。

やはり、すべて手作業でやるしかないのでしょうか...。
» 3
[5826]Re: オブジェクトの変更 | 投稿者:にゃす | 投稿日:2011/05/31(Tue) 21:58:46
1つ目
Illustrator等を配置するのが良さそうな気がします

2つ目
コース名の入ったテキストフレームのQ数が13Qで、
そのフレーム幅を100mmにすると仮定して、

var courseNameSize = 13; // テキストフレームの1文字目の大きさが13Q
var W = 100; // テキストフレームを100mmにしたい
var X1,Y1,X2,Y2;
var actDoc = app.activeDocument;
for(var i=0; i<actDoc.allPageItems.length; i++) {
   if(actDoc.allPageItems[i].constructor.name == "TextFrame" && actDoc.allPageItems[i].characters[0].pointSize == courseNameSize) {
       Y1 = actDoc.allPageItems[i].visibleBounds[0];
       X1 = actDoc.allPageItems[i].visibleBounds[1];
       Y2 = actDoc.allPageItems[i].visibleBounds[2];
       X2 = actDoc.allPageItems[i].visibleBounds[1] + W;
       actDoc.allPageItems[i].visibleBounds = [Y1, X1, Y2, X2];
   }
}

こんな感じで何となく出来そうな気がしますが
» 4
[5828]Re: オブジェクトの変更 | 投稿者:えふた | 投稿日:2011/06/01(Wed) 16:06:54
にゃす様ありがとうございます!!
1つ目はイラストレータという手もあるんですね。
テンパってしまって気づきませんでした。
FireworksやFLASHにあるシンボルのような機能があれば便利だと思ったのですが...。

2つ目はスクリプトを試してみました。
大変たいへん申し訳ありませんが、再度教えていただけますでしょうか。

実行すると
エラー番号:45
エラー文字列:オブジェクトが無効です
行:6
ソース:if(actDoc.allPageItems[i].constructor.name == "TextFrame" && actDoc.allPageItems[i].characters[0].pointSize == courseNameSize) {

とエラーが出てしまいます。
調べてみたのですが、よくわかりませんでした。
よろしくお願いいたします。
» 5
[5829]Re: オブジェクトの変更 | 投稿者:にゃす | 投稿日:2011/06/01(Wed) 17:14:19
あくまでも想像ですが、空のテキストフレームがあるのかもしれません。判定で文字列の無いテキストフレームは飛ばすようにしてみました。
うまくいくと良いのですが。

var courseNameSize = 13; // テキストフレームの1文字目の大きさが13Q
var W = 100; // テキストフレームを100mmにしたい
var X1,Y1,X2,Y2;

var actDoc = app.activeDocument;
for(var i=0; i<actDoc.allPageItems.length; i++) {
   if(actDoc.allPageItems[i].constructor.name == "TextFrame" && actDoc.allPageItems[i].characters.length >= 1 && actDoc.allPageItems[i].characters[0].pointSize == courseNameSize) {
       Y1 = actDoc.allPageItems[i].visibleBounds[0];
       X1 = actDoc.allPageItems[i].visibleBounds[1];
       Y2 = actDoc.allPageItems[i].visibleBounds[2];
       X2 = actDoc.allPageItems[i].visibleBounds[1] + W;
       actDoc.allPageItems[i].visibleBounds = [Y1, X1, Y2, X2];
   }
}
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)