画像配置のスクリプトでわからないこと

[3739]画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/27(Tue) 12:35:06
環境はMac版CS3です。

1200ほどある画像を、偶数ページに10個ずつ貼り込むというスクリプトを考えています。
InDesign 自動処理実例集』の中から、似たようなスクリプトを拾ってきて、
わからないなりに「ここは必要ないだろうな」というところは削除し、
「必要だろう」というところを追加して、以下のようなスクリプトになりました。

【希望】
横組み偶数ページの右側に、10個の画像が縦に配置され、
それが終わりのページまで繰り返される

【わからないこと】
・最初のページのみ希望の形になるのですが、それ以降は
版面内いっぱいに画像が並べられてしまう。

・画像フレームを角丸(外1mm)にしたいのですが、
その指定がわからない。

何とぞ、アドバイスの程、よろしくお願いします。


(function(){
   if (app.documents.length < 1) {
       alert("あらかじめドキュメントを開いてから実行してください");
       return;
   }
   var extType = "*.psd";
   var dx = 11.85;
   if (dx == null) return;
   var dy = 11.85;
   if (dy == null) return;
   var diff = 4.15;
   if (diff == null) return;
   dx = parseFloat(dx);
   dy = parseFloat(dy);
   diff = parseFloat(diff);
   var pageWidth = app.activeDocument.documentPreferences.pageWidth;
   var pageHeight = app.activeDocument.documentPreferences.pageHeight;
   var unit = "mm";
   var folderObj = Folder.selectDialog("PSD画像のあるフォルダを選択してください");
   if (!folderObj) return;
   var pageNo = parseInt(prompt("割り付けるページ数を指定してください", 2)) - 1;
   if ((pageNo < 0) || (pageNo > app.activeDocument.pages.length-1)){
       alert("割り付けるページは存在しません");
       return;
   }
   var autoFlag = confirm("自動的にページを追加しますか?");
   var fileList = folderObj.getFiles(extType);
   if (fileList.length < 1) {
       alert("割り付ける画像がありません");
       return;
   }
   rulerSetting = app.activeDocument.viewPreferences.rulerOrigin;
   app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.pageOrigin;
   var marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;
   var marginTop = app.activeDocument.pages[pageNo].marginPreferences.top;
   var marginRight = app.activeDocument.pages[pageNo].marginPreferences.right;
   var marginBottom = app.activeDocument.pages[pageNo].marginPreferences.bottom;
   var pageObj = app.activeDocument.pages[pageNo];
   if (pageObj.side == PageSideOptions.leftHand)    {
       var temp = marginLeft;
       marginLeft = marginRight;
       marginRight = temp;
   }
» 1
[3740]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/27(Tue) 12:35:27
【続き】


   var imageX = startX = marginLeft  +91.075;
   var imageY = startY = marginTop +2.275;
   for (var i=0; i<fileList.length; i++){
       imgObj = pageObj.rectangles.add();
       imgObj.move(pageObj);
       imgObj.move(undefined, [1, 0]);
       imgObj.visibleBounds = [imageY+unit, (imageX+dx)+unit, (imageY+dy)+unit, imageX+unit];
       imgObj.strokeColor = app.activeDocument.swatches.item("Black");
       imgObj.strokeWeight = 0.15;
       imgObj.place(fileList[i]);
       imgObj.fit(FitOptions.proportionally);
       imgObj.fit(FitOptions.centerContent);
       imageX = imageX + dx + diff;
       if ((imageX + dx) > (pageWidth - marginRight)){
           imageX = startX;
           imageY = imageY + dy + diff;
           if ((imageY + dy) > (pageHeight - marginBottom)) {
               if (autoFlag == false) {
                   app.activeDocument.viewPreferences.rulerOrigin = rulerSetting;
                   return;
               }
               imageY = startY;
               pageNo = pageNo + 2;
           if (pageNo >= app.activeDocument.pages.length) {
                   pageObj = app.activeDocument.pages.add();
               }else{
                   pageObj = app.activeDocument.pages[pageNo];
               }
               marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;
               marginTop = app.activeDocument.pages[pageNo].marginPreferences.top;
               marginRight = app.activeDocument.pages[pageNo].marginPreferences.right;
               marginBottom = app.activeDocument.pages[pageNo].marginPreferences.bottom;
               if (pageObj.side == PageSideOptions.leftHand)    {
                   var temp = marginLeft;
                   marginLeft = marginRight;
                   marginRight = temp;
               }
               imageX = startX = marginLeft;
           }
       }
   }
   app.activeDocument.viewPreferences.rulerOrigin = rulerSetting;
})();
» 2
[3743]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/27(Tue) 14:20:44
角丸の指定は
cornerOptionで指定するんですね。
参照していたサイトには、cornerEffectと書かれていたので、わかりませんでした。
ところで、角の半径の指定はどのように入れればいいのでしょうか。
今のままだとデフォルトの数値が自動的に指定されてしまいます。
» 3
[3744]Re: 画像配置のスクリプトでわからないこと | 投稿者:PICTRIX | 投稿日:2009/10/27(Tue) 14:26:04
こんにちは。

