InDesignのスクリプトで、ライブラリファイルに登録・保存した画像やテキストフレームなどのオブジェクトをドキュメントに貼り込む方法を解説します。
スクリプトでは、引数に指定する配置先をドキュメントにするか、挿入点にするかで、「ページ上に配置」「インラインオブジェクトとして配置」を切り替えられます。
ドキュメントサンプル
コードサンプル
#target indesign
// ライブラリを開く
var objLibrary = app.open ("C:/Users/〜〜〜/ライブラリ配置test.indl");
// アイテムをindex番号で配置 insertionPoints
var objPlaceAsset1 = objLibrary.assets[1].placeAsset(app.activeDocument.textFrames[0].insertionPoints[3]);
// アイテムを名称で配置 document
var objPlaceAsset2 = objLibrary.assets.item("みどりの丸").placeAsset(app.activeDocument);
// ライブラリを閉じる
objLibrary.close();
// 配置したアイテムの情報をアラート表示
alert(
"insertionPoints に配置したアイテム: " + objPlaceAsset1[0].constructor.name + "\n" +
" 配置座標 (" + objPlaceAsset1[0].geometricBounds[0] + ", " +
objPlaceAsset1[0].geometricBounds[1] + ", " + +
objPlaceAsset1[0].geometricBounds[2] + ", " +
objPlaceAsset1[0].geometricBounds[3] + ")" + "\n\n" +
"activeDocument に配置したアイテム: " + objPlaceAsset2[0].constructor.name + "\n" +
" 配置座標 (" + objPlaceAsset2[0].geometricBounds[0] + ", " +
objPlaceAsset2[0].geometricBounds[1] + ", " + +
objPlaceAsset2[0].geometricBounds[2] + ", " +
objPlaceAsset2[0].geometricBounds[3] + ")",
"配置アイテム");
実行結果
サンプルコードの解説
コードの4行目で、ライブラリーファイルを開いて、取得しています。
var objLibrary = app.open ("C:/Users/〜〜〜/ライブラリ配置test.indl");
このライブラリから、アイテムを2つ配置します。
7行目の配置では、配置先にテキストフレームの4つ目の挿入点を指定してあります。
配置するライブラリーのアイテムは assets[1] として、id番号で指定しました。
id番号は、ライブラリパネルに登録されたアイテムのうち、新しく登録されたものの方が若い番号になります。
ここで指定した [1] は、パネルに表示されているアイテムのうち最後から2番目の「青い丸」です。
var objPlaceAsset1 = objLibrary.assets[1].placeAsset(app.activeDocument.textFrames[0].insertionPoints[3]);
9行目の配置では、配置先に activeDocument を指定しました。
配置先がドキュメントのときは、そのときのアクティブスプレッドに貼り込まれます。
そして、ここでは配置アイテムを「みどりの丸」という名称で指定しています。
var objPlaceAsset2 = objLibrary.assets.item("みどりの丸").placeAsset(app.activeDocument);
ライブラリのアイテムは、別のアイテムに同じ名称をつけることができてしまうので注意が必要です。
配置したオブジェクトは .placeAsset() コマンドの戻り値として取得できるので、最後に、この戻り値の情報をアラート表示しています。
と…、おいおい、おかしいでしょ!
準備したドキュメントでは、たしか3ページ目をアクティブにしていたハズ…。
そして、配置先をDocumentにしたらアクティブなスプレッドに配置されるハズ、でしょ?
なのに、先頭に「みどりの丸」が堂々と配置されてる…。
はい、そうなんです。
実は、最初に配置した「青い丸」が1ページ目だったために、アクティブスプレッドシートが変わってしまい、その結果、次にドキュメント指定で配置したオブジェクトが、先頭のスプレッドシートの左上に配置されてしまいました。
画面に表示されているページ番号は「3」のママなので、変わった様子はわからないですけど…。
というわけで、アクティブなページが変わらないようにして、Document指定で配置すれば、ちゃんと意図したスプレッドシートに配置されます。
placeAsset()で指定できるのは、DocumentとTextsの2つです。
pageを特定して配置することはできません。