複数ページのPDFを自動的に読み込んで配置する

InDesignにPDFを自動的に読み込んで配置する、複数ページのPDFを自動的に割り付けてくれると役立つ、というリクエストが前々からあったのですが、それはできないと回答していました。というのもアドビが提供しているリファレンスではInDesign CS/CS2には読み込んだPDFデータが何ページあるのかを示すもの(プロパティ)が存在しないためです。このため、複数ページのPDFを配置する場合には手作業でページ数を指定するか、あらかじめプログラムで配置するページ範囲を決めておくしかない事になります。
総ページ数が分からない場合でも、存在しないページを読み込む時点でエラーになれば解決するのも簡単ですが、なぜか存在しないページを指定してもInDesign CS/CS2ではエラーになりません。
存在しないページを読み込んだ時にはフレームに何も読み込まれなければ、フレームをフィットさせてフレームサイズから調べる方法もありますが、これも失敗。存在しないページを指定した場合、なぜか1ページ目が読み込まれてしまいます。
そこで、よく考えると最終ページを超えたら1ページ目に戻るわけですから、そこで総ページ数を知る事ができます。が、InDesign CSのドキュメントを見ても割り付けてあるPDFが現在何ページ目なのかを知るプロパティがありません。CSが駄目ならCS2ということでドキュメントを見ると、新しくPDF関係のオブジェクトが追加されpdfAttributes.pageNumberによって割り付けたPDFが何ページかを知る事ができるとあります。
ということで作ったのが以下のスクリプトです。実行するとダイアログが出るので読み込んで配置するPDFを指定します。あとは自動的にドキュメントとページが生成されます。

filename = File.openDialog("Select PDF");
if (filename)
{
pageObj = app.documents.add();
pageNum = 1;
while (true)
{
app.pdfPlacePreferences.pageNumber = pageNum; // ページ数
tfObj = pageObj.textFrames.add(); // 新規フレーム
tfObj.visibleBounds = ["1cm","2cm","29cm","22cm"];
pdfObj = tfObj.place(filename); // PDF貼付け
if ((pageNum > 1) && (pdfObj.pdfAttributes.pageNumber == 1))
{
pageObj.remove();
break;
}
pageNum++;
pageObj = app.activeDocument.pages.add();
tfObj.fit(FitOptions.frameToContent);
}
}

PowerMac G5 (2GHz x 2, 2.5MB RAM)で1900ページまでは問題なく配置できました(2時間近くかかりますが)。
あと、InDesign CSでも試したところ一応動くような感じです。感じ、というのはInDesign CS2を入れたことにより、CSでの動作も変わってしまっている可能性があるためです。CSで動くようであれば、そのまま利用してもらえばよいかと思います。




[サンプルをダウンロード]