office系ファイルをPDFに変換する(PHP+LibreOffice)

2016年08月05日
投稿者:kasssy
カテゴリ:PHP, 未分類 タグ:, ,

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管理下にあるなら、↓で一発。

ない場合は↓。 (自分でダウンロード、インストールする。)

以下のコマンドが通ればインストールOK。
# /opt/libreoffice5.0/program/soffice.bin --help

補足、苦しんだトコ

  • libobasis5.0-gnome-integration-5.0.4.2-2.i586.rpmは、依存関係の解消がメンドクサくて断念。GUI機能向けだし、今回のコマンド実行には支障がないためインストール対象から除外した。。
font-dataのインストール

以下のコマンド結果リストに「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固有の問題にぶつかり、疲れました。。。勉強不足を痛感。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です