BitArts Blog

ロードバイク通勤のRubyプログラマで伊豆ダイバー。の個人的なブログ。

サーバ上でPDF生成

Webアプリでの帳票印刷のために、サーバ上でテンプレートからPDFを生成したい。でも高いのヤダヤダ。OSSでやりたい。

永遠のテーマかと思っていましたが、今はこんな方法があった!

OpenOffice.orgをPDF変換のバックエンドサービスにしてしまう方法。

 

まずLinuxサーバ(今回はCentOS 5.4)にOpenOffice.orgをインストールする。結論から言うと現時点yumでインストールできるOpenOffice.org 2.3.0では後述のjodconverterがうまく動作しなかったので、OpenOffice.orgサイトから最新版3.2(Linux RPMJRE無し)をダウンロードしてインストールした。

$ tar xvfz OOo_3.2.0_LinuxIntel_install_ja.tar.gz
$ cd OOO320_m12_native_packed-1_ja.9483/RPMS/
# rpm -ivh *.rpm

そして肝。OpenOffice.orgをサーバとして起動する。

# /opt/openoffice.org3/program/soffice \
-headless -nofirststartwizard \
-accept="socket,host=localhost,port=8100;urp;" &

続いてJODConverterというのをダウンロードする。

これを使うと、こんな感じでコマンドライン一発でOpenDocumentのファイルをPDFに変換できる。

$ java -classpath jodconverter/lib \
-jar jodconverter/lib/jodconverter-cli-2.2.2.jar \
example.ods example.pdf

期待以上の非常に良好な結果が得られた!

OpenDocumentでなくてもOpenOffice.orgが読めるファイル形式ならOK。

 

OpenDocumentXML+ZIPなので、比較的簡単にごにょごにょすることができる。というわけで、あんなことやこんなことができるのではないかと思います。夢が広がる。