>・画像フレームを角丸(外1mm)にしたいのですが、

rectangle のプロパティに cornerOption と cornerRadius があります。
これで指定するのではないかと。。。思います。
imgObj.cornerOption = CornerOptions.ROUNDED_CORNER;
imgObj.cornerRadius = 72/25.4;
でしょうか。私、実際やってないので違ったらごめんちゃい。
» 4
[3745]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/27(Tue) 14:49:43
PICTRIXさん、ありがとうございます。

やってみたら、できました。
この部分は、クリアです!
» 5
[3747]Re: 画像配置のスクリプトでわからないこと | 投稿者:mg | 投稿日:2009/10/27(Tue) 17:06:31
>それ以降は版面内いっぱいに画像が並べられてしまう。

最後の方の
imageX = startX = marginLeft;

のところを始めにあわせて

imageX = startX = marginLeft +91.075;

でいきませんか
» 6
[3749]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/27(Tue) 18:39:08
mgさん、ありがとうございます。

imageX = startX = marginLeft +91.075;

を入れる、少し前の

marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;

で止まってしまいました。

ページを自動作成するようにしてあるのですが、
おそらくそれよりも前に、ページ移動の命令が入っているから
なのかなと思っています。

私の手に負えないようなら、ページ数が確定してから
自動ページ作成をなしにして、やればいいかなとか、
消極的な方法で進めてしまおうかと考え始めています……。

また明日、格闘してみます。
» 7
[3750]Re: 画像配置のスクリプトでわからないこと | 投稿者:mg | 投稿日:2009/10/27(Tue) 19:59:20
>marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;
で止まってしまいました。

スミマセンサンプル少なめに試していて気づきませんでした。

変数のpageNoを+2しているのにpages.add()が+1だから、
そのページは無いって怒られてます。

奇数偶数ページの判定はしているようなので
pageNoを+1
ページ追加をpages.add()をspreads.add()
にしてみてはどうですか
» 8
[3752]Re: 画像配置のスクリプトでわからないこと | 投稿者:mg | 投稿日:2009/10/27(Tue) 20:28:13
ごちゃごちゃスイマセン

if(pageObj.side == PageSideOptions.leftHand)?
に対して
else{pageObj = app.activeDocument.speads.add();}
を付け加えてを書き忘れたのと

スクリプト実行時にドキュメントの最終スプレッドが見開きになっていたらいけそう。
» 9
[3755]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/28(Wed) 09:40:12
mgさん、引き続きありがとうございます。

