OpenOffice.org

OpenOffice.orgのAPI

HTMLからPDFに変換

フリーのもので自サーバで使えそうなPDF変換のプログラムを探しましたが、海外のものは日本語表示できなかったり、フォントが限定されていたりして思うように変換できるものがありませんでした。

特にXMLParserベースのクラスで処理すると、テーブル組されていて、tr,tdタグの対応が欠落していたりするような、ブラウザが補完して表示しているよなHTMLだとエラーで止まってしまうものもありました。
HTMLが広まった理由に、タグが多少いい加減でもブラウザが表示してくれるというのもありますが、反面、厳密に解析するとエラーばかりになってしまいます。

日本語、日本語フォントを処理でき、テーブル組みなどちょっと凝ったレイアウトも表現できるもの、という条件だけでも、OpenOffice.orgをJODConverterで変化する方法しか残りませんでした。

1.OpenOffice.org3のサービス化

OpenOfficeのインストール先がフォルダ"C:\Program Files\OpenOffice.org 3" のとき。
コマンドプロンプトから、

"C:\Program Files\OpenOffice.org 3\program\soffice.exe" -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager

を実行すると、APIを処理するサービスが常駐します。

2.Windowsサービスとしてのサービス登録

PC起動時にWindowsのサービスとしてOpenOffice.orgサービスが常時稼動していれば、Webサービスのプログラムからいつでも呼び出せて便利です。
OpenOfficeをwindowsのサービスに登録する方法について書きます。

Windows Server 2003 Resource Kit Toolsをダウンロードして、rktools.exeを実行する。

デフォルトでは、
C:\Program Files\Windows Resource Kits\Tools
にインストールされる。

C:\Program Files\Windows Resource Kits\Tools>instsrv OpenOffice "C:\Program Files\Windows Resource Kits\Tools\srvany.exe"

The service was successfuly added!

Make sure that you go into the Control Panel and use
the Services applet to change the Account Name and
Password that this newly installed service will use
for its Security Context.

C:\Program Files\Windows Resource Kits\Tools>

http://d.hatena.ne.jp/w650/20090408/1239168881

instsrv で直接OpenOfficeの起動を指定してみましたが、常駐するタイプのプログラムなので、Service開始の手続きが不足しているようで、service開始したときにエラーダイアログがでてしまいました。

そのため、上記のページのようにsrvanyをserviceに登録し、レジストリでOpenOffice.orgのサービス開始コマンドを実行するようにするのがいいと思います。

ここで、JODConverterのAPIがうまく動作するようにするにはいくつかの条件があるようです。

1. サービスのログイン者をOpenOffice.orgを起動し使用したことのあるユーザに設定する。

2. サービスのログイン者はパスワードを設定する。

3. APIはログイン者の権限で動作するため、ファイル出力する場合などは、ログイン者の権限が書き込めるファイル、フォルダを指定する。

OpenOffice.org 3.2.1 と 3.3.0で確認済みです。