Officeデータ(*.docx, *.xlsx, *.pptx)から画像を取り出してInDesignに連続配置/UCF形式とは

最近珍しく仕事が入ってまして、ブログ更新ができませんでした。代わりにX(Twitter)でいくつか投稿してますので、お急ぎの方はそちらもチェックしていただけたらと思います。

少し時間ができたので、細かい説明やまとめを書いていきますね。もちろInDesign 19.5についても書いていきます。


まずはタイトルの通り、Officeのデータに埋め込まれた画像を取り出して、InDesignに連続配置の準備までを行うスクリプトです。もし動画が再生できなかったらYouTubeにも上げていますのでそちらで見てください(31秒。大したものではないです)。

ダウンロードはこちら、またはディInDesignからお願いします(同じものです)。以下、説明。


新しOfficeデータはOpen XML Formatsという形式になっており、拡張子zipに変更するWindowsのエクスプローラーや解凍ソフトで開くことができます(最近OSでは拡張子を変えなくてもできるという話を聞きましたが私は確認していません)。その中の「media」というフォルダの中に画像が入っていて、それを取り出すことで、Officeソフトがなくても含まれる画像を抽出できるわけです。

仕組みがわかってしまえば難しいことはないので、誰でも取り出せるわけですが、それでも面倒だなという人にはいいソフトがあります。それは最近公開された「Windows・Mac『Word・Excel・PowerPointのファイルから画像を抽出できる』アプリ」です。500円らしいのでよければ買ってあげてください。

このスクリプトでは、次のことを行っています。

  1. Officeファイル名(拡張子なし)+「image」というフォルダを作成(フォルダAとします)
  2. その中Officeファイルを解凍
  3. 解凍したフォルダの中を巡回して、次のことをします
    • image」フォルダ内の画像ファイルをフォルダAの直下にコピー
    • ファイルを削除
    • 空のフォルダを削除
  4. InDesignの配置カーソルに、フォルダAの直下ファイルをすべて登録します
  5. もしキャンセルされたり解凍に失敗したらフォルダAが空の場合に削除します

今回ソースは省略します。ダウンロードしたファイルを開いてみてもらえばわかります。大したことはやってないので(再帰関数のところは自分もよく理解できないぐらいややこしいですが結果オーライです)。ただしこのスクリプトは、画像ファイルRGBのままだし、Officeファイルに配置された時点で配置サイズに応じて品質が劣化するので、基本、商業印刷には使えません。品質を問わないものだけに使えるものです。つまりすごいように見えて実は使いどころがないという、まやかしスクリプトです。


じゃあ何でこのスクリプトを作ったのかというと、InDesignに含まれているのにユーザーインターフェイスからは使えない(つまりスクリプトやプラグインからしか使えない)機能の1つを知ってほしいからです。それは手順の2番目「その中Officeファイルを解凍」InDesignだけでやっています。外部アプリケーションOSの機能は使用していません。つまInDesignzipファイルを圧縮・解凍する機能があるんです。

そんなの知ってる!」って人はかなり少ないでしょうが「その機能を使ったことがある」人は結構いると思います。

使い方は簡単、適当なドキュメントを開いて(作って)、[ファイル]メニューの[書き出し]をクリック、ファイルの種類を「InDesign Markup (IDML) (*.idml)」にして[保存]をクリックするだけです! これが「圧縮」です。「解凍」はそのファイルInDesignで開くだけ。

つ・ま・り、IDMLはzipファイルなのです。IDMLファイルの拡張子zipに変えて解凍してみてください。Officeファイルと同様、たくさんXMLファイルが見えるはずです。

IDMLの仕様については「idml-cookbook.pdf」を探してください。私CS6版を持っていますが、公式のダウンロード元がもうないかもしれません。次は「idml-cookbook.pdf」の4ページ目の引用です。

Where is IDML used in the application?

IDML syntax is used in several application features: IDML export (*.IDML), asset libraries (*.INDL), snippets(*.INDS), InCopy stories (*.ICML), and Adobe InCopy® assignment files (*.ICMA).

IDML files represent complete InDesign documents. Because they are ZIP (or, more accurately, UCF) archives, they commonly are called packages. These packages contain a hierarchy of XML files representing various parts of the InDesign document. An equivalent XML representation is used in single-text-file (non-archive-based) InCopy story files, snippets, and assignments. These are not ZIP files but rather single XML files that contain all elements necessary to reconstruct a particular piece of content.

ここで出てくUCFUniversal Container Formatの略です。OfficeファイルIDMLのほか、Adobe XDのファイル、EPUBファイルなどもこの形式です。(EPUBのファイル形式の仕様IDMLを参考に作られたと何かで見た記憶があるのですがソースが思い出せません)

ですから、Officeファイルに限らず、Adobe XDのファイル、EPUBファイルなんかも解凍できるのですが、残念ながらそこから画像を取り出す方法はわかりません(画像を含んだデータを持っていない)。IDMLからも画像を取れるかなと期待したんですが、残念ながら埋め込み画像XML中に記述されているのですぐには無理です。XMLから必要な部分を切り出して、、、という作業になるので面倒くささが半端ない。

ということで、使い道がないスクリプトですが、何かの役に立てたら幸いです。