|
CC2015です。 配置ピクトを右に2.5mm移動させたいのですが インラインになってるものが混じっていてエラーが出ます。 親のテキストフレームを動かすにはどう指示すればいいのでしょうか。 現状はこれです。よろしくお願いします。
var my_doc = app.activeDocument; var my_image = my_doc.allGraphics;
for (var i = (my_image.length - 1); i >= 0; i--) { var tmp_name = my_image[i].itemLink.name; if (tmp_name.match( /^pict.+.eps/)) { try{ my_image[i].parent.move("by",[2.5,0]); } catch(e) { } } }
|
No.9256 2017/06/03(Sat) 11:21:02
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
|
Re: 親の親フレームの選び方 / uske_S |
|
|
|
azさん、こんにちは。 ひとつ確認させてください。 インラインのオブジェクトの場合は、オブジェクトそれ自体ではなく、 配置されている親のテキストフレームを移動する、 ということなのですね? また、移動させるオブジェクトは「pict」で始まる、拡張子「.eps」 であることが条件ということですね?
var my_doc = app.activeDocument; var my_image = my_doc.allGraphics; for (var i=0; i<my_image.length; i++){ var tmp_name = my_image[i].itemLink.name; if (/^pict.+\.eps$/.test(tmp_name)){ if (my_image[i].parent.parent.constructor.name !== "Character"){ my_image[i].parent.move("by",[2.5,0]); } else { my_image[i].parent.parent.parentTextFrames[0].move("by",[2.5,0]); } } }
こんな感じになりました。 単純にtmp_nameが正規表現とマッチするかだけの比較であればtestメソッドで十分と思います。 正規表現も、拡張子だけを特定するのであれば「\.eps$」として、 「.」をエスケープする 「$」をつけて文末を指定する まで絞り込んだほうがより安全だと思います。 正規表現「^pict.+.eps」だと、例えば「pict_beeps.psd」とか、 間にepsという文字列さえれば構わないので全然違うものもヒットします。
で、本題の親のテキストフレームですが、これは力業?です。 アンカーとして挿入されているgraphicオブジェクトのparent(Rectangle)の parentがCharacterオブジェクトになるので、 さらにそこからparentTextFrames[0]として親のテキストフレームを特定します。 なんかもっとうまい方法があると思うのですが、ぱっと思いついた方法がこれでした(^^; parentTextFramesプロパティ自体はCS5からの実装ですので、 過去のバージョンへの対応は別の方法が必要になります。 (parentを辿ってconstructor.name === "TextFrame"を探す?)
今回はある程度状況が限定できたのでtry・catch構文は見送りましたが、 もしエラーで止まるようならば書き加えるなりしていただければと思います。
|
No.9257 2017/06/03(Sat) 13:46:11
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
|
|
Re: 親の親フレームの選び方 / az |
|
|
|
uske_Sさん、希望通りに動きました! ありがとうございます。 正規表現も勉強になりました。
一つお聞きしたいことがあります。 "ピクト"とカタカナから始まるリンクファイルもあるのですが うまいことヒットしません。日本語ファイル名はダメなのでしょうか。
|
No.9258 2017/06/03(Sat) 21:52:32
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
|
|
Re: 親の親フレームの選び方 / uske_S |
|
|
|
azさん、こんにちは。 日本語ファイル名がだめ、ということはありませんが、 ファイルシステムの都合で、濁点・半濁点は何かと面倒になります。 参考: http://tama-san.com/combining_character_sequence/
今回のケースでは、仮に下記のようにすればどうでしょうか。 var my_doc = app.activeDocument; var my_image = my_doc.allGraphics; for (var i=0; i<my_image.length; i++){ var tmp_name = decodeURI(my_image[i].itemLink.name); if (/^(pict|ピクト).+\.eps$/.test(tmp_name)){ if (my_image[i].parent.parent.constructor.name !== "Character"){ my_image[i].parent.move("by",[2.5,0]); } else { my_image[i].parent.parent.parentTextFrames[0].move("by",[2.5,0]); } } }
変更点は var tmp_name = decodeURI(my_image[i].itemLink.name); if (/^(pict|ピクト).+\.eps$/.test(tmp_name)){ の部分です。 decodeURIメソッドを使って取得した文字列をデコードします。 こうすれば「ピクト」で始まるファイルもヒットすると思います。
|
No.9259 2017/06/06(Tue) 12:36:24
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
|
|
Re: 親の親フレームの選び方 / az |
|
|
|
uske_Sさん、遅くなってすみません。ばっちり動きました。 解説とてもありがたいです。感謝します。
|
No.9260 2017/06/09(Fri) 20:46:30
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.1 Safari/603.1.30
|
|