Practice makes Perfect !

ExtendedScript素人です。同じ境遇の方、一緒に脱素人を目指しましょう!

実験010_2023.4-1

見開き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を間違えると動きが変わってしまい、ちゃんと把握できていないと実感(涙)