以前PHPで作成したシステムの改良依頼の1つに発表ファイル(ppt, pptx形式)を自動でPDF化して欲しいとの話があったので実装しました。
まず、サーバが CentOS なので yum で libreoffice をインストールしました。参考にしたサイトは
https://qiita.com/y_irabu/items/5d916562744b05c5fc82
https://lonelyse.campus-web.net/?p=284
です。コマンドラインで
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/upfile/20180330080737.pptx --outdir /var/www/html/upfile
まず、サーバが CentOS なので yum で libreoffice をインストールしました。参考にしたサイトは
https://qiita.com/y_irabu/items/5d916562744b05c5fc82
https://lonelyse.campus-web.net/?p=284
です。コマンドラインで
libreoffice --headless --nologo --nofirststartwizard --convert-to pdf /var/www/html/upfile/20180330080737.pptx --outdir /var/www/html/upfile
などとして upfile フォルダ(パーミッション777)に 20180330080737.pdf が生成されるのを確認しました。PHPへの組み込みは
\$command = sprintf("libreoffice --headless --nologo --nofirststartwizard --convert-to pdf %s/%s --outdir %s",\$upfile_dir, \$upfile_name, \$upfile_dir);
exec ($command);
(ただし、\$upfile_dir はファイルをアップロードするディレクトリの絶対パス、\$upfile_name はパワーポイントファイル名。)などとしましたがpdfファイルが生成されません。コマンドラインではスーパーユーザでなくともファイルが生成できたので何故だかよく分かりませんでしたが、やはりユーザ権限の問題だったようです。apacheユーザにlibreofficeを使えるようにする必要があるようでしたが visudo でファイルを編集するのは気が引けたので
を参考にして
\$command = sprintf("export HOME=/tmp;libreoffice --headless --nologo --nofirststartwizard --convert-to pdf %s%s --outdir %s", \$upfile_dir, \$upfile_name, \$upfile_dir);
exec($command);
とすると無事にpdfファイルが生成されました。libreofficeがあればpptファイルに限らずオフィス系のファイルは全てPDF化できるようなので機会があればまた使ってみます。
0 件のコメント:
コメントを投稿