IndesignにIndesignドキュメントを配置する
ページ物が得意先からIllustratorで入稿される
会社案内やパンフレットなどの入稿データが見開き、複数ファイルという状態で入稿されることが多い。
総ページ数がそれほど多いわけではないので、見開きレイアウトのIndesignドキュメントに配置して、ページごとのデータにして面付けをするのだが、Indesignから単ページPDFに書き出して、さらに面付けをすると、入稿データに変更が入るとPDF書き出しからやりなおしとなる。
これが面倒だったので、見開きレイアウトのIndesignドキュメントを全ページ、別ドキュメントに配置したいと考えていた。
けど、本日ようやくどこをいじれば良いのかをみつけた。
app.activeDocument.pages[0].pageItems[0].graphics[0]
app.activeDocument.pages[0].pageItems[0].importedPages[0]
などのプロパティに pageNumber = 1 というのがあって、さんざんこの辺をこねくり回した。
本来はリードオンリーらしいがplaceメソッドを使う際に一緒に指定できないものか、と思って、importedPageのplaceメソッドの書式を調べると
place(fileName, [showingOptions], [withProperties])
とあったので、placeを実行する前にプロパティ用にオブジェクトを作って
var myProperties = {pageNumber = 5} ;
myFrame.place(myFile,false,myProperties);
とやってみるとエラーなく走ったのだが myFrame 内に配置されたのはmyFileの5ページ目ではなく1ページ目でがっかり。
オマケのスクリプトを見ていたら
気がついたのはIndesignにオマケでついてくるPDF全ページ配置スクリプトを改変していた時。
app.pdfPlacePreferences.pageNumberにPDFのページiをforループ構文で入れていることを発見。
もしかして、と思ってESTKのデータブラウザでappを調べてみるとimportedAttributesというのがあって、その中にpageNumberがあった。
そして以前手作業で別ドキュメントのあるページを配置した直後に実行した時だけ、スクリプトで指定したフレームに1ページ目ではないページが配置されたことがあったのを思い出した(この事実があったからあきらめきれなかったのだが)。
とりあえずテストとしてA4サイズのドキュメントの1ページ目にフレームを20個作り、そのフレームに別ドキュメント(全20ページ)を配置するスクリプトを作ってみた。
/*
他のIndesignドキュメント全ページを配置する
*/
var myDocTxt = "C:/Users/*****/indd全ページ配置test.indd" ;
//このドキュメントに配置する
var myDocObj = new File (myDocTxt) ;
app.open(myDocObj);
var targetDocTxt ="C:/Users/*****/!中綴じテスト.indd" ;
//配置される側のドキュメント。一回開いてページ数を取得
var targetDocObj = new File(targetDocTxt);
app.open(targetDocObj);
var targetDoc = app.activeDocument ;
var n = targetDoc.pages.length ;
targetDoc =targetDoc.close(SaveOptions.NO);
var myDoc = app.activeDocument ;
for( i = 0 ; i < n ; i++){
app.importedPageAttributes.pageNumber = i+1 ;
//配置されるドキュメント側のページをここで設定する
myDoc.pages[0].pageItems[i].place(targetDocObj);
//配置できた。Fitとかその後に入れればよし
}
長年の課題がついに
意外とあっさりとできてしまった。
でぃざInDesignに掲載された「InDesign DOM」にはとてもお世話になりました。