PHP でExcel(xlsx)をPDF変換する方法5選

ウェブフォームの内容をエクセルに書き込んでPDF出力する方法を調査したときの覚書。

環境: CentOS Stream 8, PHP 7.4.19


1.PhpSpreadsheet

PHPでエクセルを編集できるライブラリ。
開発が活発なので安心感がある。

PDFに出力するときはTCPDFなどの外部ライブラリを使う。

これで問題なく変換できるのであれば一番いいと思う。
試す予定。


2. PhpSpreadsheet + LibreOffice

PhpSpreadsheetでエクセルを編集してLibreOfficeでPDF変換する方法。

LibreOfficeはオープンソースのオフィスソフト。
OpenOfficeの後継ソフト。

LinuxサーバーにインストールしてLibreOfficeのコマンドで変換する。
14年前にOpenOfficeで試したときは変換に時間掛かるし、環境整えるのが大変だったので優先順位は低い。
参考: 【Linux】OpenOffice.orgとJODConverterでExcelをPDF変換(設定編)

今なら下記のような外部APIが充実しているので、わざわざこの方法を選択する理由はない。


3. Google Drive API

GoogleドライブのAPIを利用してPDF形式でダウンロードする方法。

無料で利用できるが、100秒間に20,000回の制限がある。
(まず制限に引っかかることはなさそう)

テンプレートとして作成したスプレッドシートをAPI経由で編集して、PDFとしてダウンロードした方がいいかもしれない。

作成したエクセルをアップロード→PDFダウンロードしてみると、フォントがMS Pゴシックになる。
エクセル側をMS Pゴシックで作成するようにすればいいかもしれない。

あとセル幅が調整されるので少しレイアウトが崩れる。


4. PhpSpreadsheet + Microsoft Graph API

マイクロソフトのAPIを使って変換する方法。
本家なので複雑なExcelでも綺麗にPDF変換される予感がする。

Microsoft 365(Office365) Businessを契約していれば追加料金は掛からない。
家庭向けMicrosoft Officeの契約ではAPIに必要なAzure Active Directoryが使えない。

1秒間に25アイテムの取得制限。
(まず制限に引っかかることはなさそう)

ドキュメントがしっかりしていて分かりやすい。

OneDriveにエクセルをアップロード→PDFダウンロードしてみると、ほぼ直接PDF生成したときと変わらない。
ただセル高が少し調整されているので下に余白があった。

月額650円をどうとるか。
お金を掛けるならWindows Serverを用意してPowerShellでExcel→PDFに変換するという方法もある。


5. Adobe PDF Services API

Adobeのクラウドソリューション。
動的データからPDFドキュメントをあっという間に生成できるらしい。

まだエクセルからPDFの変換は対応していない(?)。
そもそもエクセルを経由せずPDFを直接生成するソリューションだと思う。


6. 【番外編】TCPDFで直書き

今まではエクセルを変換すると綺麗なPDFにならないので、TCPDFでテンプレートPDFの上から座標指定で書き込んだり、新規PDFを生成して枠線を描画していた。

処理が速く、送信完了メールにPDFを添付できるので利便性がいい。

開発も慣れれば問題ないけど時間は掛かるので、テンプレートのエクセルと作って、セルとデータのマップを設定すれば、様々な帳票に出力できるのが理想。


【関連記事】