IDMLでの自動組版を試してみる

 先日、知人の@macneko_ayuさんたちが開催した「DTPerのスクリプトもくもく会 #2」に参加してきました。まあセミナーじゃないのでその場でみんなもくもく何かを作ってるだけなんですが、家で一人でやるっていうとどうしても気が散るのでなかなかよい会だったかなと。で、#3も近いことなので、当日もくもく作ってたものを出しておこうかなと思います。

IDMLを使った自動組版処理の初歩的実験

IDMLファイルの中身

IDMLファイルの中身

 InDesignから書き出せるファイル形式のひとつにIDML(InDesign Markup Language)というものがあります。これはInDesignの通常の記録ファイルと完全な互換性はないのですが、ほとんどの内部情報を保ったまま下位バージョンで開けるようになるため、やむを得ず下位バージョンでデータを開くような場合に使われたりしています。で、このIDMLは実はZIPのパッケージファイルで、解凍すると中にXMLファイルや画像ファイルが階層化されて収納されているのが確認できます。
 であるならば、

  1. あらかじめ決められた名称で差し替え部分のテキストを作ったInDesignのデータを作り
  2. それをテンプレートとしてIDML形式で書き出し
  3. IDMLをテンポラリ領域にプログラムで解凍し
  4. 別途差し替え用のテキストデータを(CSVなどで)読み込んで、解凍したIDML内テキストに対して置換処理を行い
  5. 置換処理完了後のIDMLをリネームして出力する

 というような手順で簡単な自動組版処理ができるのではないかなと考えました。

普通に再圧縮してもダメ

普通に圧縮しても開けない

普通に圧縮しても開けない

 まず最初にこの手順を手動でやってみたのですが、どうやら普通にZIP形式で再圧縮してもInDesignで読み込めないようです。ちょっと調べてみるとこちらのフォーラムに情報が。
 なるほど、mimetypeを非圧縮の状態でZIPファイルの先頭に置かなきゃダメと。要はEPUBと同じですね。話が早い。

 ということで作ってみたコードが以下。macのターミナル画面で

perl csv2idml.pl CSVファイルのパス IDMLテンプレートファイルのパス 最終出力先フォルダのパス

 と入力すれば動くはず。ああ、CSVを扱うためのモジュールとしてText::CSV_XSを使ってますのでCPANから入れる必要があります。このあたり参考にどうぞ。

このように変換された

このように変換された

 テスト用のIDMLのファイルとCSVファイルもセットで置いときます。ごく簡単な名刺のテンプレートですがまあテストなので。CSVの氏名はダミーとして自動生成させたものです。

 今回のテストで簡単な置換処理ならIDMLベースでやれることがわかりました。まあInDesignのファイル結合とかでも同じことは当然できますが、これのポイントは自動処理の過程に一切InDesignそのものは噛ませてないことでしょうかね。つまりサーバ内に仕込んでも動くはず。もちろんお仕事として自動処理をやるにはこの程度のコード量では済まないでしょうが。なにしろ今回ロクにIDMLそのものの解析すらしてない(笑)。
 あ、@macneko_ayuさん、助言ありがとうございます。おかげで動きました。

(2017.9.6)

タグ: ,

コメントをどうぞ

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。