2018年10月21日日曜日

8: LibreOfficeまたはOpenOfficeのインスタンスをUNOサーバーにする

<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>

TCP/IPソケットまたはネームドパイプのアクセプターを開始する、あなたの外部プログラムからUNOを介してオフィスドキュメントを読み書きしたりインスタンスを操作したりするために。

話題


About: UNO (Universal Network Objects)
About: LibreOffice
About: Apache OpenOffice

この記事の目次


開始コンテキスト


  • 読者は、UNOとは何かについての知識(過去の記事の内容に同等の知識)を持っている。
  • 読者は、UNOプログラムをLinuxまたはWindowsで開発する環境を過去の記事(Linux用はこちらで Windows用はこちら)にしたがって構築した。

ターゲットコンテキスト



  • 読者は、LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにする方法を知る。
ト書き
Hypothesizer 7、Objector 9A、Objector 9Bがコンピューターの前にいる。


オリエンテーション


Hypothesizer 7
この記事では、LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにする方法を学びます。

Objector 9A
俺はそんなことしたくないのに、しなくちゃならんと言い張りやがって...

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのインスタンスの外部からUNOを通して、オフィスドキュメントのファイルを読んだり書いたり、他のインスタンス操作をしたりしたいのであれば、あなたは、LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにしなければならないでしょう。それは、UNOが何かを理解されていれば理解されるとおり、不可避です。

Objector 9A
そのインスタンスは画面上、邪魔なんだがな...

Hypothesizer 7
不可視にできます、本体で学ぶとおり。

Objector 9A
...自分のプログラムを実行する前に毎度インスタンスを開始しなくちゃならんのは面倒なんだよ...

Hypothesizer 7
あの、インスタンスを、あなたのプログラムと同じコンピュータで開始させるのであれば、あなたのプログラムにインスタンスを自動的に開始させればよいだけです。

Objector 9A
なぜ、そう言わなかった?というか、なぜ、お前のサンプルにそうさせなかった?

Hypothesizer 7
それは、インスタンスを私たちのプログラムと同じコンピュータで開始させるという前提に私たちは立っていないからです。

Objector 9B
ただ'com.sun.star.comp.helper.Bootstrap.Bootstrap.bootstrap ()'を呼べば、インスタンスを開始しなくてもいいと聞いたけど。

Hypothesizer 7
というより、あなたのプログラムにさせられると申し上げたとおり、そのメソッドがインスタンスを自動的に開始するのです。そのメソッドがインスタンス開始を不要にするのではなく。

Objector 9B
とにかく、そのメソッドを使えばいいだけじゃない。

Hypothesizer 7
なぜそうしないかと言うと、先ほど申し上げたとおり、インスタンスを私たちのプログラムと同じコンピュータで開始させるという前提に私たちは立っておらず、また、その方法では、コネクション切断を検出できず、UNOサーバー作成への発展性がないからです。

Objector 9B
どうでもいいけど。


本体


1: LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにする


Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのインスタンスに私たちの外部UNOプログラムがコネクトする前に、そのインスタンスは、UNOサーバーになっていなければなりません。

UNOサーバーであるということは、アクセプターが開始されているということです。

Objector 9B
「アクセプター」?

Hypothesizer 7
はい。名称からご想像できるとおり、それは、UNOクライアントからのコネクションを受け付けるものです。

Objector 9B
ふーん。

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにするには2つの方法があります。あるコンフィギュレーションファイルに設定を1つ追加してからインスタンスを開始するか、LibreOfficeまたはApache OpenOfficeの実行コマンドをある引数付きで実行するかです。

Objector 9B
ふーん。

Hypothesizer 7
後者の方法にて、「インスタンスを開始する」ではなく、「LibreOfficeまたはApache OpenOfficeの実行コマンドを実行する」と申し上げたことにご注意ください。それは、新たなインスタンスを開始する必要はなく、既存のインスタンスをUNOサーバーにすることができるからです。

Objector 9B
はあ?

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeの実行コマンドは、既存インスタンスがない場合のみ新たなインスタンスを開始します。

Objector 9B
ああ。

Hypothesizer 7
前者の方法では、コンフィギュレーションファイルは、オフィスインストールディレクトリ内の'share/registry/base.xcd'であり、'<oor:component-data ~ oor:name="Setup" ~>'('~'は省略を意味する)タグ内の'<node oor:name="Office">'の後に以下をセットできます('2002'は、ソケットのポート番号であり、変更してかまいません)。

@XML ソースコード
<prop oor:name="ooSetupConnectionURL"><value>socket,host=localhost,port=2002;urp;</value></prop>

後者の方法では、指定すべき引数は以下であり、やはり、'2002'は、ソケットのポート番号であり、変更してかまいません。

@bash ソースコード
"--accept=socket,host=localhost,port=2002;urp;"

Objector 9B
実は、「LibreOfficeまたはApache OpenOfficeの実行コマンド」が何か、私、知らないのよね。

Hypothesizer 7
ああ、オフィスインストールディレクトリ内の'program/soffice.bin'です。


2: LibreOfficeまたはApache OpenOfficeのインスタンスを不可視状態で開始する


Hypothesizer 7
私たちはLibreOfficeまたはApache OpenOfficeのインスタンスを私たちのプログラムから操作する目的で開始するので、インスタンスのGUIは邪魔かもしれません。

Objector 9A
もちろんじゃまだ。

Hypothesizer 7
LibreOfficeまたはApache OpenOfficeの実行コマンドに以下の引数を指定することで、インスタンスを不可視状態で開始できます。

@bash ソースコード
--headless

Objector 9A
それはいい。だが、どうすればインスタンスを止められる?

Hypothesizer 7
インスタンスが止まるまで実行コマンドはリターンしないので、ターミナル上で'Control-C'によって、またはプロセスをkillすることで、インスタンスを止められます。

Objector 9A
既存インスタンスを不可視にできるのか?

Hypothesizer 7
できないようです。

Objector 9A
既存インスタンスを可視状態にすることもできないんだろうな。

Hypothesizer 7
私もそう思います。


3: 結びとその先


Hypothesizer 7
これで、LibreOfficeまたはApache OpenOfficeのインスタンスをUNOサーバーにすることができるようになりました。

それは、LibreOfficeまたはApache OpenOfficeのインスタンスに私たちの外部プログラムがコネクトするために必要なことであり、その準備を必要とするサンプルプログラムをいくつか私たちは見ていきます、将来の記事群にて。


参考資料


<このシリーズの前の記事 | このシリーズの目次 | このシリーズの次の記事>