ライブラリファイルからアイテムを配置する

ExtendScriptでInDesignライブラリーから配置する方法 ライブラリー
スポンサーリンク

InDesignのライブラリファイルに登録・保存した画像やテキストフレームなどのオブジェクトは、いつでも呼び出してドキュメントに貼り付けて使うことができます。

スクリプトで、ライブラリのアイテムをドキュメントに貼り込む際は、引数に挿入点を指定すればインラインとして貼り込むことができます。

ドキュメントサンプル

ExtendScriptでライブラリーからInDesignにアイテムを配置する前準備
1ページ目にテキストフレームを作成。3ページ目をアクティブにして実行する。
4アイテム入っているライブラリーファイル
アイテムが登録されたライブラリファイル

コードサンプル

#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] + ")", 
"配置アイテム");

実行結果

ライブラリーからアイテム配置されたInDesignドキュメント
「みどりの丸」と「青い丸」が配置されました
ライブラリーのアイテムを配置したオブジェクトの情報(形式、配置座標)
配置したオブジェクトの情報にアクセス

サンプルコードの解説

コードの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指定で配置すれば、ちゃんと意図したスプレッドシートに配置されます。

ライブラリーからアイテム配置されたInDesignドキュメント
アクティブページが3ページの状態でアイテムを配置

placeAsset()で指定できるのは、DocumentとTextsの2つです。
pageを特定して配置することはできません。

コメント

タイトルとURLをコピーしました