PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
2025/06/21
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定したセルにデータを書き込んだ上で別名で保存するという記事を書いたが、その保存ファイルをPDFに変換したかった。LibreOfficeと連携させることである程度実用的な形になったので以下に実装方法をメモ。
前提
過去記事のようにPhpSpreadsheetを導入した上で、フォーマット用のExcelを読み込み、指定したセルにデータを書き込んだ上で別ファイル名としてサーバに保存した状態。ファイルは以下のような形。
LibreOfficeのインストール
サーバにSSH接続し以下コマンドでインストールする。
yum install -y libreoffice libreoffice-langpack-ja
ソースコード
<?php //出力先のディレクトリ $file_path = '/aaa/bbb/ccc'; //変換する元のエクセルファイル $xlsx_path = $file_path . '/test.xlsx'; //エクセル→PDF変換 $command = 'export HOME=/tmp && /usr/bin/soffice --headless --convert-to pdf --outdir '.$file_path.' '.$xlsx_path; exec($command);
「出力先のディレクトリ」「変換する元のエクセルファイル」部分は適宜変更する。
返還後のPDFは以下のような形になった。
気になる点
PDFの表示について
以下の点がちょっと気になるかも。
- 高さが微妙に狭まっている
- 日付部分(納品日、納期)が英語表記(月/日/年順)
日付の方はローカル等でエクセルを開き、書式を文字列に変更してからアップロードすることで解決できた。
高さの調整は解決方法が見つからず。
レンタルサーバの場合
以下の点によりレンタルサーバだと実装できない可能性が高そう。
- LibreOfficeのインストールが難しそう
- exec関数を使うため禁止されているサーバだと実装不可
所感
多少制限はあるもののVPSや専用サーバ、AWS等だと実装できそう。また、高さ以外の部分は見た目的にも問題無いかと思われるので引き出しの一つとして持っておきたい。
参考サイト
https://www.wantedly.com/companies/logical-studio/post_articles/309603
関連記事
-
-
PHPでテンプレートPDFに動的に文字や数値を追記し出力する方法(TCPDF&FPDI)
請求書や領収書のテンプレートがあり、そちらに対して動的に文字・数値を追記し出力さ ...
-
-
PhpSpreadsheetでセル内の文字列の改行、セル幅の自動調整を行う方法
以前PHPとPhpSpreadsheetを用いてExcelシートを出力する方法を ...
-
-
HTML / CSSで作成したコンテンツをPDFファイルで出力する方法(TCPDF)
HTML / CSSで作成したコンテンツをPDFファイルで出力させたい。以前mp ...
-
-
PHPにてHTML / 画像ファイルをPDFファイル化する方法(mPDF)
PHPにてHTML / 画像ファイルをPDFファイル化したい。検索してみるもサー ...
-
-
FPDIで「This PDF document probably uses~~」エラーの対処方法
FPIDであるPDFを読み込ませようとすると「This PDF document ...