スクリプトでの画像の自動配置

[8527]スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/02 15:43:15
Word原稿を、スクリプトを使って、Indesignで自動組版する方法を模索している、スクリプト超初心者です。
段落スタイル・文字スタイルの適用までは、何とかなったのですが、画像を自動挿入する方法が思いつきません。

・文字原稿は、連結されたテキストフレーム内に、
 テキストとして流し込まれています。
・画像のファイル名は、下記のように<ファイル名>
 というテキストが入力してあります。
・<ファイル名>の部分には、画像を配置するときの段落スタイルが
 適用されています。画像さえ配置できれば、回り込み等は
 考えなくて大丈夫です。
・画像ファイルは、ブック同階層の[Links]フォルダに
 入れてあります。

○○○○○○○○○○○○○○○
<0001.eps
○○○○○○○○○○○○○○○
<0002.eps
○○○○○○○○○○○○○○○
○○○○○○○○○○○○○○○

スクリプトで、<ファイル名>の部分に、画像ファイルを自動配置することは、できますでしょうか?
どなたか、良い方法がありましたら、ご教示よろしくお願い致します。
[8529]Re: スクリプトでの画像の自動配置 投稿者:(z-) 投稿日:2015/03/03 10:02:01
<0001.eps>などの配置予定の段落を把握したら
contents を"\r"だけに。
insertionPoints[0]にrectangleを挿入。
そのrectangleの中に画像を配置、画像をfit(FitOptions.FRAME_TO_CONTENT)
とかなんとか…

Extendscriptでの話になりましたが。
お使いのOSやInDesignのバージョン、取り組まれているスクリプト言語などの情報は
わりと必須です。こういう話題のばあい特に。
[8530]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/03 11:48:14
(z-) 様

ご回答頂き、ありがとうございます!
大変失礼いたしました、スクリプト・環境等の情報、失念しておりました。
スクリプトはWin版 Extendscriptで、言語はJavaScripです(ともに初の試みで、超初心者です)。
Indesignのバージョンは、2014 CCです。

> <0001.eps>などの配置予定の段落を把握したら

こちらは、下記のFunctionを使えば良いのでしょうか?


function my_RegexFindChange(my_range, my_find, my_change) {
//検索の初期化
app.findGrepPreferences = NothingEnum.nothing;
app.changeGrepPreferences = NothingEnum.nothing;
//検索オプション
app.findChangeGrepOptions.includeLockedLayersForFind = false;
~~~~~~~~~~~~省 略~~~~~~~~~~~~~~~
//
app.findGrepPreferences.properties = my_find;
app.changeGrepPreferences.properties = my_change;
//
my_range.changeGrep();//検索と置換の実行//
}

>insertionPoints[0]にrectangleを挿入。
>そのrectangleの中に画像を配置、画像をfit(FitOptions.FRAME_TO_CONTENT)
>とかなんとか…

下記のような、方法で挿入できるのは、なんとなく分かりました。

docObj = app.activeDocument;
imgObj = docObj.textFrames.add();
imgObj.contentType = ContentType.graphicType;
imgObj.place("パス");
imgObj.fit(FitOptions.frameToContent);

上記Functionに追記するときに、insertionPoints[0]を、どこに書けば良いのかわかりませんでした。
初心者で、根本的な部分を理解していないため、的外れな質問をしているかもしれませんが、ご教示宜しくお願い致します。
[8531]Re: スクリプトでの画像の自動配置 投稿者:(z-) 投稿日:2015/03/03 13:38:51
ああ、先で提案したのは、changeGrep() ではなく findGrep()
(検索・置換 ではなく、検索だけに留めて)での運用を想定しておりました。
InDesignの検索置換を使う場合、文字列をグラフィックフレームに検索置換するためにはクリップボードを経由するしか手がありませんので、あらかじめ空のグラフィックフレームを作成し、コピーorカット(Windowsでは"切り取り"でしたっけ)しておく必要があります。

