PHP でExcel(xlsx)をPDF変換する方法5選
ウェブフォームの内容をエクセルに書き込んでPDF出力する方法を調査したときの覚書。
環境: CentOS Stream 8, PHP 7.4.19
1.PhpSpreadsheet
PHPでエクセルを編集できるライブラリ。
開発が活発なので安心感がある。
PDFに出力するときはTCPDFなどの外部ライブラリを使う。
- GitHub - PHPOffice/PhpSpreadsheet: A pure PHP library for reading and writing spreadsheet files
- Welcome to PhpSpreadsheet's documentation - PhpSpreadsheet Documentation
- Reading and writing to file - PhpSpreadsheet Documentation
これで問題なく変換できるのであれば一番いいと思う。
試す予定。
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アイテムの取得制限。
(まず制限に引っかかることはなさそう)
- Microsoft Graph API を使用する - Microsoft Graph | Microsoft Docs
- 他の形式に変換する - Microsoft Graph v1.0 | Microsoft Docs
- Microsoft Graph コネクタの API 制限 - Microsoft Graph | Microsoft Docs
ドキュメントがしっかりしていて分かりやすい。
OneDriveにエクセルをアップロード→PDFダウンロードしてみると、ほぼ直接PDF生成したときと変わらない。
ただセル高が少し調整されているので下に余白があった。
月額650円をどうとるか。
お金を掛けるならWindows Serverを用意してPowerShellでExcel→PDFに変換するという方法もある。
5. Adobe PDF Services API
Adobeのクラウドソリューション。
動的データからPDFドキュメントをあっという間に生成できるらしい。
- PDFの可能性を広げるAdobe Document Serviceの新しい API
- Adobe PDF Services | PDF Tools APIs | Adobe Document Services - Adobe Developers
まだエクセルからPDFの変換は対応していない(?)。
そもそもエクセルを経由せずPDFを直接生成するソリューションだと思う。
6. 【番外編】TCPDFで直書き
今まではエクセルを変換すると綺麗なPDFにならないので、TCPDFでテンプレートPDFの上から座標指定で書き込んだり、新規PDFを生成して枠線を描画していた。
処理が速く、送信完了メールにPDFを添付できるので利便性がいい。
開発も慣れれば問題ないけど時間は掛かるので、テンプレートのエクセルと作って、セルとデータのマップを設定すれば、様々な帳票に出力できるのが理想。