2
4

More than 3 years have passed since last update.

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

Posted at

自分自身の過去記事(既に3年前)の焼き直しです。
時の流れは早い。。過去の自分が役立つかもと思い、整理しました。

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

# yum install libreoffice libreoffice-langpack-ja

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

# 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のインストール

# 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ファイルが生成されます。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4