JODConverterをPHPから利用してPDF変換

前の記事でJODConverterのインストールとデバッグで苦労してましたが、今度はPHPからJOCConverterを利用する方法。

環境はCentOS5.2

何も設定しないと
.openoffice.org2
のディレクトリがないと怒られる。

まずapacheの実行ユーザを確認。

httpd.confの「User」

lamppを導入している場合はこれが「nobody」とかになっているので、Group共に「apache」に変更。

ちなみにapacheユーザがいるかどうかは
# id apache
で確認。

通常apacheユーザはログインできないようになっているので、ログインできるようにして、OpenOffice.orgが実行できるようにユーザディレクトリなどを作成

# vi /etc/passwd

apache:x:48:48:Apache:/var/www:/sbin/nologin

apache:x:48:48:Apache:/home/apache:/bin/bash

# mkdir /home/apache
# chown apache /home/apache

OpenOffice.orgを起動してユーザ設定ファイルを作る。
# su apache
$ /opt/openoffice.org3/program/soffice

しかし、これだと/home/apache/.openoffice.orgしかできなかった。

めんどくさくなって、/root/.openoffice.org2をフォルダごとコピー
# cp -r ./.openoffice.org2/ /home/apache/

apacheユーザになって実行テスト
$ java -jar jodconverter.jar -f pdf '/tmp/test.xlsx'

問題なく完了。

最後にログインしないように戻しておく。
# vi /etc/passwd

apache:x:48:48:Apache:/home/apache:/sbin/nologin

webサーバを再起動
# /etc/rc.d/init.d/lampp restart

前のセッションが残っていると悪さするので削除
# rm -f /tmp/sess_*

新しくユーザ追加するやり方の方が楽だったかも。

実際試してみると

データ取得 → Excelの特定のセルにセット → PDF変換

で一つの帳票がだいたい15秒くらいかかった。PDF変換だけで10秒ちょっと。なんか速くする方法考えないと。

<2009/01/21 追記>
再起動後はパスの設定がリセットされるので、一度rootでログインしたあとlamppを再起動しないと変換に失敗する。

起動時にパスを設定するスクリプトを実行する必要がありそう。

<関連記事>