OODoc で遊ぶ。
前回は PPT をターゲットに、 java で POI を遊んだ。
今週末は気分を変えて、 perl で OODoc を遊んでみる。なので、今回のターゲットは OOoの Impress.
何か perldoc をざっと読んでもよく分からないし、 例題も極めて限られているので、日曜プログラマーには厳しいなと挫折しかかる。 そういえば「ODF は XML を zip で固めたものに過ぎない」というようなことを読んだので (cf.「Manipulating OOo Documents with Ruby (James Britt)」@linuxjournal)、 手元にある odp ファイルを色々と unzip してみて、その構造を眺めてみる。 こうなると、何か直接 XML を書き下す方が早いなとか思いながら、 mgp2odp をでっちあげた。 mgp2kpr.pyの OOo版、Perl版って感じかな。 (と言っても、別に Perl が python よりも大好きという訳ではない。 むしろ vtk がらみで結構付き合いが長いので python の方に馴染みがある。)
この mgp2odp は今のところ、 magicpoint の TAB による構造を単純に outline に貼り付けただけ。 TAB なしの行も outline の一番上位の item にしていて、 page 以外のコマンドは何も考えていない(フォント関係も、行の継続も)。 一応、何もしないでも日本語は通る模様(mgpは iso-2022-jp で決め打ち)。
付記その3(2/4/2008): デモを作った。
mgp とは独立に、 OODoc で画像を入れることも一応 follow したので、 次はそれだな。(というか、箇条書きのテキストと、画像化された数式と、 画像があれば、プレゼンとして実用上何の問題ないので、ここまで出来たら終わりだな。)
さて、この mgp から odp への変換について、 Impress 側の基本的な構造(多分 PPT も同じ)についてちょっと悩んでいる。 みんなはスライドを、テンプレートにあるように outline 一発(スピリットとして) で作ってるのかな? 具体的に言うと、 magicpoint の TAB なし行を、今のmgp2odpの手抜き実装のように outline の top item として見るのか、それとも subtitle と見るのか、ということ。 私がこれまで magicpoint を使ってきた時の気分は後者なんだけど、 そうすると Impress(やPPT)の構成が小さな outline だらけになる。 それが Impress(やPPT)で普通なのか、そうじゃないのか、という疑問。 (それから、 Impress で title のような、 outline じゃない plain な text-box を body 部に新たに挿入したいときは、 どう操作するのだろう? insert にそれらしいエントリーがないし。 あと、既にある要素の cut-and-paste はどうすれば出来るのかな? ……思いっきり初心者だ。)
文字の装飾は、 span で style を指定するみたい(xml を覗いてみた結果)。 OODoc でこれを作る正しい作法は、どうするんだろう? (自分で T1 とか T2 とか style を定義するのが正しいのかな?)
あと、 magicpoint では数式を(自分では)画像にしているのだけど、 odp で text の一部としてそういう画像を入れられるものなのだろうか? それとも各画像要素に対して一々 draw:frame を準備するのかな? そうするとスライド中の座標の見積りとかしなければならなくなって面倒だなと思ったり。 安直な落としどころは、必要な画像は適当に並べておいて、 位置決めは全部 Impress を起動して GUI 的に(ちまちまと)行ってもらう、かな…… (手ぇ抜きすぎだな。)
2/9/2008: しかるべく実装(有言実行!)。
それから、 OODoc で presentation を作る方法を検索してたら、 以下のサイトを見つけた:
「テキストからOpenOffice.org Impressファイルを作るツール」@emasaka
そちらの方が筋が良さそうな coding だな (つまり、読んでもよく分からなかった)。
2/15/2008: mgp2odp version 1.4 - そろそろ終了かな。
延ばし延ばしにしていた書類をやっと書き上げた。
しかし出来上がった時、結局、朝方になってしまっていた。 明日にでも出しておこう。(間に合うかなぁ……こういうのばっか)
付記:現地時間の7日午後4時に配達完了したらしい。 canadapost \$52.66 CAD の価値はあった、かな。