PHPめも

PhpSpreadsheetでExcelファイルをゴニョゴニョし、それをPDFファイルへ変換して出力したい。
ゴニョゴニョは PHPでExcelファイルを読み込む を参考。

フリーソフトのLibreOffice(リブレオフィス)を使用すると簡単に実現できそう。

LibreOfficeのインストール

大量に色々入ります。

# yum install libreoffice

AWSなどyumで入れられない場合

公式サイトから安定版 Linux x64 (rpm) をダウンロードします。

$ tar xvzf LibreOffice_6.1.6_Linux_x86-64_rpm.tar.gz
# rpm -ivh LibreOffice_6.1.6.3_Linux_x86-64_rpm/RPMS/*.rpm
エラー: 依存性の欠如:
        libXinerama.so.1()(64bit) は libobasis6.1-core-6.1.6.3-3.x86_64 に必要とされています
# cd LibreOffice_6.1.6.3_Linux_x86-64_rpm/RPMS/
# yum install *.rpm
$ libreoffice6.1 -h
/opt/libreoffice6.1/program/soffice.bin: error while loading shared libraries: libdbus-glib-1.so.2: cannot open shared object file: No such file or directory
# yum install dbus-glib
$ libreoffice6.1 -h
/opt/libreoffice6.1/program/soffice.bin: error while loading shared libraries: libcairo.so.2: cannot open shared object file: No such file or directory
# yum install cairo
$ libreoffice6.1 -h
/opt/libreoffice6.1/program/soffice.bin: error while loading shared libraries: libcups.so.2: cannot open shared object file: No such file or directory

泣きそう

# yum install cups-libs
$ libreoffice6.1 -h
LibreOffice 6.1.6.3

フォントの設置

そのまま使用すると日本語が文字化けするのでIPAexフォントを利用させていただきます。
https://ipafont.ipa.go.jp/

IPAexfont00401.zip をダウンロードし、ipaexg.ttf, ipaexm.ttfの2ファイルを以下へ設置します。
/usr/share/fonts/japanese/TrueType/

変換

outdirで指定した場所へ Book1.pdfとして出力されます。

$ libreoffice --headless --nologo --nofirststartwizard --convert-to pdf --outdir ./ Book1.xlsx

PHPから実行する場合はHOMEディレクトリを指定してやります。

exec('export HOME=/tmp;libreoffice --headless --nologo --nofirststartwizard --convert-to pdf --outdir ./ Book1.xlsx');

1ページにうまく納まらない場合は、印刷の拡大縮小の設定を見直すと良いかも。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2021-09-19 (日) 19:09:22