2008年5月23日金曜日

【InDesign】同じスウォッチを使用しているオブジェクトを選択

Illustratorでは同じ塗りや線色のオブジェクトをまとめて選択するコマンドがありますが、InDesignでも同じことをやれるスクリプトです。
...
【使い方】
1つだけフレームを選択してスクリプトを実行すると、そのフレームと同じ塗り色&同じ線色のフレームをすべて選択状態にします。
※「同じ色」というのはスウォッチ名で判断しているので、スウォッチ登録していない色では反応しません。
※シェード(濃淡)の違いは判断しません。同じスウォッチ名なら薄いのも濃いのも同じ色として判断します。
※作業中のスプレッドが対象です。ドキュメント全体ではありません。

ちなみにInDesign CS2で確認しています。他のバージョンは動くかどうかわかりません。
そして、JAVASriptです。Mac、Win両対応だと思います。Winでしか確認してないけど。

一応、このスクリプトのミソはselectFillAndStrokeColor関数です。引数として渡されたオブジェクトのfillColorを調べて判断するのですが、引数としてグループ化されたオブジェクトが渡されている可能性もあります。なぜかというとpageItemsプロパティでは、グループも1つのオブジェクトとなっているからです。fillColorプロパティを見ようとしたとき、これがグループであるとエラーになります。そこでエラーメッセージをキャッチして、グループだと判断した場合はグループのpageItemsプロパティを取り出し、自身を再帰呼び出ししています。再帰呼び出ししているので、多重グループ化されているオブジェクトでも問題なく処理できます。




// 選択-スウォッチの塗りと線色.jsx
// For InDesign CS2
// (c)Gyoniso
// 2008/5/23 v1.0

#target InDesign

chkFillColor = "";
chkStrokeColor = "";

baseITM = app.selection;
if (baseITM.length == 1)
{
typeArray = new Array("Oval", "Rectangle", "Polygon", "GraphicLine", "TextFrame")
for (i=0; i < typeArray.length; i++)
{
worktype = typeArray[i];
if (worktype.indexOf(baseITM[0].constructor.name) >= 0)
{
chkFillColor = baseITM[0].fillColor;
chkStrokeColor = baseITM[0].strokeColor;
}
}
}

if ((chkFillColor != "") & (chkStrokeColor != ""))
{
allITM = app.layoutWindows[0].activeSpread.pageItems;
selectFillAndStrokeColor(chkFillColor, chkStrokeColor, allITM);
} else {
alert("有効なオブジェクトを1つだけ選択してください");
}

function selectFillAndStrokeColor(fCol, sCol, itemLST)
{
var i, chkITM
for(i = 0; i < itemLST.length; i++)
{
chkITM = itemLST[i];
try
{
if ((chkITM.fillColor == fCol) & (chkITM.strokeColor == sCol))
{
chkITM.select(SelectionOptions.addTo);
}
}
catch(e)
{
if (e == "Error: このオブジェクトのコンテンツは、この画像属性の値を複数有しています。")
{
selectFillAndStrokeColor(fCol, sCol, chkITM.allPageItems);
}
}
}
}


5 件のコメント:

いき♂ さんのコメント...

こんにちは!
今ちょうど同色スウォッチを検索したいと思っていてこちらの記事に辿り着きました。
ありがたく使わせていただきます。

すみません、一箇所気付いたことが……。

for (i=0; i

で改行になってしまっているところがありますが、

for (i=0; i < typeArray.length; i++)

ではないでしょうか。

ギョニソ さんのコメント...

おーホントだwありがとうございます!
修正しておきました。

匿名 さんのコメント...

Mac版のInDesignCS5 で動かしてみました。
 細かいところまではまだ分らないですが

 特定のオブジェクトを選択すると、同じスォッチを使ったオブジェクトを選択してくれました。

ギョニソ さんのコメント...

おおっ、CS5での動作報告ありがとうございます~!

匿名 さんのコメント...

使わさせて頂きました
Mac版InDesignCS6で動きました。
OSは10.10.5でInDesignは8.1です。
ありがとうございます。