Acrobat のプラグインを作ろう (1)

作成日:2003.2.4



Adobe は Acrobat の SDK を公開していて、 無料でダウンロード可能。 これを使うと Acrobat のプラグインなどが 簡単につくれる。
このページでは、 Windows 用 Acrobat のプラグイン / 外部からの Acrobat 機能の呼び出し方を 数回に分けて解説する予定。
とりあえず今回はサンプルプラグインの作成まで。


必要なもの


開発環境としては Windows 2000 Pro を想定しているが、 他の環境でも大丈夫。

以降、 Acrobat が C:\Program Files\Adobe\Acrobat 5.0\、 SDK が C:\Program Files\Adobe\Acrobat 5.0 SDK\ に入ったとして話を進める。
以下、 Acrobat の入ったディレクトリを $(ACROBAT)、 SDK の入ったディレクトリを $(SDK) と略記する。

1. サンプル(Word Finder)をビルドしよう

Acrobat 5.0 SDK は親切にできているので、 サンプルをビルドするのは楽々である。

まず、SDK 内のサンプル Word Finder を作ってみる。
$(SDK)\PluginSupport\Samples\PDF Accessing\Word Finder\が Word Finder のディレクトリ。
ユーザーは、 $(SDK)\PluginSupport\Samples\PDF Accessing\Word Finder\win32\WordFinder.dsw をダブルクリックすればよい。

Visual Studio が立ち上がる。
まず最初に、 ツールバーの「プロジェクト(P)」-「設定」を押して プロジェクト設定ダイアログを確認してみる。
「リンク」タブで、「カテゴリ(Y)」に合わせて「出力ファイル名」を 表示させる。 ここが C:\Program Files\Adobe\Acrobat 5.0\Acrobat\plug_ins\AcrobatSDK\WordFinder.api となっているはずなので、 Acrobat のインストール位置に変更しよう。

終わったらビルドを開始する。
まず、 メニューの「ビルド(B)」 - 「ビルド(B)」を押すと コンパイルとリンクが開始される。 問題なく終了すればサンプルのビルドは完了である。

# 後で、デバッグを行うので最初は、アクティブな構成を「Win32 Debug」のままでビルド。

2. サンプル Word Finder がビルドできたか確認しよう

Acrobat を起動してみると ツールメニューに見慣れれぬ「Acrobat SDK」メニューが増えているはずだ。
メニューは以下のような構造をしているはず。
「WordFinder」   -   「Create Page Map」
「Find Word By Word Offset ...」
これは読み込んだ PDF を処理して 独自形式の検索リストを作成し、 PDF の頭から数えて 指定した番号の「語」を索引するプログラムだ。

使いかたとしては、 適当な PDF を読み込ませてみて(英語のものの方がよい)、 「Create Page Map」を選択する。
"Scanning Page..." と出たあと、 "Successfully created page map." となると成功。 読み込んだ PDF ファイルのすぐそばに .map と .wrd という拡張子のファイルが作成されているはずだ。
次に「Find Word By Word Offset...」を押すと 「Find Word By Offset」というダイアログが出て数字の入力を要求される。
ここで、適当な数字を打つと PDF の先頭から入力した数字番目の「語」のページに 飛び、その「語」がハイライトされるという寸法だ。

この Word Finder プラグインは Acrobat のプラグイン作成の基本要素を残らず持っている。

3. デバッグしてみよう

次に、Word Finder プラグインの動作をデバッガで追いながら見てみよう。

デバッグのためには設定が必要である。
プロジェクト設定ダイアログの「デバッグ」タブを押す。 「カテゴリ(Y)」を「一般」に合わせて 「デバッグセッションの実行可能ファイル」に $(ACROBAT)\Acrobat\Acrobat.exe を指定する。

次に、「カテゴリ(Y)」を「追加するDLL」に合わせて $(ACROBAT)\Acrobat\Plug_ins\Acrobatsdk\Wordfinder.apiを 指定する。
# 注意:ファイル種類は「すべてのファイル」でないと .api ファイルは表示されない。

次に プラグインのソースコードを Visual Studio に読み込んで、 適当な位置にブレークポイントを置いておこう。

Acrobat が立ち上がっていればこれを終了し、 「ビルド(B)」-「デバッグの開始(D)」-「実行(G)」を押すと デバッグ実行が開始される。
初回には Microsofto Developer Studio "C:\Program Files\Adobe\Acrobat 5.0\Acrobat\Acrobat.exe" には デバッグ情報がありません。続行する場合には[OK] を押してください。 というダイアログが出るが、 気にせず OK しよう。

Acrobat が起動し、さきほど仕掛けてブレークポイントで停止したはずだ。

結局、何をやったのか?

以上で、Word Finder プラグインのビルドとデバッグができたことになる。
この Word Finder というプラグインが どのようにして動くかを理解するためには、 まず Acrobat のプラグインとは特定の関数を export している dll であることを 知る必要がある。

Acrobat.exe が起動するときに $(ACROBAT)\Acrobat\plug_ins\ 以下の ディレクトリを調べ、拡張子が .api のファイル探す。 これを dll とみなして Acrobat.exe プロセスのメモリ空間中に取り込み、 プラグイン中の決められた初期化メソッド(PluginInit など)を呼び出す。
プラグインは初期化メソッドの中で Acrobat.exe の機能を呼び出し、 メニューなどに自分を登録しておく。

Acrobat 起動後、 ユーザーがメニューを選択するなどすると Acrobat.exe が登録されている プラグインの関数(CreatePageMap など)を呼び出して、 プラグインに実行権を渡すことになる。

これがプラグインの大まかな流れとなる。

以降、 Acrobat.exe からプラグインへの呼び出し関数名と仕様、 プラグインが Acrobat.exe の機能を使うときの関数 (API) を 見ていく。
Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp