make is.dev make it simple. development.
2024年6月25日

LibreOfficeでEXCELをPDF変換

Linux環境でLibreOfficeを使ってEXCELファイルをPDFに変換してみる。

使用環境

・ Amazon Linux 2
・ LibreOffice 5.3.6.1

環境準備

Extras Libraryからyumでインストールしていく。
まずは、Extras Libraryを有効にする。

amazon-linux-extras

日本語用のLibreOfficeでインストールする。

yum install libreoffice-langpack-ja
yum install libreoffice

(任意)
ここまでだけでも日本語を含むPDFを生成できるが、フォントが微妙だったりする。
必要に応じてフォントを追加する。(例:IPAフォントの追加)

yum install ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts

実行方法

soffice --convert-to pdf ./sample.xlsx

最低限としてはこれだけで変換出来る。
(出力先はカレントディレクトリ、ファイル名はxlsxファイルに合わせてsample.pdfで生成される)

soffice --convert-to pdf --outdir ./output ./sample.xlsx

出力先を指定する場合は、–outdirオプションで出力先を指定すれば任意の場所に出力できる。

PHPから実行する場合

PHPで利用する際は、exec()を使えば処理の中でこれを活用出来る。

$command = 'export HOME=/tmp; soffice --convert-to pdf --outdir ./output ./sample.xlsx';
exec( $command, $output, $resultCode );
if ( $resultCode == 0 ) {
    // success
}
PHP

頭でHOMEを指定しているのは、Apacheユーザは/home配下にフォルダがないため。
実行ユーザによっては指定不要。

キャッシュ等実行時の一時ファイルが保存されるだけなので/tmpを指定しているが、毎回フォルダを作られ直すので、どこかフォルダを作って指定した方がベター。

変換結果

試しに変換した元ファイルはこれ。

変換結果はこちら。

いくつかダメな個所はあるが、精度高めに変換出来ている印象。

<ダメな個所>
・ 横の印刷範囲が指定通りではなく3ページ目、4ページ目に続いている(上記キャプチャでは省略)
・ 日付の書式出力で、令和がなく平成になっている(インストール出来ているバージョンの問題?)
・ フォントが微妙(ちゃんとフォント入れてないからというのもある)

この精度であれば、元のEXCELファイルの作りを少し調整するだけで活用出来る所はありそう。

補足事項

上記で変換は出来てはいるが、以下の警告が表示されてもいる。
解決しないと使えない機能がある様子だが、PDF変換には関係なさそうなので放置、、、。

javaldx: Could not find a Java Runtime Environment!
Warning: failed to read path from javaldx