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