|
始めて投稿させていただきます。
環境はindesignCS3 Mac OS10.5.5です。
今回作業において 全ページに1点ずつ画像が配置してあるのですが、 その全ページの画像フレームを 原点センターから上下に1mm 原点ノド元から0.5mmプラスし
画像フレームの原点を小口から10mm、天から15mmに設定をしなければなりません。
私自身、参考に自動処理実例集や、せうぞー様など多数の方のscriptなどを拝見し、学んでいるのですが簡単にはいきませんでした。
参考までになにか方法やこのサイトいいよとかあれば、ご伝授していただきたいのです。
私がScriptを作成するにあたり、行き詰まった箇所は
・全ページ対しての処理 ・偶数ページと奇数ページでの座標違いの処理 ・画像フレームサイズを変更するための記述
です。 小さな事で構いません。 なにかこれから先こうなった時、自分自身で解決できるようになりたいので。
ご指導お願いします。
|
No.2654 2009/03/25(Wed) 11:24:39
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
Re: scriptでの動作 / naja |
|
|
|
スクリプトの言語は何ですか? インデンさんが書いたものがあれば、まずそれを先に書いてください。 それとも全てを誰かに書いてほしいと?
|
No.2656 2009/03/25(Wed) 12:09:29
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / インデン |
|
|
|
<naja様
何か肝に触るような事がありましたら、先に謝ります。 すみませんでした。
全てを誰かに書いてほしいとは言っていません。 なにか部分だけでも解説なりをいただきたいのです。
自分自身実際なにもプログラム関係は分からないので 参考になることだけでもと思い投稿しました。
scriptはjavascriptです。
お恥ずかしいですが、投稿記事にあるますように 結局、要点の箇所が分かっていませんので、このような形になっています。
(function (){ var docObj = app.activeDocument; var pageObj = app.activeDocument.pages; var imgObj = app.activeDocument.rectangles[0]; imgObj.move(["10mm","15mm"]); for (i = 0 ; i < docObj.pages.length ; i++) ; })();
|
No.2657 2009/03/25(Wed) 12:25:44
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / naja |
|
|
|
>何か肝に触るような事がありましたら、先に謝ります。
いえいえ、怒っているわけではありません。 せうぞーさんも書いておられるように、コードに関する質問はコードを示すべきだと思うのです。
いまちょっと忙しいので、夕方〜夜に改めてお返事させていただきます。 その間にどなたかが返答されるかもしれません。
|
No.2659 2009/03/25(Wed) 12:35:01
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / インデン |
|
|
|
naja様 お忙しい中、返信ありがとうございます。 お願いいたします。
|
No.2660 2009/03/25(Wed) 12:48:49
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / . |
|
|
|
んなとこでいかが?
var docObj = app.activeDocument;
for (i = 0 ; i < docObj.pages.length ; i++) { docObj.pages[i].rectangles[0].move("by",["10mm","15mm"]); }
|
No.2661 2009/03/25(Wed) 13:17:01
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
|
|
Re: scriptでの動作 / . |
|
|
|
えっと、移動が1mmの0.5mmだから、 docObj.pages[i].rectangles[0].move("by",["0.5mm","1mm"]); ですね。失礼。
|
No.2662 2009/03/25(Wed) 13:20:04
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)
|
|
Re: scriptでの動作 / naja |
|
|
|
>・全ページ対しての処理
これは.さんが既に示していらっしゃいます。
for (i = 0 ; i < docObj.pages.length ; i++) { //ページオブジェクトdocObj.pages[i]にたいしてやりたいこと }
になります。 しかし、これがいつも正解とは限りません。 いつも「全ページに1点ずつ画像が配置してある」とは限らないからです。 画像がまったくなかったり、たくさんあったりしたら、またつまずいてしまうかもしれません。 ドキュメントに含まれる画像すべてを対象にすれば、今回も場合も大丈夫でしょう。
var docObj = app.activeDocument; var imgObj = docObj.allGraphics; for (var i = 0; i < imgObj.length; i++) { var graphicFrame = imgObj[i].parent; //graphicFrameにたいしてやりたいこと }
>・偶数ページと奇数ページでの座標違いの処理
環境設定の「単位と増減値」の「定規の単位」の「開始位置」をページにすれば、この違いを気にしなくてすみます。 もちろん、スクリプトでも変更できます。
var docObj = app.activeDocument; docObj.viewPreferences.rulerOrigin = RulerOrigin.PAGE_ORIGIN;
通常、こうした変更をスクリプトで行う場合は、現在の設定を記憶させておいて、処理前に設定を変更し、処理後に(またはエラー時に)元の設定へ戻す必要があります。
>・画像フレームサイズを変更するための記述 .さんが示された方法は、相対位置を変更する方法です。もちろんルーラーの座標どおりに移動させることもできます。やり方はすでにインデンさんが示されたとおりです。 フレームサイズそのものを変更したいときは、2種類のプロパティを使い分けます。 graphicFrame.visibleBounds;//線幅を含んだ座標 graphicFrame.geometricBounds;//線幅を含まない座標 座標はともに[y1, x1, y2, x2]の配列です。
あとはこの組み合わせです。 頑張ってください。
|
No.2665 2009/03/25(Wed) 18:01:42
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / インデン |
|
|
|
.様、naja様ありがとうございます。
投稿してからもいろいろと自分なりに作成してみました。
おっしゃるように座標違いなどが発生しました。
作成している時に気になった箇所がありましたので質問させてください。
お〜まちさんが提供されている Scriptのオブジェクトモデルがありますが、これを元にどのように作成すれば良いのでしょうか?
extendscript内にある、ヘルプからモデル図を見てもどうしても使い方が分からないのです。
何度も質問してすみません。
|
No.2667 2009/03/25(Wed) 18:15:50
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.7) Gecko/2009021906 Firefox/3.0.7
|
|
Re: scriptでの動作 / インデン |
|
|
|
なんとか私なりにしてみたんですが,右ページのみ引っかかる箇所があるのです。 右ページは横幅のサイズがページによりバラついていて,座標位置が定まりません。そこで,作成してみたのですが計算する箇所がひっかかるのですが,なにかご指導していただきたいのです。お願いします。
var docObj = app.activeDocument; //indesignドキュメント選択 var docWidth = docObj.documentPreferences.pageWidth; //選択したドキュメントの横幅
for (var i = 0 ; i < docObj.pages.length ; i++) if (app.activeDocument.pages[i].side == PageSideOptions.rightHand) //右ページのみ選択
var pageObj = docObj.pages[i].allGraphics.Width; //右ページにある画像の横幅 var Xwidth = docWidth - pageObj - 10;
docObj.pages[i].rectangles[0].move(["Xwidth","15mm"]); //指定値に移動
|
No.2734 2009/04/06(Mon) 17:17:16
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; ja-JP-mac; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8
|
|
Re: scriptでの動作 / 梅花藻 |
|
|
|
いろいろ突っ込みどころが多すぎて、どこから指摘すべきか…… もう少し、スクリプトが何をしているのか流れが追えるようにしないと。
for文、if文は続く処理を{}でくくります。どこまでを繰り返すのか、どこまでが条件判断に続く処理なのか、はっきり理解してください。 ({}を省略した場合は、続く一文だけを実行します。)
docObj.pages[i].allGraphicsは Array of Graphic (Graphicクラスの配列)なので docObj.pages[i].allGraphics.Width という書き方はできません。 加えて、GraphicクラスにはWidthというプロパティはないので、幅が欲しかったらnajaさんが指摘されているように、visibleBounds等から計算して求めなければなりません。
それから、"Xwidth"は文字列であって、変数Xwidthとは別物です。
多分、インデンさんが書きたかったのは以下のようなスクリプトではないかと思います。
var docObj = app.activeDocument; //indesignドキュメント選択 var docWidth = docObj.documentPreferences.pageWidth; //選択したドキュメントの横幅
for (var i = 0 ; i < docObj.pages.length ; i++) { if (app.activeDocument.pages[i].side == PageSideOptions.rightHand) { //右ページのみ選択 try {//画像がなかった時、エラーにならないように with (docObj.pages[i].allGraphics[0].parent){//画像の親(フレーム)が対象 var myGraphicFrameWidth = visibleBounds[3] - visibleBounds[1]; var xPos = docWidth - myGraphicFrameWidth - 10; //移動先のx座標 move([xPos,"15mm"]); //指定座標に移動 } } catch(e){} } }
|
No.2736 2009/04/07(Tue) 14:48:11
Mozilla/5.0 (Macintosh; U; PPC Mac OS X; ja-jp) AppleWebKit/523.12 (KHTML, like Gecko) Version/3.0.4 Safari/523.12
|
|