|
はじめまして。
複数の文字列を同時に置き換えつつ、それらの書体を変更する、 というJavaScriptを作ろうとしているのですが (JSでなければならない理由はとくにありません)、 難儀してしまい、以前から勉強させていただいていたこちらにご相談に上がりました。
やりたいことは、 プリンター → プリンタ 第三セクター → 第三セクタ デザイナー → デザイナ などと一度に複数の置換をしつつ、その部分だけを 別の書体に置き換えるという作業です。 例えば、全体の文章が明朝で書かれているとして、置き換えられた 「プリンタ」「第三セクタ」「デザイナ」といった部分だけが 太字ゴシックになっている、という状態です。
ネットで検索したサンプルを元に、下記のようにしています。
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
FindString = "プリンター"; ChangeString = "プリンタ"; Kana = true; //カナ識別 ZenHan = true; //全半角識別 findChange();
FindString = "第三セクター"; ChangeString = "第三セクタ"; Kana = true; ZenHan = true; findChange();
FindString = "デザイナー"; ChangeString = "デザイナ"; Kana = true; ZenHan = true; findChange();
function findChange(){ app.findPreferences = NothingEnum.nothing; app.changePreferences = NothingEnum.nothing; FindString = app.activeDocument.search(FindString,Kana,ZenHan, false, false, ChangeString); }
---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
いちおう、複数の置換を一度に行なう、という所までは出来たのですが、 同時に書体を変更する、ということが出来ずにいます。
findChange()内で、FontItem = app.fonts.item("書体名");などとしたうえで、 FindStringやChangeStringに対しappliedFont = FontItem;などとしてみたりと 種々試してみたものの、目的部分を取得して書体を適用するというのが出来ずにいます。
類似のサンプルも探してみたのですが、今のところ見つけられず、 こちらにご相談にあがりました。 動作させたい環境は、MacOS 10.5のInDesign CS3です。
何卒よろしくお願い申し上げます。
|
No.1861 2008/10/20(Mon) 19:18:46
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3
|
Re: JavaScriptでの一斉置換 / せうぞー |
|
|
No.1862 2008/10/20(Mon) 22:53:26
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; ja-jp) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1
|
|
Re: JavaScriptでの一斉置換 / たぐ |
|
|
|
ご回答ありがとうございます。
しかし、すみません…。 CS2と3を行ったり来たりで実験してたので 記憶がごっちゃになっておりました。 上記のスクリプトはCS2でだけ動いておりました…。
CS3では20行目で 「オブジェクトはプロパティまたはメソッド'findPreferences'を サポートしていません」とエラーが出てしまい、 そもそも上記のスクリプトが動いてませんでした。
まずここのCS3への対応のさせ方が分からず、アドバイスいただいた 「var my_font = app.fonts.item("小塚明朝 Pro R"); app.changeTextPreferences.appliedFont= my_font;」 の部分については、今のところ確かめられてません。 せうぞー様のお手元ではCS3環境で20〜22あたりも動きましたでしょうか…?
var my_font以下の2行については、きっと関数findChange()の どこかに追加するんですよね?
たびたびで申し訳ありません。よろしくお願い申し上げます。
p.s. 「クエリを連続適用」は存じ上げておりました。 私にはまだ敷居が高そうですが、勉強したいと思います。
|
No.1864 2008/10/21(Tue) 00:00:22
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3
|
|
Re: JavaScriptでの一斉置換 / せうぞー |
|
|
|
>せうぞー様のお手元ではCS3環境で20〜22あたりも動きましたでしょうか…?
えーっと、このへんの書き方はInDesign CS3で変更されました。 単なるテキスト置換ならばfindPreferencesはfindTextPreferencesになるかと思います。くわしくはオブジェクトモデルなどをご覧ください。
>var my_font以下の2行については、きっと関数findChange()の どこかに追加するんですよね? search()する前なら、いつでもいいと思います。
|
No.1865 2008/10/21(Tue) 00:42:04
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; ja-jp) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1
|
|
Re: JavaScriptでの一斉置換 / せうぞー |
|
|
|
>JSでなければならない理由はとくにありません
ということでしたら、InDesign CS3の正規表現で ↓検索 (プリンタ|第三セクタ|デザイナ)ー ↓置換 $1 ↓置換形式 ゴシック みたいな感じで一度に検索置換できます。
|
No.1866 2008/10/21(Tue) 00:53:11
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; ja-jp) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1
|
|
Re: JavaScriptでの一斉置換 / たぐ |
|
|
|
CS2では function findChange(){ app.findPreferences = NothingEnum.nothing; app.changePreferences = NothingEnum.nothing; my_font = app.fonts.item("書体名"); app.changePreferences.appliedFont= my_font; FindString = app.activeDocument.search(FindString,Kana,ZenHan, false, false, ChangeString); } とすることで、目的の置換が出来ました (おそらくRとかMとかのウェイトは別途設定する必要があるのだと思いますが)。
ただ、本来の目的のCS3では function findChange(){ app.findTextPreferences = NothingEnum.nothing; app.changeTextPreferences = NothingEnum.nothing; var my_font = app.fonts.item("書体名 ウェイト"); app.changeTextPreferences.appliedFont= my_font; FindString = app.activeDocument.search(FindString,Kana,ZenHan, false, false, ChangeString); } としたときに、最後の行で「activeDocument.search();」が関数でない、 とエラー(エラー番号:24)が出てしまいます。 恐らくこれも、私がCS2以前とCS3の書き方の違いを理解できてないだけなのだろうと 思いますが、search();が関数でない…、というのはどういうことなのでしょう…。 かといってapp.activeDocumentを改変したり削ったりするとundefindになってしまい(当然か)、 findTextやchangeTextでは、受け取る値が違うと…。 CS3ではsearch();に変わる別の書き方があるのでしょうか?
|
No.1869 2008/10/22(Wed) 00:21:42
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3
|
|
Re: JavaScriptでの一斉置換 / せうぞー |
|
|
|
>search();が関数でない…、というのはどういうことなのでしょう…。
InDesign CS3では廃止されたメソッドだからです。
>changeTextでは、受け取る値が違うと…
引数が違うと思います。 あるいは引数なしで findChangeGrepOptions findTextPreferences changeTextPreferences の各属性でコントロールするとか。
|
No.1870 2008/10/22(Wed) 01:34:06
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_5_5; ja-jp) AppleWebKit/525.18 (KHTML, like Gecko) Version/3.1.2 Safari/525.20.1
|
|