InDesignドキュメントにテーブルがあります。最初のセルにインライン画像を追加します。
var myPics = File("/c/test.png"),
myDoc = app.activeDocument,
myPage = myDoc.pages[0],
myTable = myDoc.stories.everyItem().tables[0],
myCell = myTable.cells[0];
myCell.contents = myPics;
セルに画像を入れる必要があると思いますが、代わりにファイルアドレスが入力されます。私は何をすべきか?
contents
InDesignでテキストオブジェクトのは、実際にフォーマットされたネイティブのInDesignテキストの正確な等価物ではありません。それらは常に単純なJavascriptテキスト文字列との間でキャストされます。読み取ると、contents
InDesignのすべてのテキスト属性(たとえば、テキストの書式設定、ハイパーリンク、ブックマーク、XMLマーカー、および画像などのすべてのメタオブジェクト)が破棄されます。書き込みcontents
は、テキストを配置する場所にあるテキストコンテナのデフォルトのフォーマットでフォーマットされたプレーンテキストで宛先を埋めます。
PNGファイルをJavascript変数の「中に」保存することはできません。Fileオブジェクトとしてではなく(実際のファイルの内容に解析されません)、「画像」としてではありません(内容は「何か」を意味するのではなく、テキスト文字列として扱われます)。
適切な方法は、を使用することですplace
。これは、InDesignドキュメント全体で機能します。この場合、ファイルはページに直接インポートされるか、次のような有効なプロパティを介してテキストの場所を使用しますinsertionPoints
。
var myPics = File("/c/test.png"),
myDoc = app.activeDocument,
myPage = myDoc.pages[0],
myTable = myDoc.stories.everyItem().tables[0],
myCell = myTable.cells[0];
myCell.insertionPoints[0].place(myPics);
myCell
配置する前にの内容が空であることを確認したい場合は、追加できます
if (myCell.texts[0].length > 0)
myCell.texts[0].remove();
の使用に関する警告everyItem()
:このように使用すると、ライブコレクションになります。コレクションは配列のように機能しますが、コレクションの各要素が唯一のオブジェクトとして「表示」される点が異なります。したがって、あなたは次のようなことをすることができます
myTable.cells.everyItem().contents = "hello!";
everyItem()
コマンドがあるため、テキストはすべてのセルに表示されます。しかし、あなたはすでにのコレクションを作成するので、テーブルを-myDoc.stories.everyItem().tables[0]
で「」最初のテーブルのリストになり、すべての現在のドキュメントの物語-というあなたは、あなたの驚きに、見つけるすべてのこれらの突然含まれていますhello
同様に。
現在のテキストフレームのコピーを同じページに配置し、私のバージョンのスクリプトを再度実行すると、これを確認できます。両方のテーブルに同じ画像が挿入されていることがわかります。
おそらく、最初のテーブル、最初のストーリー、最初のページに画像を1回だけ挿入する必要があります。それなら
myTable = myPage.stories[0].tables[0];
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加