PhpSpreadsheetとTcpdfでExcelファイルから日本語PDFを作成してみる(そして失敗する)
はじめに
PDFの帳票をLaravelから作成したかったので、いろいろ試しています。Excelテンプレートから変換できると実装も運用もサイコーだと思って試してみた記録です
(あらかじめお断りしておきますが、実用レベルになりませんでした・・・)
(あらかじめお断りしておきますが、実用レベルになりませんでした・・・)
環境準備(composer)
composerを利用してPhpSpreadsheetをインストールします
composer require phpoffice/phpspreadsheetPhpSpreadsheet の公式ドキュメントによると、PDFライブラリは、TCPDF, Dompdf , mPDF libraries の3つが利用できるようです。 全部試しましたが、最終的にTCPDFになりました。でもTCPDFはもうメンテナンスされていないようです。
composer require tecnickcom/tcpdfバージョン情報
"require": { "php": "^7.1.3", "phpoffice/phpspreadsheet": "^1.6", "tecnickcom/tcpdf": "^6.2" },
日本語フォントインストール
TCPDFで日本語フォントを利用するを参照に設定してください。
ExcelからPDF出力
動かしたコードは以下になります
(composer でクリーンインストールした Laravel の HomeController で試しています)
事前に、 public/excel/template.xlsx にエクセルファイルを置いてください。
今回はboardの請求書エクセルテンプレート(無料)_タテ型_001で試してみました。
(composer でクリーンインストールした Laravel の HomeController で試しています)
事前に、 public/excel/template.xlsx にエクセルファイルを置いてください。
今回はboardの請求書エクセルテンプレート(無料)_タテ型_001で試してみました。
getActiveSheet(); $sheet->setCellValue('A3', 'サンプル株式会社'); File::setUseUploadTempDirectory(public_path()); $writer = IOFactory::createWriter($spreadsheet, 'Tcpdf'); $writer->setFont('ipaexm'); $writer->save(public_path() . '/excel/output.pdf'); $writer = new Xlsx($spreadsheet); $writer->save(public_path() . '/excel/output.xlsx'); } }
エクセル出力はバッチリでした!
残念なPDF・・・
ということで、日本語出力するという目的は達成できましたが、業務で利用するレベルのPDFにはなりませんでした。PDF出力は闇が深い・・・