Top > おぼえたこと > JavaScript編

InDesign書類の自動PDF化

こんな仕事が

最近では、XMLなどを利用したInDesignの自動組版なるものが幾つか出てきています。
大変便利な物だと思うのですが、先日こんな仕事が入ってきました。

データはすべてWindows版InDesign CS2で作成されているのですが、1ファイルに1頁だけで、1万ファイルほどの印刷依頼なのですが、どうやら自動組版で作成された物のようでした。

ファイルをPDFに書出して、面付け作業を行いCTP刷版、印刷加工となるのですが、1ファイルをPDF化するのに、ファイルを開いて、PDF書出しの設定を行い、保存完了までに手作業で約1分。

1万ファイルだと1万分かかる事となり、時間だと約167時間、日だと24時間働いて約1週間程掛かる計算となります。
これを10人程度が貫徹すれば1日あれば何とかなるかもしれませんが、現実的ではありませんよね。

現場が助けてくれと泣きついてきたので、しゃねーなと考えてみたのですが、InDesign CS2にAcrobat 7のDistilerで直接inDesignの書類をPDF化できるAcrobat用のプラグインが付属しています。
(Adobe Resource CS2 CDのテクニカル情報>InDesign CS2内にInDesign PDF 自動処理 for Acrobat 7というプラグインが付属しています。詳しくは、その中のPDFを参照して下さい。)

これでやれば、文句も言わずにパソコンが一生懸命にやってくれるだろうと思ったのですが、事はそう簡単には進みませんでした。

実際にPentium 4/1GH程度のマシンで 作業をさせてみると、1ファイル処理をするのに、約5分ほど掛かってしまうのです。Mac G5 2.3GH Dualでやってもあまり変わりませんでした。

これではどうしようもないと思い、スクリプトで対応させるかと思ったのですが、Windows版のInDesignで、フォントもMS明朝などWindowsフォントが多く使われているため、AppleScriptでは対応できませんでした。
Visual Basicは開発環境を持たない事と、あったとしても勉強から進めないと出来ないので、JavaScriptを利用する事となりました。

前置きが長くなりましたが、Java Scriptを使い、indesign CS2で書類を開き、PDF書出しを連続で行うようなスクリプトを考えてみました。

ちなみに、Java ScriptだとMacでもWinでもちゃんと動いてくれました。
気になる作業時間ですが、1ファイル約10秒程度で処理をしますので、連続で処理できれば28時間程度ですむ計算になります。

1台専用のパソコンで処理を掛けながら、別のパソコンから出力を掛けることで大幅な時間短縮が可能となります。

本題

さて作業を自動化するにあたり、そのワークフローを考えてみよう。

  1. 作業すべきファイルの選択。複数あるので、フォルダ毎の指定とする
  2. 書出すべき、PDFの保存先の指定
  3. ファイルを開き、PDF書出しをおこなう
  4. ファイルを閉じる


これをファイル分繰り返す事となる。

folderObj = Folder.selectDialog("フォルダを選択してください");
fileList = folderObj.getFiles("*.indd");
for (i=0; i<fileList.length; i++)
{
 fileObj = new File(fileList[i].fsName);
 app.open(File(fileObj));
 app.activeDocument.exportFile(ExportFormat.pdfType, File(fileObj.fsName+".pdf"), false, "PDFPreSet");
 app.activeDocument.close(SaveOptions.no);
}

Download: AutoPDF.jsx(CS2用)

上の作業はなんとこれだけのスクリプトで出来てしまいます。
簡単に説明しましょう。

folderObj = Folder.selectDialog("フォルダを選択してください");

見てお分かりだと思いますが、Folder.selectDialog("ダイアログに表示する文章")で、フォルダを選択するダイアログが出てくる。
選択した結果を変数folderObjに代入しています。

fileList = folderObj.getFiles("*.indd");

では、フォルダの中にある、InDesignのファイルだけを抜き出していきます。
変数fileListにIndesignファイルが配列形式で代入されたわけです。
("*.indd)で、拡張子がinddだけの物をせんたくしているのです。

for (i=0; i<fileList.length; i++)
{

}

繰り返し作業を行い、配列の中から一つずつファイルを選択して作業します。

fileObj = new File(fileList[i].fsName);

拾いだしたファイルの場所と、ファイル名を変数fileObjに代入します。
作業ができたものは、同じ場所に名前を変えて保存する事とします。
このfileObjから保存先と、保存名を作成して行きます。

app.open(File(fileObj));

ファイルを開くコマンドです。

app.activeDocument.exportFile(ExportFormat.pdfType, File(fileObj.fsName+".pdf"), false, "PDFPreSet");

これが、PDFを書出すコマンドですが、"PDFPreSet"と言うところに注目して下さい。
これは、InDesign側でPDF書出しプリセットで事前に必要なプリセットを作っておく必要があります。
トンボの有無や、塗り足しの有無。PDFの形式など設定しておき、プリセットして保存します。
この際、アルファベットだけにしておいた方が、文字のトラブルなどを考えずに済むので、良いのではないでしょうか。

exportFile()が書出しコマンドだが、プロパティが幾つか必要になる。

exportFile(ExportFormat.pdfType, File(fileObj.fsName+".pdf"), false, "PDFPreSet");

 

app.activeDocument.close(SaveOptions.no);

ファイルを閉じるコマンドだが、オプションとして、現在は保存をせずに閉じる設定です。
SaveOptions.yesとすれば、保存して閉じる事となる。

これで一連の作業を繰り返せば出来上がりです。

Java scriptの基本的なリファレンスは、Adobe Resource CS2 CDのテクニカル情報>InDesign CS2>スクリプティンク>InDesign CS2 スクリプトリファレンス.pdfを参照して下さい。

 

Java Scriptを使うには

JavaScriptアイコン

Java Scriptを書くには、テキストエディタでも構いませんが、保存形式をUTF-8形式で保存し、拡張子として.jsxと付けます。
できたスクリプトファイルをAdobe InDesign CS2フォルダの中のPresets>Script内に入れます。

inDesignを起動し、ウィンドウメニューの自動化の中のスクリプトウィンドウを開き、さきほど保存したスクリプトファイルをダブルクリックで実行すれば、作業が開始致します。

スクリプトウィンドウ

テキストエディタでなくても、Adobe Creatave suitにはExtendScript Toolkitという開発環境が付属してきます。
これを使うと、スクリプトのデバッグなどが非常にやりやすくなっており、便利です。

ExtendScript Toolkitウィンドウ

ページのTopに戻る