InDesignで、ドキュメントの選択状態を覚えて、非表示でも裏処理する方法を考えてみた。

眺めてみると(大半は使う機会が少なそうなオブジェクトばかり)
まず、選択ツールで選択できるフレーム系(TextFrame, Oval, Rectangle, Polygon, GraphicLine, PageItem, Group)は大丈夫。
次に、Storyを除くテキスト系(InsertionPoint, Character, Word, TextStyleRange, Line, Paragraph, TextColumn, Text)にはラベルをほぼ全てつけられない、
表組み系(Table, Cell)は付けられるけど表の位置を割り出すのを考えると他のテキスト系と同じ、スクリプトラベルをつけられるStoryからの絶対位置から割り出すの感じかな。(でもうまくいきません)
選択部分の挿入点の参照が一度ドキュメントを閉じることで切れているのだろう。うまくいきません。
フレーム系のオブジェクトは似たような処理でも、ちゃんとヒットしてくれます。
この「選択箇所の裏処理」自体がナンセンスということもあるかも。
そもそもInDesignでオブジェクト選択できるのはスプレット単位。1スプレッド数百ぺージって巻物みたいなドキュメントを作らないに限り、数はたかが知れているし、パフォーマンスをあげるために裏処理したいのに、スクリプトラベルをついているオブジェクトを全体から探すという部分が無駄でしょう。
テキストの選択範囲に関してはストーリー全体以外の重い処理って考えずらいし。
なんか変態的なスクリプトでその必要性があったときのアイデア程度にとどめておきます。
- オブジェクトを選択する
- スクリプトを実行する
- オブジェクトにスクリプトラベルを割り当てる
- ドキュメント保存パスを覚えておく
- 保存して閉じる
- 非表示で覚えておいたドキュメントを開く
- ページアイテムからスクリプトラベルがついたものを探す
- ほにゃららな処理
- スクリプトラベルを除去

まず、選択ツールで選択できるフレーム系(TextFrame, Oval, Rectangle, Polygon, GraphicLine, PageItem, Group)は大丈夫。
次に、Storyを除くテキスト系(InsertionPoint, Character, Word, TextStyleRange, Line, Paragraph, TextColumn, Text)にはラベルをほぼ全てつけられない、
表組み系(Table, Cell)は付けられるけど表の位置を割り出すのを考えると他のテキスト系と同じ、スクリプトラベルをつけられるStoryからの絶対位置から割り出すの感じかな。(でもうまくいきません)
//テキスト選択をして、あえて一度閉じて裏処理(うまくいきません)
var doc=app.documents[0];
var docFilePath=doc.fullName;
var sel=doc.selection[0];//どこか一部をテキスト選択
var st=sel.parentStory;
var labelVar=""+new Date().getTime();
st.label=labelVar;
var beg=st.insertionPoints[0];
var end=st.insertionPoints[-1];
doc.close(SaveOptions.YES);
doc=app.open (docFilePath, false);
var reopenStory=doc.stories;
for(var i=0; i < reopenStory.length; i++){
if(reopenStory[i].label==labelVar){
reopenStory[i].texts.itemByRange(beg, end).pointSize=18;//選択した範囲だけ文字サイズが変わって欲しいのに
}
}
doc.windows.add();//結果はたぶん残念。
選択部分の挿入点の参照が一度ドキュメントを閉じることで切れているのだろう。うまくいきません。
フレーム系のオブジェクトは似たような処理でも、ちゃんとヒットしてくれます。
この「選択箇所の裏処理」自体がナンセンスということもあるかも。
そもそもInDesignでオブジェクト選択できるのはスプレット単位。1スプレッド数百ぺージって巻物みたいなドキュメントを作らないに限り、数はたかが知れているし、パフォーマンスをあげるために裏処理したいのに、スクリプトラベルをついているオブジェクトを全体から探すという部分が無駄でしょう。
テキストの選択範囲に関してはストーリー全体以外の重い処理って考えずらいし。
なんか変態的なスクリプトでその必要性があったときのアイデア程度にとどめておきます。