DTP駆け込み寺
  1. [14561] スクリプトで選択段落のアンカー付きオブジェクトを削除したい りさ 2012/08/30 11:00
    1. [14562] Re: スクリプトで選択段落のアンカー付きオブジェクトを削除 ななし 2012/08/30 14:02
      1. [14589] スクリプトで選択段落のアンカー付きオブジェクトを削除 りさ 2012/09/05 18:11
      2. [14593] Re^2: スクリプトで選択段落のアンカー付き あの人 2012/09/07 12:43
        1. [14594] Re^3: スクリプトで選択段落のアンカー付き あの人 2012/09/07 12:51
          1. [14611] Re^4: スクリプトで選択段落のアンカー付き りさ 2012/09/14 08:39

[ 返信 ]

スクリプトで選択段落のアンカー付きオブジェクトを削除したい

Win版IndesignCS5.5使っています。
ページ全体がひとつのテキストフレームになっています。
これはWordからドキュメント全体に配置したからです。
スクリプトでやったことは
ある段落をセレクトしてセレクト行と同じ高さの左側特定の位置に画像をアンカー付きオブジェクトで設定しています。
下記がそのスクリプトです。(いろんなホムペを探して作成しました)

var myDoc = app.activeDocument;
var myLib = app.libraries.firstItem();
var myAsset = myLib.assets.item("image002.gif")
var zoom = app.activeWindow.zoomPercentage;
var myObjs = myAsset.placeAsset(myDoc);
var myObj = myObjs[0];
app.activeWindow.zoomPercentage = zoom;
with (myObj.anchoredObjectSettings){
anchoredPosition = AnchorPosition.anchored;
anchorPoint = AnchorPoint.topLeftAnchor;
horizontalReferencePoint = AnchoredRelativeTo.anchorLocation;
horizontalAlignment = HorizontalAlignment.leftAlign;
anchorXoffset = 50;
anchorYoffset = -3;
anchorSpaceAbove = 0;
}
try{myObj.rotationAngle = 0;}
catch(e){alert(e);myObj.rotationAngle = 0;}
app.activeWindow.zoomPercentage = zoom;

段落をセレクトして上記スクリプトを実行するとImage002の画像がアンカー付きオブジェクトとして貼り付きます
短所は、同じ段落をセレクトしてスクリプトを実行すると同じ場所に画像が重なってしまいます
ここからが教えてほしい所ですが
セレクトした段落にアンカー付きオブジェクトが付いていれば削除する
っといったことをしたいのです
皆様、よろしくおねがいします

[14561] りさ (2012/08/30 Thu 11:00)

[ 返信 ]


Re: スクリプトで選択段落のアンカー付きオブジェクトを削除

PPC Mac なので InDesign CS4 で動作確認しただけですが、

//-------ここから
//選択テキスト範囲を含む段落
var myParagraphs = app.selection[0].paragraphs;
for (var i=0; i<myParagraphs.length; i++){
//段落中のページアイテムをチェック(削除するとlengthが減少するので後ろから)
for (var j=myParagraphs[i].pageItems.length; j>0; j--){
//エラーがでるかもしれないので安全策でtry〜catchのなかに入れておきます。
try {
//アンカー付きオブジェクトならば(インラインまたは行の上でなければ)
if (myParagraphs[i].pageItems[j-1].anchoredObjectSettings.anchoredPosition == AnchorPosition.anchored) {
myParagraphs[i].pageItems[j-1].remove(); //削除
}
} catch(e){}
}
}
//----ここまで

remove()で削除していますので、カット&ペースト等で再利用するためにはそれなりの工夫が必要です。

[14562] ななし (2012/08/30 Thu 14:02)

[ 返信 ]


スクリプトで選択段落のアンカー付きオブジェクトを削除

Dear ななしさん
Win CS5.5で出来ました
ヽ(^。^)丿
完璧です!
ありがとうございました
(∩。∩;)ゞ

[14589] りさ (2012/09/05 Wed 18:11)

[ 返信 ]


Re^2: スクリプトで選択段落のアンカー付き

全然内容読んでないけど、
プログラムのルール的におかしいと思ったので疑問だけ勝手になげると、

//段落中のページアイテムをチェック(削除するとlengthが減少するので後ろから)
for (var j=myParagraphs[i].pageItems.length; j>0; j--){

の、j>0; だと、j-- して jが0になったときにはループを抜けてしまう。

javascriptのインデックスは0からはじまるから、0のときもループしなければいけないはずなので、

j>=0; が正しいと思うが、如何に?

[14593] あの人 (2012/09/07 Fri 12:43)

[ 返信 ]


Re^3: スクリプトで選択段落のアンカー付き

ちがうな、よく読んでみると

myParagraphs[i].pageItems[j-1].remove(); //削除

j-1を削除している。

気のせいだった。

[14594] あの人 (2012/09/07 Fri 12:51)

[ 返信 ]


Re^4: スクリプトで選択段落のアンカー付き

あの人さんへ

アドバイスありがとうございました
Indesign Script は勉強始めたばかりなんです
(~_~;)
これからも
いろいろ教えてください

[14611] りさ (2012/09/14 Fri 08:39)