アンカー付きオブジェクト

[11943]アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/09(Thu) 18:58
こんにちは、OS10.3.9 InDesignCS2を使用してます。
フレームグリッド内のある文字(記号)をアンカー付きオブジェクトに置換する方法ってありますか?
宜しくお願い致します。
» 1
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/10(Fri) 14:21
1.文字(記号)を検索する。
2.検索した文字(記号)を選択状態にする。
3.オブジェクトを配置(place)または、indlライブラリに登録してあるアセット(Asset)を配置する(placeAsset)。
4.上記のオブジェクトはインラインオブジェクトになっているので、AnchoredObjectSettingのプロパティを設定してアンカー付きオブジェクトに変える。

以上の事をスクリプトで書けば、
>フレームグリッド内のある文字(記号)をアンカー付きオブジェクトに置換する
ことは、可能です。

placeAssetメソッドは、配置したオブジェクト(のリスト)を返すので楽です。
配置(place)だと、返り値がないのでちょっと面倒です。
» 2
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/11(Sat) 10:12
クリさんの望む具体的な形がわかりませんので、適当に直して使ってください。
(もしかすると、選択した文字の方をアンカー付きオブジェクト内の文字にしたいということ、ですか? それだと、これとは別の話になってしまいますね。その場合にはそう言ってください。別のスクリプトを用意しますので。)

No.11944に書いた手順と違う事をしています。ちょっと思いついたものですから。
コメントを付けているので、だいたいやっている事はわかると思います。

//ここからInDesign CS2のJavaScript
//とりあえずダイアログを開いて、アンカー付きオブジェクトとして配置するファイルを選択。
var fileobj = File.openDialog();
//現在の表示倍率を記憶
var zoom = app.activeWindow.zoomPercentage;
//検索置換設定のクリア
app.findPreferences = NothingEnum.nothing;
app.changePreferences = NothingEnum.nothing;
//検索する文字列「<ファイル>」
app.findPreferences.findText = "<ファイル>";
//検索範囲:挿入点をたてたストーリー内
var range = app.selection[0].parentStory;
//検索を実行
var HitList = range.search();
//後ろから処理
for (var i=HitList.length-1; i>=0; i--){
//親ストーリーまたは親セル
var aParent = HitList[i].parent;
//置換位置を記憶
var aIndex = HitList[i].characters[0].index;
//置換する文字を削除
HitList[i].remove();
//挿入点にフレームを作成
var txtFrame = aParent.insertionPoints[aIndex].textFrames.add();
//再描画(フレームを確定させるのにちょっと時間が必要)
app.selection = aParent.insertionPoints[aIndex];
app.activeWindow.zoomPercentage = zoom;
with(txtFrame){
//ファイルを配置
place(fileobj);
//フレームを配置したオブジェクトのサイズにフィット
fit(FitOptions.frameToContent);
//アンカー付きオブジェクトにする
with(anchoredObjectSettings){
anchoredPosition = AnchorPosition.anchored;
}
}
}
» 3
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/13(Mon) 13:09
梅花藻さん、ありがとうございます。
しかしながら、作っていただいて大変申し訳ないのですが、お恥ずかしいことにJavaScriptの使い方がよくわかりません。
ExtendScript Toolkitなるものを見つけ、これにペーストして試してみたのですが、「開く」のダイアログが出るだけで、後どうしていいのかわかりませんでした。
すみません、基本的なところから分かってないので・・・。
実際にやりたいことというのは文章内の★を検索して横にしたリーダー罫を入れたかったのです。縦組みなので、縦のリーダー罫をアンカーさせ、横向きにして、見出しの頭の飾り罫としたかったのです。(こんな説明でわかりますか?)






↑こんな感じ?
» 4
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:n-yuji 投稿日:2007/08/13(Mon) 14:13
それは……。
もしかして「…」を文字回転させればいいだけの話なのでは……。
» 5
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/13(Mon) 14:53
n-yuji さんの意見に1票です。
が、
インラインオブジェクトではなく、わざわざ、アンカー付きオブジェクトにしたいという部分を斟酌すると、クリさんは字幅なしで配置したいのではないかなと。

とりあえず、こんな感じのJavaScriptでどうでしょう。

まず、1文字分のテキストフレームに三点リーダーを、横組、グリッド揃え:なし、にして入れ、このテキストフレームを選択して、項目を追加でライブラリに登録する。
アイテム情報で、アイテム名を「三点リーダー」としておく。
開いているindlライブラリは、このアイテムを登録したものだけにしておく。

あとは、置換を行いたいストーリー内に、Iビームカーソル(挿入点)をたてて、スクリプトを実行。

なお、スクリプトはNo.11944で書いた手順のものになっています。

//ここからInDesign CS2のJavaScript
//ラブラリを一つだけ用意して、そこに配置するアイテムを登録しておく。
//ライブラリに登録したアイテムの名称を、とりあえず「三点リーダー」と付けておく。

