見開きPDFをInDesignを使って単ページにバラすスクリプト
ページ物が見開き(PDF)で入稿された場合の対応
ページもののデータが見開きのPDFで入稿されることがたまにあります。しかし見開きで入稿されてしまうと、中綴じにしろ無線綴じにしろ、面付けできません。勤務先では面付作業は面付ソフトを使いますが、その際は単ページのPDFを使って面付していきます。
面付について簡単に説明すると、例えばA4, 8ページ, 中綴じ, 左開きという仕様で、左右返しで印刷する場合であれば図のような面付になります。
菊判半裁というサイズにはA4が4ページ(両面で8ページ)面付できます。
8ページ・中綴じの面付なのでおもて面は、見開きPDFが使えるのではと思われるかもしれませんが、ページ数が変われば面付も当然変わってきます。うら面の図がわかりやすいと思いますが、見開きのPDFデータとは全然違う面付になります。
なので見開きのPDFで入稿されてしまった場合は「単ページのPDFで再入稿してください」とお願いしているのですが、不思議なことにまれに「単ページで書き出せませんので、なんとか対応できませんか」とか、「それは御社の仕事でしょう」となんとも高飛車なお返事をいただくことがあります。
見積の料金的にそれってどうなんですか、って営業に言っても、作業が進まないから対応してあげて、なんていわれることも多く、仕方なくため息をつきながら対応してます。
では実際どうバラしていくのか。
大まかにいうと、①見開きPDFをInDesignにスクリプトで貼っていき、②ドキュメントサイズを仕上がりサイズに変更、③単ページでPDFを書き出すといった流れになります。
※今回のスクリプトは貼り込んだPDF以外のオブジェクトが存在することは想定していません。
1)見開きPDFをInDesignにスクリプトで自動貼込
自動でPDFを貼り込んでいくスクリプトは色々あると思うのですが、わたしは「MultiPageImporter」が使い慣れてしまいました。
creativepro.com
仕上がりサイズがA4のものなら見開きのサイズはA3になるので、A3のドキュメントに自動で貼り込みます。
2)各ページの後に空白ページを挿入
後でドキュメントの幅のサイズを半分(見開き)にすることを考慮して各ページの後に空白ページを挿入します。見開きのものを分割するのでページ数は倍にならなければいけません。そのために空白ページを挿入しておくということです。
var doc = app.activeDocument; var pgObj= doc.pages; var pgNum1 = pgObj.length; //1ページ毎に空白ページを挿入 for (var i = 0; i<pgNum1*2; i++){ var addPage = pgObj[i]; pgObj.add(LocationOptions.AFTER, addPage); i = i+1; }
この処理でInDesignのページは図のようになります。
3)ドキュメントの幅を半分に設定
with (doc.documentPreferences){ pageWidth = pageWidth/2; facingPages = true; //見開き pageBinding = PageBindingOptions.LEFT_TO_RIGHT; //左開き対応 allowPageShuffle = true; //ドキュメントページの移動を許可 }
4)貼り込んだPDFを正しい位置に移動
ドキュメントの幅が半分に、さらに見開きになって、貼り込んだPDFの位置がちょうどページ幅の半分の位置にくるので、これらを正しい位置に移動させます。
var w = doc.documentPreferences.pageWidth; var pgNum2 = pgObj.length; //先の処理でドキュメントのページ数が変わったのでpgNum2とする for (var j = 0; j<pgNum2-1; j++){ var obj = pgObj[j].pageItems[0]; obj.move(undefined, [w/-2, 0]); //ページ幅の半分移動 j = j+1; }
5)先頭ページに配置されているPDFを最終ページに複製
先頭ページに配置されている見開きPDFの最終ページにあたる部分(説明が下手ですみません)をコピーしてInDesignドキュメントの最終ページの元の位置にペーストする。
//貼り込んだPDFの最終ページをInDesignドキュメントの最終ページに複製 var win = app.activeWindow; pgObj[0].pageItems[0].select(); app.copy(); var act = app.menuActions.itemByName("元の位置にペースト"); win.activePage = pgObj[-1]; act.invoke();
6)あとはInDesignから単ページでPDFを書き出して終了です。
ちなみにA3の2つ折り(A4×4ページ)でしたら見開きのまま入稿していただいても問題ありません。というか、そのまま入稿していただいた方がA3を2面というかたちで面付できるので作業が楽になります。
今回のスクリプトは次のようになります。
app.doScript (main, ScriptLanguage.JAVASCRIPT, [], UndoModes.FAST_ENTIRE_SCRIPT); function main(){ var doc = app.activeDocument; var pgObj= doc.pages; var pgNum1 = pgObj.length; //1ページ毎に空白ページを挿入 for (var i = 0; i<pgNum1*2; i++){ var addPage = pgObj[i]; pgObj.add(LocationOptions.AFTER, addPage); i = i+1; } //ドキュメントを半分のサイズの見開きに設定 with (doc.documentPreferences){ pageWidth = pageWidth/2; facingPages = true; //見開き pageBinding = PageBindingOptions.LEFT_TO_RIGHT; //左開き対応 allowPageShuffle = true; //ドキュメントページの移動を許可 } //貼りこんだPDFを正しい位置に移動 var w = doc.documentPreferences.pageWidth; var pgNum2 = pgObj.length; //先の処理でドキュメントのページ数が変わったのでpgNum2とする for (var j = 0; j<pgNum2-1; j++){ var obj = pgObj[j].pageItems[0]; obj.move(undefined, [w/-2, 0]); j = j+1; } //貼り込んだPDFの最終ページをInDesignドキュメントの最終ページに複製 var win = app.activeWindow; pgObj[0].pageItems[0].select(); app.copy(); var act = app.menuActions.itemByName("元の位置にペースト"); win.activePage = pgObj[-1]; act.invoke(); }
【課題】
pages と spreadsを間違えると動きが変わってしまい、ちゃんと把握できていないと実感(涙)