Javaを利用してドキュメントをプログラムから操作する

OpenOffice.org をサーバとして実行して実行することにより、クライアントプログラムからOpenOffice.org ドキュメントを操作することができます。ここでは ODK (OpenOffice.org Development Kit) のサンプルを使用して実際に OpenOffice.org ドキュメントをクライアントプログラムから操作してみます。

Java 環境の準備

多くの方は OpenOffice.org をインストールする段階で Java の実行環境を整備しているはずですが、このドキュメントではJava プログラムをコンパイルしますので Java の開発環境が必要になります。開発環境を準備していない場合は以下のサイトを参考にして環境を準備します。

インストールガイド J2SDK 1.4.0 Microsoft Windows 95 / 98 / 2000 / Me / XP / NT 4.0 版 インストールガイド J2SDK 1.4.0 Linux 版

ODK の入手

API Project のページに "ODK currently not available" と書かれていますので、 現在(07/22/2002)、最新の ODK はダウンロードできないようです。
API Project

ダウンロード可能な最新の ODK はバージョン 641C のようで、以下からダウンロードすることができます。Solaris Sparc 版と Windows 版はダウンロードできないようなので、ここでは Linux 版をダウンロードします。
642: Developer Release

ダウンロードが終了したら、アーカイブを適当なディレクトリに展開します。今後、この展開されたODK のルートディレクトリを %ODK_ROOT% と表現します。

例えば、私の環境 (Windows XP) では

E:\

でアーカイブを展開したので、%ODK_ROOT% は

E:\odk641q

になります。

(* 私の環境は Windows XP なのですが、環境に依存しない Java を使用するので、Linux版の ODK を使用しています)

OpenOffice.org をサーバとして実行する

クライアントプログラムからの要求を受け付けることができるように OpenOffice.orgを待ち受けポートを指定して実行します。まず最初に、既に実行されている OpenOffice.orgのプロセスを全て終了します (Windows 環境の場合、タスクバーの "OpenOffice.orgクイック起動" も終了する必要があります)。
次にコマンドプロンプトからOpenOffice.org をインストールしたディレクトリにある Program ディレクトリのsoffice.exe (Linux/UNIX 環境では soffice) を以下のオプションを指定して実行します。

Windows 環境の場合

soffice -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager

UNIX 環境の場合

soffice "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager"

UNIXでのセミコロンの扱い

UNIX 環境の場合はセミコロン (;) がシェルに解釈されないようにダブルクォート(") でオプションを囲みます

私の環境 (Windows XP) では OpenOffice.org を "C:\Program Files\OpenOffice.org1.0"以下にインストールしたので、実行例は以下のようになります。

C:\Program Files\OpenOffice.org1.0\program>soffice -
accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager

注意

2行目は折り返して表示されるかもしれませんが、実際には一行です

これで OpenOffice.org が TCP の 8100 のポートで待ち受けを行います。待ち受けポートを変更したい場合には、オプションの "port=8100" の数字の部分を希望するポートに書き換えます。実際にOpenOffice.org がポート待ち受けを行っていることは netstat コマンドで確認できます。私の環境では8100 番ポートで待ち受けを行うように OpenOffice.org を実行したので、netstatコマンドの実行結果は以下のようになります。

C:\>netstat -an | find "8100"
TCP 127.0.0.1:8100 0.0.0.0:0 LISTENING

UNIXの場合

UNIX 環境の場合は netstat -an | grep 8100 のように読み替えてください

これで OpenOffice.org をサーバとして実行することができました。

クライアントプログラムから OpenOffice.org に接続する

ここでは ODK に含まれている SWriter.java サンプルプログラムを使用して OpenOffice.orgに接続し、ドキュメントを操作します。最初に SWriter.java をコンパイルします。ODKのサンプルプログラムにはそれぞれ makefile が付属しているのですが、ここではJava のコンパイラ (javac) を使用してコマンドラインからコンパイルを行います。 SWriter.java サンプルプログラムは %ODK_ROOT%\examples\java\writer にあるので、このディレクトリに移動します。次にクラスパスを設定してコンパイルを行います。必要なライブラリは%ODK_ROOT%\classes 以下にあります。以下は私の環境 (Windows XP + JDK 1.4.0)での実行例です。

C:\>set ODK_ROOT=E:\odk641q
C:\>e:
E:\>cd %ODK_ROOT%\examples\java\writer
E:\odk641q\examples\java\writer>javac -classpath %ODK_ROOT%\classes\sandbox.jar;%
ODK_ROOT%\classes\jurt.jar;%ODK_ROOT%\classes\ridl.jar;%ODK_ROOT%\classes\jut.jar;%
ODK_ROOT%\classes\juh.jar;%ODK_ROOT%\classes\java_uno.jar;%
ODK_ROOT%\classes\unoil.jar *.java

上記例ではコンパイラへのクラスパス指定をコマンドラインから行っていますが、環境変数を設定するなり、Javaの拡張ディレクトリを使用するなど、それぞれに工夫してください。正常にコンパイルが終了したら、次は生成されたクラスファイルを実行します。SWriterを実行するには以下の構文を使用します。

java SWriter "socket,host=localhost,port=8100"

"port=8100" の部分は OpenOffice.org が待ち受けしているポート番号を指定します。以下は私の環境での実行例です。

E:\odk641q\examples\java\writer>java -classpath .\;%ODK_ROOT%\classes\sandbox.jar;%
ODK_ROOT%\classes\jurt.jar;%ODK_ROOT%\classes\ridl.jar;%ODK_ROOT%\classes\jut.jar;%
ODK_ROOT%\classes\juh.jar;%ODK_ROOT%\classes\java_uno.jar;%ODK_ROOT%
\classes\unoil.jar SWriter "socket,host=localhost,port=8100"

SWriter が起動されると、まず最初に空の Writer ドキュメントが表示され、次々に編集が加えられていくはずです。 以上で、ODKサンプルを用いた OpenOffice.org ドキュメントの操作は終了です。

そのほかのサンプルプログラムも%ODK_ROOT%\examples\java 以下の各ディレクトリに収録されています。

E:\>cd %ODK_ROOT%\examples\java

サンプルごとにREADME ファイルが付属しているので、それを参考にほかのサンプルも試してみてください。


制作者:kenbutsu
デザイン:小浦寛裕
$Id: java_sample.html,v 1.6 2003/12/30 01:02:14 maho Exp $