>insertionPoints[0]を、どこに
ぐぐってきましたw こちら参考になるでしょうか。
http://www.my-notebook.net/6fdad194-5268-4693-bf7a-1f660e944be4.html
リンク先では行頭の挿入点にインラインフレームを入れる内容ですが、
今回は<ファイル名>を消しつつになりますね。


あと、
imgObj = docObj.textFrames.add();
imgObj.contentType = ContentType.graphicType;
は、テキストフレームを作成→グラフィックフレームに変換 という二度手間なので
imgObj = docObj.rectangles.add();
の一行にしてしまっていいでしょう。厳密には属性なし長方形ですが画像配置するだけなので影響ありません。
[8533]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/03 15:23:18
ご回答ありがとうございます。

色々試してみたのですが、どうもうまくいきません。
処理は、下記を想定しています...
--------------------------------------------------
1. <ファイル名>の文字列を検索
 (※<ファイル名>は1行にこの文字だけあります)
2. 1.から画像のパスを生成(変数)
3. 検索された文字列の位置に、長方形を配置
4. 長方形に画像(パスは2.で生成された変数)を配置
5. 文字列を画像配置箇所にある、
  <ファイル名>の文字列を削除
6.1~5.を検索対象が無くなるまで繰り返す。
--------------------------------------------------

「文字列を検索・置換するだけ、画像を配置するだけ」
はできるのですが、検索された文字列の位置を取得し、
画像を挿入するところが分かりません。
[8534]Re: スクリプトでの画像の自動配置 投稿者:dot 投稿日:2015/03/03 18:45:26
aaa = docObj.findGrep();

for文でaaaの数だけ
aaa[for文の変数].place(ファイルパス);


何も考えない配置ならこんなんでいけた気がします…
CS3ですが。。。
[8535]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/03 19:18:28
ご回答頂き、誠にありがとうございます。
教えて頂いた方法を追記し、決め打ちの画像で、試してみました。
エラーは出ませんでしたが、画像は挿入されませんでした。

//
aaa = docObj.findGrep();
//
for (x=0; x < aaa; x++)
{
 aaa[x].place("決め打ち画像のパス");
}
//
[8536]Re: スクリプトでの画像の自動配置 投稿者:dot 投稿日:2015/03/03 19:28:55
for (x=aaa.length-1; x > -1; x--)

ではどうでしょうか?
[8537]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/03 19:47:22
dot 様

早速のご回答、感謝致します。
ご指摘のとおり.lengthは必要そうですね。
明日の朝まで、テストできる環境がないので、明日の朝一番に試してみます!
[8540]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/04 10:39:19
dot 様

返信遅くなりまして、すみません。
ご指摘の箇所を修正して、試してみました。
狙い通り、画像を配置できました!
ありがとうございました!!
残りの画像パスを取得し、自動配置する部分をチャレンジしてみます。
また、何かありましたら、質問させてください。
[8542]Re: スクリプトでの画像の自動配置 投稿者:(z-) 投稿日:2015/03/04 10:49:18
※たかたか打ってるうちに進んでいたので再投稿

dot様、補足ありがとうございます。

手元の環境(Mac、CS3~6)では
aaa[x].place("決め打ち画像のパス");
ではなく
aaa[x].place(File("決め打ち画像のパス"));
としないと配置できませんでした。報告まで
[8543]Re: スクリプトでの画像の自動配置 投稿者:Shin 投稿日:2015/03/04 12:53:37
(z-) 様
dot 様

初心者の私に丁寧に解説頂き、感謝いたします!
ファイル名の部分を、bbb = aaa[x].contentsで取得すれば
目的のものができそうです。
ありがとうございました!

for (x=aaa.length-1; x > -1; x--)
{

//ファイル名取得
//<ファイル名>は、<>を削除しておく。
bbb = aaa[x].contents;
//
//fsnameはフォルダ選択ダイアログで取得
aaa[x].place(fsname + "/" + bbb);

}
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)