背幅を入力して表紙(貼込)用のドキュメントを作成するスクリプト
入稿された表紙のデータが見開きになっていない場合、InDesignに貼って見開きのPDFを作成することがあります。また見開き(背幅込)で入稿されたAIデータでも勤務先ではAIから直接PDF作成せずに、一度InDesignに貼りこんでからPDF作成という流れで統一しています。
ページものの表紙はページ数によって背幅が変わるので、テンプレートの準備はあまり意味がありません。これをスクリプトで解決できないか、ということで考えてみました。
主に仕上がりサイズはB5またはA4のページものが多数だと思いますのでそれ以外のサイズは想定していません。
やってみたいこと
背幅を入力するだけでB4長辺・A3長辺に背幅を足したドキュメントを作成する
下のような画面を用意し、仕上がりサイズと背幅の設定、貼込用のグラフィックフレームを全面塗り足しありで作成するか、表1~表4個別・塗り足しなしで作成するかを設定します。
この画面の作成はリプちんさんのスクリプちんを参考にさせていただきました。
dtpscriptin.com
「全面」にチェックをいれて実行すると結果的に図のようなドキュメントが作成されます。
※グラフィックフレームをドキュメントサイズよりも天地左右5mmずつ大きくしているのは貼り込んだAIやPDFトンボの位置がずれてないかわかりやすくするためです。
「個別」にチェックをいれて実行すると結果的に図のようなドキュメントが作成されます。
背幅が分かるように折りトンボを追加・仕上がりが分かるように罫線も追加
「折りトンボ」というレイヤーと「わく」というレイヤーを作成して、それぞれ0.1mmのスミ罫を描画します。校正提出時にお客さんに分かりやすいようにしておきます。もちろんカッター等で仕上げて提出する場合などは不要ですが…
こんな感じで作りました
背幅を入力しないと入力を促すアラートが出ます。背幅が0でいいときは0を入力します。
//背幅の入力画面 var uDlg = new Window("dialog","表紙サイズ設定",[0,0,190,175]); var sText = uDlg.add("statictext",[25,10,150,25], "仕上がりサイズを選択"); var cb01 = uDlg.add("radiobutton", [25, 30, 75, 60], "B5"); var cb02 = uDlg.add("radiobutton", [100, 30, 150, 60], "A4"); var sText = uDlg.add("statictext",[25,58,100,75], "背幅を入力"); var sehaba = uDlg.add("edittext",[95,54,125,80]); var sText = uDlg.add("statictext",[130,58,180,75], "mm"); var sText = uDlg.add("statictext",[25,90,150,105], "フレームサイズを選択"); var cb03 = uDlg.add("radiobutton", [25, 110, 75, 140], "全面"); var cb04 = uDlg.add("radiobutton", [100, 110, 150, 140], "個別"); var okBtn = uDlg.add("button",[45,140,45+100,140+20], "OK"); sehaba.active = true; cb01.value = true; cb03.value = true; uDlg.center(); var rtType = uDlg.show(); var sehabaX = sehaba.text;//入力された数値 //処理の実行 if((sehaba.text=="")&& (rtType==1)){ //背幅を入力しないままOKを押すとアラート alert("数値を入力してください"); }else{ //OKボタンを押すと処理開始 if(rtType==1){ DocAdd(); //閉じるボタンを押すと終了 }else (rtType==2){ exit(); } } //メイン処理 function DocAdd(){ doc = app.documents.add(); var dp = doc.documentPreferences; var sumB5 = 364+Number(sehabaX)+"mm"; var sumA4 = 420+Number(sehabaX)+"mm"; var tanpen; if(cb01.value) { dp.pageWidth = sumB5; dp.pageHeight = "257mm"; tanpen =182; }else{ dp.pageWidth = sumA4; dp.pageHeight = "297mm"; tanpen =210; } //マスターページのマージン・段組設定 docSet(); //グラフィックフレームを作成 var lay1 = doc.layers[0]; var rct1 =msp.rectangles.add(); if(cb03.value) { //全面:塗り足しありで作成 rct1.contentType = ContentType.GRAPHIC_TYPE; rct1.geometricBounds=[msp.bounds[0] - 5, msp.bounds[1] - 5, msp.bounds[2] + 5, msp.bounds[3] + 5]; }else{ //H1~H4個別:塗り足しなしで作成 rct1.contentType = ContentType.GRAPHIC_TYPE; rct1.geometricBounds=[msp.bounds[0], msp.bounds[1], msp.bounds[2], msp.bounds[3]/2-(sehabaX/2)]; var rct2 =msp.rectangles.add(); rct2.contentType = ContentType.GRAPHIC_TYPE; rct2.geometricBounds=[msp.bounds[0], msp.bounds[1]+tanpen+Number(sehabaX), msp.bounds[2], msp.bounds[3]]; } //折りトンボの追加 var lay_se = doc.layers.add({name:"折りトンボ"}); var gl1 = msp.graphicLines.add(); gl1.geometricBounds=["-3mm", tanpen, "-2mm", tanpen]; gl1.strokeColor = doc.swatches.itemByName("Registration"); gl1.strokeWeight = "0.1mm"; var gl2 = gl1.duplicate(undefined, [0, Number(dp.pageHeight)+5]); var ST = msp.groups.add([gl1, gl2]); ST.duplicate(undefined, [sehabaX, 0]); lay_se.locked = true; //仕上がり罫を作成 siagariK(); } function docSet(){ msp = doc.masterSpreads[0].pages[0]; mg =msp.marginPreferences; mg.columnCount = 2; mg.columnDirection = HorizontalOrVertical.HORIZONTAL; mg.columnGutter = sehabaX; } function siagariK(){ var lay_waku = doc.layers.add({name: "わく"}); var imgObj = msp.rectangles.add(); with(imgObj){ contentType = ContentType.GRAPHIC_TYPE; geometricBounds =msp.bounds; strokeWeight = "0.1mm"; strokeColor = "Black" fillColor = "None" } lay_waku.locked = true; lay_waku.visible = false; //一番下のレイヤーをアクティブに doc.activeLayer= doc.layers.lastItem(); }