Mupdf ライブラリ
以前(数年は前)に、glfw3_app のさらに前に、一度、試していた。
その時は、Mupdf のソースコードを取ってきて、自分でコンパイルして実装した覚えがある。
最近、Mupdf のリソースは MSYS2 でもサポートされ、pacman で簡単にインストール出来るようになっていた。
そんな事もあり、glfw3_app でも Mupdf ライブラリを再び試してみた。
構成が大きく異なる・・
最近のリリースは、以前の構成とはかなり異なっている、昔のコードはそのままではコンパイル出来ない。
サンプルを観たり、ヘッダーのプロトタイプを眺めたりしながら、コンパイルが通るようになった。
しかし、リンクで必要なライブラリが足りなくて失敗する・・
色々調べて、何とかリンクまで成功。
動かすが、クラッシュする・・
簡単なコードにして、PDF ファイルを食わせてみるが、クラッシュする・・
色々調べて、呼ぶ API が足りない事に気がつく。
fz_register_document_handlers(context_);
コンテキストを生成したら、この API を呼ぶ事がマストのようだった。
描画されない・・
だが、ちゃんと描画がされない・・
良く調べると、良かれと思って追加したインスタンスが余計だった。
fz_separations *seps = fz_new_separations(context_, 0);
fz_pixmap* pix = fz_new_pixmap_with_data(context_, fz_device_rgb(context_), w, h, seps, alpha, stride, rgba);
上記「seps」は、使わない場合、必要無いようだ・・
fz_pixmap* pix = fz_new_pixmap_with_data(context_, fz_device_rgb(context_), w, h, NULL, alpha, stride, rgba);
これで、普通に描画されるようになった。
まとめ
PDF を扱う実装は、RX マイコンのハードウェアーマニュアルから、色々と必要な情報を自動で取得する事を目指していて、その前段階。
その情報を使い、デバイス関係のソースコードを自動生成したり、テストコードを生成する事を考えている。
今回の実装は、その一歩となる。
詳細は、Qiitaに投稿してある。
pdfv アプリは、PDF をプレビューするアプリで、GUI を操作するメイン部は、俺俺フレームワークの助けを借りて 500 行くらいで実装出来ている。
Mupdf ライブラリ、便利!