画像選択のスクリプトについて

[5196]画像選択のスクリプトについて | 投稿者:kangaroo | 投稿日:2010/10/22(Fri) 11:37:46
Mac OS 10.6.3/InDesign CS5

JavaScriptを本やこちらのサイトで勉強中です。
画像ボックスを選択したいのですが、
下記スクリプトではCS4では大丈夫だったのですが
CS5だとうまくいきません。

var pageObj = app.activeDocument;
   for (var i=0; i<pageObj.allPageItems.length; i++)
   {
       if (pageObj.allPageItems[i].contentType == ContentType.graphicType)
       {
           pageObj.allPageItems[i].select(SelectionOptions.addTo);
       }
   }

4行目で「オブジェクトまたはメソッド 'contentType' をサポートしていません」
とエラーで止まってしまいます。
初歩的な問題かと思いますが、どなたかご教授願えると助かります。

よろしくお願いします。
» 1
[5197]Re: 画像選択のスクリプトについて | 投稿者:いき | 投稿日:2010/10/22(Fri) 12:12:21
ソースを一切改変せずに試しました。
問題なさそうですが。

WindowsXP sp3/InDesign CS5 v7.0.3
attached image
» 2
[5198]Re: 画像選択のスクリプトについて | 投稿者:(z-) | 投稿日:2010/10/22(Fri) 12:19:50
CS5が手元にないのでチャチャ入れで終わりそうですが(すっこんでろと言われそうですが)
CS5上では根本的にエラーとなる書式なのか、オブジェクトの種類によってエラーとなる場合もあるのか、はともかくとして、

if (pageObj.allPageItems[i].contentType == ContentType.graphicType)