なるほどなぁと思いつつ、
if (pageObj.side == PageSideOptions.leftHand){
の後に、

}else{
pageObj = app.activeDocument.spreads.add();}{

というのを加えてみました。書き方はこの際大目に見てもらって(-_-;)
スクリプト自体はエラーもなく動きました。
ところが最終ページで、画像の張り込みが重なってしまいました。

本来、もうひとつスプレッドが作成されてそこに配置されるべき画像が、
一つ前の、すでに画像が張り込まれているページに、
次の画像が上から重ねて張り込まれてしまっているという状態です。

また、希望としては、張り込むページがすでに存在する場合は、
ページの追加はしてほしくないのですが、
今の状態ですと、すでにページがある場合、それを無視して
新しいスプレッドを作成し、そこに画像を張り込むという
動きになってしまっています。

う?ん、そもそもベースとするスクリプトの選択を間違えたのかな……。
» 10
[3759]Re: 画像配置のスクリプトでわからないこと | 投稿者:mg | 投稿日:2009/10/28(Wed) 14:15:43
ほんとうに、たびたびスイマセン
よくよく考えたらspreadsはよろしくないですね。

1回目の
if (pageObj.side == PageSideOptions.leftHand) {
のあと
else{
pageObj =app.activeDocument.pages.add();
}

2回目の
if (pageObj.side == PageSideOptions.leftHand) {
のあと
else{
pageObj =app.activeDocument.pages.add();
pageNo = pageNo + 1;
}
でどうでしょうか?
» 11
[3763]Re: 画像配置のスクリプトでわからないこと | 投稿者:mg | 投稿日:2009/10/28(Wed) 17:46:25
左右ページとか関係なくとりあえず処理して
あとからページを挿入していくのも手でしょうか?

var doc=app.documents[0];
var pageNo=2;//開始位置
var page=doc.pages;
for(var i=pageNo-1; i<page.length; i+=2){
   doc.pages.add(LocationOptions.AFTER,page[i]);
   }
別工程ということでなく、処理の順番として。
» 12
[3765]Re: 画像配置のスクリプトでわからないこと | 投稿者:PICTRIX | 投稿日:2009/10/28(Wed) 18:24:13
すみません、先ほどの記事は紛らわしいので削除しました。
スプレッド処理で進んでおられる様でなんなんですが。
とりあえず動くようなので載せておきます。途中からですが。

   rulerSetting = app.activeDocument.viewPreferences.rulerOrigin;
   app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.pageOrigin;
   var marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;
   var marginTop = app.activeDocument.pages[pageNo].marginPreferences.top;
   var marginRight = app.activeDocument.pages[pageNo].marginPreferences.right;
   var marginBottom = app.activeDocument.pages[pageNo].marginPreferences.bottom;
   var pageObj = app.activeDocument.pages[pageNo];
   if (pageObj.side == PageSideOptions.LEFT_HAND)    {
       var temp = marginLeft;
       marginLeft = marginRight;
       marginRight = temp;
   }

   // もし最終ページが単ページだったら、とりあえず1ページ追加しておく
   if (  app.activeDocument.pages[app.activeDocument.pages.length - 1 ].side == PageSideOptions.LEFT_HAND ){
       app.activeDocument.pages.add();
       lastPage = 1;
   }else{    lastPage = 0;    }

   var imageX = startX = marginLeft +91.075;
   var imageY = startY = marginTop +2.275;
   for (var i=0; i<fileList.length; i++){
       imgObj = pageObj.rectangles.add();
       imgObj.move(pageObj);
       imgObj.move(undefined, [1, 0]);
       imgObj.visibleBounds = [imageY+unit, (imageX+dx)+unit, (imageY+dy)+unit, imageX+unit];
       imgObj.strokeColor = app.activeDocument.swatches.item("Black");
       imgObj.strokeWeight = 0.15;
       imgObj.place(fileList[i]);
       imgObj.fit(FitOptions.proportionally);
       imgObj.fit(FitOptions.centerContent);

       // もし最後の画像ファイルを処理したら終わり
       if ( i == fileList.length - 1 ) break;    

       imageX = imageX + dx + diff;

       if ((imageX + dx) > (pageWidth - marginRight)){
           imageX = startX;
           imageY = imageY + dy + diff;
           if ((imageY + dy) > (pageHeight - marginBottom)) {
               imageY = startY;
               pageNo = pageNo + 2;
               if (pageNo >= app.activeDocument.pages.length) {
                   // ページ自動追加をしない場合は、ここで終わるのではないでしょうか
                   if (autoFlag == false) {
                       // もしページ自動追加が無しで、最終単ページ処理で追加していたら削除
                       if ( lastPage ){
                           app.activeDocument.pages[ app.activeDocument.pages.length - 1 ].remove( );
                       }
                       app.activeDocument.viewPreferences.rulerOrigin = rulerSetting;
                       return;
                   }
                   pageObj = app.activeDocument.pages.add();
                   // 右ページも創る
                   app.activeDocument.pages.add();
               }else{
                   pageObj = app.activeDocument.pages[pageNo];
               }
               marginLeft = app.activeDocument.pages[pageNo].marginPreferences.left;
               marginTop = app.activeDocument.pages[pageNo].marginPreferences.top;
               marginRight = app.activeDocument.pages[pageNo].marginPreferences.right;
               marginBottom = app.activeDocument.pages[pageNo].marginPreferences.bottom;
               if (pageObj.side == PageSideOptions.LEFT_HAND)    {
                   var temp = marginLeft;
                   marginLeft = marginRight;
                   marginRight = temp;
               }
               imageX = startX = marginLeft + 91.075;
           }
       }
   }
   app.activeDocument.viewPreferences.rulerOrigin = rulerSetting;
})();
» 13
[3769]Re: 画像配置のスクリプトでわからないこと | 投稿者:(-_-メ) | 投稿日:2009/10/29(Thu) 17:09:04
mgさん、PICTRIXさん、ありがとうございました。

No.3755の書き込みの後、スクリプトを見直していたら、ほぼ希望通りの動きになるスクリプトができ上がりました。でも、なぜか余分なページが追加されてしまっていたんですが、もうこれでいいかなと妥協しかかっていたところに、新たな書き込みが!

完璧なスクリプトを提供していただき、本当に助かりました。

スクリプトを試したとき、なぜか最初の一回だけおかしな張り込み状態になったのですが、それ以降は素晴らしい結果になりました。

この度は、本当にありがとうございました。
この記事の書き込み元へのリンク (コメントや質問などはこちらへどうぞ)

このページをシェア