HTMLをPDFに上手いこと変換してくれるwkhtmltopdfを日本語で使う ここで紹介したようにHTMLをPDFに変換するベストな選択肢はwkhtmltopdfですよと。そんでもって、それをCakePHPのViewに使いたいというわけで、便利なプラグインが会ったので紹介。
その名もceeram/CakePdf。使い方も簡単。いくつかのPDFエンジンに対応している。
対応PDFエンジン
- DomPdf
- Mpdf
- Tcpdf
- WkHtmlToPdf
もちろんオススメはWkHtmlToPdf。ただし、ライセンスの問題か、WkHtmlToPdfは内包していないので、別途手に入れる必要がある。まぁ、大した問題ではない。
逆に、DomPdfなどは最初からあるけど、使わないなら削除しちゃってもいいかも。ファイルサイズ大きいから。
URLに「.pdf」と付けるだけで、ViewをPDFにしてくれる
つまり、そういうことです。普段CakePHPで見ているページを、URLに「.pdf」とつけてアクセスするだけでPDFとしてダウンロードできちゃうわけです。
設定方法
GitHubに書かれているように、プラグインファイル本体をapp/Pluginディレクトリに配置する。
Config/routes.phpに
<?php
Router::parseExtensions('pdf');
と書いて拡張子PDFを有効にする。
Config/bootstrap.phpあたりに
<?php
CakePlugin::load('CakePdf', array('bootstrap' => true, 'routes' => true));
と記述する
同様にbootstrap.phpもしくは使用するコントローラに下記の設定を追記する。
<?php
Configure::write('CakePdf', array(
'engine' => 'CakePdf.WkHtmlToPdf', // 使用するPDFエンジン
'binary' => '/usr/local/bin/wkhtmltox/bin/wkhtmltopdf', // WkHtmlToPdfバイナリファイルのパス
'options' => array(
'print-media-type' => false,
'outline' => true,
'dpi' => 96
),
'margin' => array(
'bottom' => 5,
'left' => 5,
'right' => 5,
'top' => 5
),
'orientation' => 'portrait', // landscape(横)指定もできる
'download' => true // 表示のみかダウンロードか
));
ダウンロードのファイル名を都度変更したい場合は
<?php
$this->pdfConfig = array(
'filename' => 'ご請求書_' . $id
);
こんな感じで指定できる。
あとは、PDFにしたいURLの一番最後に「.pdf」と付ければ数秒でPDFがダウンロードされるはず。