|
InDesign CS5(ver 7.0.4), Windows XPです。
文章を選択した状態で、その文章があるページのマスターページを差し替えるスクリプトを作成しました。
var myDoc = app.activeDocument; var myPage = myDoc.selection[0].parentTextFrames[0].parentPage; myPage.appliedMaster = myDoc.masterSpreads.item("B-マスター");
ここまではできたのですが、この文章をドキュメント全体から検索して処理していくやり方でつまづいています。 ご助言いただけると幸いです。よろしくお願いします。
|
No.6375 2011/12/19(Mon) 18:38:39
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
Re: マスターページを差し替えるスクリプト / オメガ |
|
|
|
Subi様
スクリプトでどういった処理を目標としているのか、ゴール地点がいまいち見えないので、あくまで想像ですが…
特定の文字列を検索して、検索に引っかかったページに特定のマスターを適用する、といった処理をされたいのでしょうか?
たとえば、ページ上のテキストフレームに“B-マスター”とか“C-マスター”とか、“Aパターン”“Bパターン”と入れておき、スクリプトを実行すると、それぞれのページに特定のマスターが適用される、みたいな。
で、まずは文字列を選択しているページに特定のマスターを適用することができましたが、ドキュメント全体から特定の文字列を検索して文字を選択させる方法がわかりません、ということでしょうか?
|
No.6378 2011/12/20(Tue) 01:44:33
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
|
|
Re: マスターページを差し替えるスクリプト / Subi |
|
|
|
オメガ様、ありがとうございます。
>で、まずは文字列を選択しているページに特定のマスターを適用することができましたが、ドキュメント全体から特定の文字列を検索して文字を選択させる方法がわかりません、ということでしょうか?
すみません、説明不足でした。その通りです。 具体的にはこのような状態です。
・横組みの本文にA-マスターを適用している状態 ・ページ下部にInDesignの機能で脚注を入れています。 ・脚注参照番号はページ毎に*1〜*9以内で上付き文字(スタイルではない) ・脚注には「脚注」という段落スタイルを適用しています。
ここから、脚注があるページのマスターページをB-マスターに変更したいのです。 最初はテキスト*1〜*9を正規表現検索で検索して該当ページに適用、という方向で考えていましたが、段落スタイルや上付き文字を検索する方法もあると掲示板に書き込んだ後で気づきました。 これ以外のアプローチでもかまいませんので、いい方法がありましたらアドバイスをお願いします。
|
No.6384 2011/12/20(Tue) 10:36:06
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
|
Re: マスターページを差し替えるスクリプト / 流星光輝  |
|
|
|
1)上付でも段落スタイルでも、どちらでもいいので、Scriptで検索する 2)見つかった個数ループさせて、該当箇所のページを取得(どんな方法でもいいです) 3)上記2)のページに対して、適用するマスターを設定
こんな感じですね。あとは、コードに落としこむだけですね。 出来るだけ御自身で書いてみて、行き詰まったら、コード出して再質問してください。
|
No.6390 2011/12/21(Wed) 00:55:03
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
|
|
Re: マスターページを差し替えるスクリプト / オメガ |
|
|
|
脚注は使ったことがないのですが、段落スタイルなどで特定できるのであれば検索置換(厳密には検索機能)で処理するのが妥当かと思います。検索置換の方法はスクリプティングガイドにも載っていますし、ネット上でもすぐに見つかると思います。
検索置換で実装すれば、特定の文字列やスタイルなどを検索してマスターページを置換できるようになりますね。もちろん正規表現検索という手もありますし。文字入力欄を付けて、適用するマスターをドロップダウンで選べるようにするなど、工夫次第ではかなり便利なものになるのではないでしょうか。
脚注限定ならページ上のテキストフレームのfootnotes.lengthを調べていって0以上のものがあれば、そのページにマスターを適用、処理を抜けて次のページへ という方法もあると思いますが、検索置換を使った方が処理が速そうな気がします。
|
No.6392 2011/12/21(Wed) 07:10:37
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
|
|
Re: マスターページを差し替えるスクリプト / Subi |
|
|
|
流星光輝様、オメガ様、ありがとうございます。
脚注番号は番号がテキストで入っているのではなく、マーカーが挿入されていることにいまさら気づきました。
var myRange = app.selection; myRange = (myRange.length > 0) ? myRange[0] : app.activeDocument;
app.findGrepPreferences = NothingEnum.nothing; app.findChangeGrepOptions.includeLockedLayersForFind = false; app.findChangeGrepOptions.includeLockedStoriesForFind = false; app.findChangeGrepOptions.includeHiddenLayers = false; app.findChangeGrepOptions.includeMasterPages = false; app.findChangeGrepOptions.includeFootnotes = true; app.findChangeGrepOptions.kanaSensitive = true; app.findChangeGrepOptions.widthSensitive = true;
// 脚注参照マーカーで検索 // app.findGrepPreferences.findWhat = "~F";
app.findGrepPreferences.findWhat = ""; app.findGrepPreferences.appliedParagraphStyle = "脚注";
var f = myRange.findGrep();
for(var i = f.length-1; i > -1; i--){ var myPage = f[i].parentTextFrames[0].parentPage; try { myPage.appliedMaster = app.activeDocument.masterSpreads.item("B-マスター"); } catch(e){ } }
おかしい点などありましたらご指摘よろしくお願いします。 また、テキストの編集などでページが動いた後に、脚注がなくなったBマスターのページをAマスターに戻す処理が必要になりますね… 上の処理の前に、全ページにAマスターを適用する処理を追加する、という感じでOKでしょうか。
|
No.6402 2011/12/21(Wed) 17:45:41
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
|
Re: マスターページを差し替えるスクリプト / 流星光輝  |
|
|
|
提示されたコードで動作したと理解しますね。
>また、テキストの編集などでページが動いた後に、脚注がなくなったBマスターのページをAマスターに戻す処理が必要になりますね… >上の処理の前に、全ページにAマスターを適用する処理を追加する、という感じでOKでしょうか。
全ページにAマスターを適用しても良ければいいんでしょうが, 私的には, ・マスターが何枚あるのか分からない点 ・マスター「なし」がページに適用されていないか・それは変更してはいけないマスター適用なのではないか 等を考慮しつつ, このスクリプトを一回でも実行した場合, Bマスターが適用されているページが1以上あるはずなので, まずはBマスターの適用されているページにAマスターを適用します。 その上で,提示してくださったコードの処理を行えばいいのではないかと思います。
|
No.6403 2011/12/21(Wed) 18:03:32
Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
|
|
Re: マスターページを差し替えるスクリプト / Subi |
|
|
|
・もしBマスターのページがあればそのページにAマスターを適用する ・その上でAマスターのページのみに上の処理をかける このように改良しようと思います。 あとは、オメガ様の案の検索文字入力欄と適用するマスターをドロップダウンで選ぶダイアログを出せればなおよいですね。
|
No.6404 2011/12/21(Wed) 18:46:51
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
|
Re: マスターページを差し替えるスクリプト / オメガ |
|
|
|
>・もしBマスターのページがあればそのページにAマスターを適用する >・その上でAマスターのページのみに上の処理をかける AマスターとBマスターのみの場合は問題ないでしょうけど、もしCマスターなどがあって、脚注がAマスター以外のページに行ってしまう場合、 >・その上で“Aマスターのページのみ”に上の処理をかける だとCマスターなどAマスター以外のページの脚注が処理されません。もしそういう構成ならドキュメント全体で処理をしないとまずいです。
このスクリプト専用の処理になりますが、提示されたコードに(ドキュメント全体を検索する場合に)一旦BマスターをAマスターにする処理を組み込んでおけば1つのスクリプトで済むのではないでしょうか。 (私が言ったことなので恐縮ですが…)今のスクリプトにダイアログをつけて検索文字列が変更できるような汎用性を持たせるのであれば、BマスターをAマスターに直す処理を別のスクリプトで書かないとなりませんね。
|
No.6405 2011/12/21(Wed) 20:41:28
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
|
|
Re: マスターページを差し替えるスクリプト / Subi |
|
|
No.6407 2011/12/24(Sat) 12:56:30
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
|
Re: マスターページを差し替えるスクリプト / オメガ |
|
|
No.6408 2011/12/24(Sat) 14:03:53
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/534.52.7 (KHTML, like Gecko) Version/5.1.2 Safari/534.52.7
|
|
Re: マスターページを差し替えるスクリプト / Subi |
|
|
|
var changeMaster = app.activeDocument.masterSpreads.item("B-マスター"); var replaceMaster = app.activeDocument.masterSpreads.item("A-マスター");
for(var myCounter = 0; myCounter < app.activeDocument.pages.length; myCounter++){ myMaster = app.activeDocument.pages.item(myCounter); if (myMaster.appliedMaster == changeMaster){ myMaster.appliedMaster = replaceMaster; } }
オメガ様の宿題、B-マスターをA-マスターに差替えるスクリプトです。これを前に書き込んだスクリプトの頭に加えて、とりあえず自分が作りたかった形になりました。 しかし、やはり見つけたスクリプトの方が使い勝手がいいですね^_^; オメガ様、お付き合いありがとうございました。
|
No.6411 2011/12/26(Mon) 18:25:57
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; MDDR; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
|
|