PHP+LibreOffice実行環境の構築手順をまとめておきます。
ちゃちゃっと環境構築したいなら、「作業手順」の項だけ読んでください。
使い勝手、注意事項
- 変換後PDFの再現度はソコソコ。ページ・印刷設定はまず再現されない。PrimoPDFとかのレベルを期待してはダメ。
- 変換処理速度はそんなに期待できない。PHPExcelと同レベルの遅さかと(体感)。ファイルサイズが数MBを超えだすと1minでもキツそう。
- LibreOfficeインストールに2GB程度は容量が必要。
顧客要件が厳しい場合のPDF変換には正直、導入しづらい、、、
でも、Word/Excel/PowerPoint全てに対応できる点が◎
作業時にハマったポイント
libreoffice-packageのインストール
wget,rpmコマンドを使いこなしている人は大丈夫。yum installに普段頼りきりだとハマりそう。
font-dataのインストール
linux環境でのゴシック、明朝fontなどの使用を意識できている人は大丈夫。
PHPでのコマンド実行
apacheユーザ・環境変数の設定がキッチリされていれば、すんなり実行できるかも。
コケた場合はwarning・error-log出力などの手がかりなく、超ハマっちゃいました。。。
作業手順
libreoffice-packageのインストール
packageがyum管理下にあるなら、↓で一発。
1 2 |
# yum install libreoffice libreoffice-langpack-ja |
ない場合は↓。 (自分でダウンロード、インストールする。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# cd /tmp # wget http://download.documentfoundation.org/libreoffice/stable/5.0.4/rpm/x86/LibreOffice_5.0.4_Linux_x86_rpm.tar.gz # wget http://download.documentfoundation.org/libreoffice/stable/5.0.4/rpm/x86/LibreOffice_5.0.4_Linux_x86_rpm_langpack_ja.tar.gz # yum install libXinerama.so.1 # yum install libGL.so.1 # tar zxvf LibreOffice_5.0.4_Linux_x86_rpm.tar.gz # cd LibreOffice_5.0.4.2_Linux_x86_rpm/RPMS/ # rm libobasis5.0-gnome-integration-5.0.4.2-2.i586.rpm # yum install *.rpm # tar zxvf LibreOffice_5.0.4_Linux_x86_rpm_langpack_ja.tar.gz # cd LibreOffice_5.0.4.2_Linux_x86_rpm_langpack_ja/RPMS # yum install *.rpm |
以下のコマンドが通ればインストールOK。
# /opt/libreoffice5.0/program/soffice.bin --help
補足、苦しんだトコ
libobasis5.0-gnome-integration-5.0.4.2-2.i586.rpm
は、依存関係の解消がメンドクサくて断念。GUI機能向けだし、今回のコマンド実行には支障がないためインストール対象から除外した。。
font-dataのインストール
1 2 3 4 5 |
# wget http://dl.mojikiban.ipa.go.jp/IPAmjMincho/ipamjm00301.zip # unzip ipamjm00301.zip # cd ipamjm00301 # mv ipamjm.ttf /usr/share/fonts |
以下のコマンド結果リストに「IPAmjMincho,IPAmj明朝:style=Regular」があればOK。
#fc-list
補足
- WindowsPC内からMSフォントを持ってきても実行できるが、ライセンス違反なのでやらない。
PHPでのコマンド実行
sample.php
exec("export HOME=/tmp;/opt/libreoffice5.0/program/soffice.bin --headless --convert-to pdf --outdir /home/s3_bucket/image /home/s3_bucket/image/master.doc");
↑の感じで実行できます。
サンプルだと/home/s3_bucket/image/master.pdf
ファイルが生成されます。
補足、苦しんだトコ
- libreofficeをGUI起動中はコマンド実行できない(らしい)。
export HOME=/tmp;
がないと、libreofficeスレッドがsleepし続けて処理されない現象が発生した。EC2環境によっては発生しなかったのは解明できず・・・
以下のサイト見なければ解決できんかったす。超ハマッた。。。
http://superuser.com/questions/627266/convert-file-to-pdf-using-libreoffice-under-user-apache-i-e-when-using-php/usr/bin/libreoffice5.0
シンボル実行しようとすると、apache/PHPでは失敗する(コマンドラインでは通るのに~)。Bugとのことです。
所感、積み残したこと
- PDF変換結果の再現具合の検証、処理速度の計測したいなぁ。
- 環境・apache固有の問題にぶつかり、疲れました。。。勉強不足を痛感。