if (typeof pageObj.allPageItems[i].contentType != "undefined") {
if (pageObj.allPageItems[i].contentType == ContentType.graphicType)
としてみてはどうでしょう。閉じカッコも末尾に1つ追加で。
» 3
[5200]Re: 画像選択のスクリプトについて | 投稿者:kamiseto | 投稿日:2010/10/22(Fri) 12:41:10
if文のところを
if(pageObj.allPageItems[i] instanceof "Graphic"){...}
もしくは
if(pageObj.allPageItems[i].constructor.name === "Graphic"){...}
とかで試してみて下さい。
目的のオブジェクト名が"Graphic"でいいのかわかりませんが。
目的のオブジェクトの型が知りたければ、
$.writeln(pageObj.allPageItems[i].constructor.name);
もしくは
alert(pageObj.allPageItems[i].constructor.name);
としてみて下さい。
» 4
[5203]Re: 画像選択のスクリプトについて | 投稿者:こに | 投稿日:2010/10/22(Fri) 13:36:21
ドキュメント上に画像(EPSPDFなど)を配置してスクリプトを実行してませんか?
その時は、CS5ではエラーになります。
kamisetoさんの書き込みのように
$.writeln(pageObj.allPageItems[i].constructor.name);
でオブジェクト名を表示させると、
CS4ではRectangleでも、CS5ではEPSとかPDFになります。
そこの部分に分岐処理をいれるといいでしょう。
» 5
[5206]Re: 画像選択のスクリプトについて | 投稿者:kangaroo | 投稿日:2010/10/22(Fri) 15:12:21
みなさま、返信ありがとうございます。

>いきさん
すみません、こにさんがおっしゃっているように画像を配置して実行していました。
何も配置していないときは問題なく選択できました。
CS4ではどちらでも選択できたので、あまり深く考えていませんでした。
質問があいまいになってしまい、すみません。

>(z-)さん
ありがとうございます。
ご呈示していただいたスクリプトでうまく選択することが出来ました。
が、勉強不足でどうしてうまくいったのか良くわかっていないので
あとで自分なりに解読してみようと思います。

>kamisetoさん
ありがとうございます。
オブジェクト名がEPSの場合は、"Graphic"が"EPS"ですか?
また、{...}の部分には何か文字が入るのでしょうか?

>こにさん
おっしゃっている通り、画像を配置してスクリプトを実行していました。
分岐処理...、がんばって試してみます。

みなさんにご回答頂いたにも関わらず、力不足で理解が足りないようです。
頂いたヒント?をもとに頑張ってみます。
» 6
[5211]Re: 画像選択のスクリプトについて | 投稿者:いき | 投稿日:2010/10/22(Fri) 16:07:33
自分が使うとしたら、テキストフレームを選択セットに含めないようにしたスクリプトかな、と思ってちょっと書いてみました。

/////// selectGlaphicFrame.jsx
/////// ここから

var pageObj = app.activeDocument;
app.menuActions.item('$ID/Selection Tool').invoke();
app.select (NothingEnum.nothing);

for (var i=0; i<pageObj.allPageItems.length; i++)
{
   if (pageObj.allPageItems[i].constructor.name === "Rectangle")
   {
       add2sel();
       }
   else if (pageObj.allPageItems[i].constructor.name === "Polygon")
   {
       add2sel();
       }
   else if (pageObj.allPageItems[i].constructor.name === "Oval")
   {
       add2sel();
       }
   }

function add2sel(){
   pageObj.allPageItems[i].select(SelectionOptions.addTo);
   }

/////// ここまで
» 7
[5212]Re: 画像選択のスクリプトについて | 投稿者:(z-) | 投稿日:2010/10/22(Fri) 16:09:46
>kangarooさん
今さら質問なんですが、選択するのは
・現在画像が配置されているフレーム
・空のグラフィックフレーム
・どっちも
どれにあたりますか?
それによって最適な分岐処理を絞り込むことができます。
こにさんに示して頂いた情報を元にすると、ウチの提示した例では「現在画像が配置されているフレーム」をスルーしてしまいませんか?
» 8
[5213]Re: 画像選択のスクリプトについて | 投稿者:いき | 投稿日:2010/10/22(Fri) 17:10:33
私のは画像フレームに画像が配置されていても空っぽでも選択に加えます。
で、このままだと複数のスプレッドが存在するドキュメントではエラーになる点を (z-) さんにご指摘いただきましたので、スクリプトの一行目を

var pageObj = app.activeWindow.activeSpread;

に変更したいと思います。
スプレッドをまたいで選択することはできないので、アクティブなスプレッドごとに処理、ということで(^^;
» 9
[5214]Re: 画像選択のスクリプトについて | 投稿者:kangaroo | 投稿日:2010/10/22(Fri) 17:21:59
(z-)さん、いきさん、ありがとうございます。
全然ついていけてないのですが...。

>(z-)さん
私が考えていたのは
・現在画像が配置されているフレーム
でした。

が、いきさんがどちらでも使えるものを書いて頂いたようで...。
恐縮です。
のちほど試させて頂きたいと思います。
» 10
[5215]Re: 画像選択のスクリプトについて | 投稿者:(z-) | 投稿日:2010/10/22(Fri) 17:31:09
されば

app.activeDocument.selection=null;  //選択範囲のクリア
var pageObj=app.activeDocument.layoutWindows[0].activeSpread;
for(i=0; i<pageObj.allGraphics.length; i++) ///allPageItemsをallGraphicsに変更
{
try
{
pageObj.allGraphics[i].parent.select(SelectionOptions.addTo);
}
catch(e)
{
continue;
}
}

try{} を入れたのはインライングラフィック対策。これは同時に選択できないので。

というか、がすがす押し付けてすみません ^;
» 11
[5216]Re: 画像選択のスクリプトについて | 投稿者:kangaroo | 投稿日:2010/10/22(Fri) 19:25:48
>(z-)さん
いえいえ、ありがとうございます。
とても勉強になりますし、嬉しいです(まだほとんど理解してませんが...)
ちょっと今週はこれ以上出来そうもないので、来週また試させて頂きます。

ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)