//アクティブなドキュメント
var myDoc = app.activeDocument;
//ライブラリ:一つだけなので1番めのもの
var myLib = app.libraries.firstItem();
//配置するアイテム名:「三点リーダー」
var myAsset = myLib.assets.item("三点リーダー")
//現在の表示倍率を記憶
var zoom = app.activeWindow.zoomPercentage;
//検索置換設定のクリア
app.findPreferences = NothingEnum.nothing;
app.changePreferences = NothingEnum.nothing;
//検索する文字列「★」
app.findPreferences.findText = "★";
//検索範囲:挿入点をたてたストーリー内
var range = app.selection[0].parentStory;
//検索を実行
var HitList = range.search();
//後ろから処理
for (var i=HitList.length-1; i>=0; i--){
//置換する文字を選択
app.selection = HitList[i];
//アイテムを配置する
var myObjs = myAsset.placeAsset(myDoc);
//返り値はリストなので、最初の要素
var myObj = myObjs[0];
//再描画:配置アイテムを確定させる(なくても大丈夫?)
app.activeWindow.zoomPercentage = zoom;
//アンカー付きオブジェクトにする
with (myObj.anchoredObjectSettings){
anchoredPosition = AnchorPosition.anchored;
horizontalReferencePoint = AnchoredRelativeTo.anchorLocation;
anchorPoint = AnchorPoint.leftCenterAnchor;
pinPosition = false;
}
//縦組だと回転して配置されるので、向きを直す
try{myObj.rotationAngle = 0;}
catch(e){alert(e);myObj.rotationAngle = 0;}
//再描画
app.activeWindow.zoomPercentage = zoom;
}
» 6
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/13(Mon) 15:01
n-yuji さん、もちろん実際は三点リーダーではないです。0.4㎜リーダー罫で8㎜というものです。
ドッドでも10個とか並べて回転させたりして、いろいろ試してみたのですが、文字とのアキとかなかなかうまい位置に来てくれなくて、リーダー罫を簡単にアンカーさせられればなぁと思い、おたずねしました。
» 7
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/13(Mon) 15:23
三点リーダーではなく、0.4mmリーダー罫でも基本的には同じです。
配置するリーダー罫をライブラリに登録して戴いて、名前をつけてください。
アイテムの選択は、この名前で行っています。

あとは、中央左を参照点にする
anchorPoint = AnchorPoint.leftCenterAnchor;
よりも、中央を参照点にする、
anchorPoint = AnchorPoint.centerAnchor;
の方が、よいでしょうか。

Y基準を仮想ボディの中央にできればよいのですが、残念ながらCS2のJavaScripではエラーになってしまい、この設定をすることができません。

手作業で直していくか、計算してanchorYoffset(縦組の場合、こちらが横方向)を設定するようにするかですね。

あと、このままだと続く文字との間のアキはない(むしろ被っている)ので、そのあたりをどうするか。勿論スクリプトで、アンカーマーカーにトラッキング量等を設定していくこともできますけれど。
» 8
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/13(Mon) 16:08
梅花藻さん、ありがとうございます。
やってみたのですけど、「JavaScript エラーです!」と出ました。
エラー文字列:Object is invalid
行27
ソース:var myObjs = myAsset.placeAsset(myDoc);
と出てました。
anchorPoint = AnchorPoint.centerAnchor;の部分は変えてみたのですけど、私、何かしてしまったのでしょうか?
» 9
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/13(Mon) 16:27
>エラー文字列:Object is invalid
>行27
>ソース:var myObjs = myAsset.placeAsset(myDoc);

たぶん、10行めの
var myAsset = myLib.assets.item("三点リーダー")
のダブルクォーションで囲まれた文字列と、ライブラリに登録したアイテムの名称が一致していないのだと思います。

アイテム名の欄の文字列をコピーして、スクリプトの方にペーストしてみてください。
» 10
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/13(Mon) 17:15
梅花藻さん、ありがとうございますっ!!
出来ました! すごい。ページ数が多いから、くるくる回りっぱなしで最初はダメなのかと思ったけど、出来ました。
一発で置き換えることができて感動です♪
スクリプト、すごいなぁ。本当にありがとうございました。
» 11
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/13(Mon) 19:01
す、すみません。ライブラリを少しさわったら
また出来なくなってしまいました。No.11960と同じエラーメッセージがでます。
なので、また名称をコピペしたんですけど、今度は何度やり直してもダメなんです。何がいけないんでしょう?
» 12
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:梅花藻 投稿日:2007/08/13(Mon) 19:10
長時間InDesignを使っているとScriptがいうことを聞いてくれなくなることがあります。

一旦、InDesignを終了して立ち上げ直してみてください。
あとは、アイテム名の最後に空白文字が入っているとか、微妙に異なることも考えられます。

ライブラリへのアイテムの登録方法で、差し替えだったかを使うと認識できなくなった場合があったと思います。
» 13
[11943へのレス]Re: アンカー付きオブジェクト 投稿者:クリ 投稿日:2007/08/14(Tue) 16:40
梅花藻さん、立ち上げ直したらできるようになりました。ちょっとあわてちゃいました。
ありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア