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を再起動しないと変換に失敗する。
起動時にパスを設定するスクリプトを実行する必要がありそう。
<関連記事>