[CakePHP]CakePdfでPDFをCakeShellから使う方法

FriendsOfCake/CakePdfはviewからPDFを生成する便利でクールなCakePHPのプラグインです。

GitHub - FriendsOfCake/CakePdf: CakePHP plugin for creating and/or rendering PDFs, supporting several popular PDF engines.
CakePHP plugin for creating and/or rendering PDFs, supporting several popular PDF engines. - FriendsOfCake/CakePdf

しかし、PDFというと帳票などをバッチで一括で作成したいというような要望も多いはず。
ですが、CakePdfでそういった使い方の説明が無かったのでいろいろ試してできないか見てみました。

まずは、ここの説明をもとに
通常仕様ができるようにインストールします。
基本的に書いてある通りで大丈夫なはずなのです。
ただ、変換モジュールにwkhtmltopdfを使ったのですが、パスが標準の場所ではなかったので起動しませんでした。
バイナリファイルの場所を調べて,bootstrap.php等に下記のように設定すれば大丈夫かと思います。
Configure::write(‘CakePdf.binary’, ‘/use/local/bin/wkhtmltopdf’);

先の公式URLにもありますが、画像などのリンク先をフルパスで出さないとPDF化する際に読み込めない問題がありますので、AppModel.phpに細工を行います。
APP/Model/AppModel.php

class AppModel extends Model {
	public function assetUrl($path, $options = array()) {
		if (!empty($this->request->params['ext']) && $this->request->params['ext'] === 'pdf') {
			$options['fullBase'] = true;
		}
		return parent::assetUrl($path, $options);
	}
}

では、問題のShellでの動かし方です。

APP/Console/Command/MkpdfShell.php

< ?php
App::uses('CakePdf', 'CakePdf.Pdf');
class MkpdfShell extends AppShell
{
	public $uses = [];

	public function main()
	{
		$CakePdf = new CakePdf(Configure::read('CakePdf'));	//APPの設定を引き継ぐ
		
		//テンプレートをセット
		//app/View/Pdf/hoge.ctp (view)
		//app/View/Layouts/pdf/default.ctp (layout)
		$CakePdf->template('hoge', 'default');
		
		$CakePdf->viewVars(['test'=>'hoge']);
		
		$pdf = $CakePdf->output();
		
		$pdf = $CakePdf->write(TMP. 'hoge.pdf');
		
	}
}

まずはnewでインスタンスを生成します。
その時に初期設定を渡すためにbootstrap.phpで設定した初期設定を呼び出して入れています。

テンプレートはCakePdf::templateメソッドで指定でき、以下の場所に配置します
app/View/Pdf/hoge.ctp (view)
app/View/Layouts/pdf/default.ctp (layout)

フォーマットは通常のViewと同じ感覚で使えますが、Viewへ値を渡す場合はsetメソッドではなくCakePdf::viewVarsメソッドで設定します。
使い方としてはCakeのEメールコンポーネントとほぼ同じかと思います。

最後にCakePdf::writeメソッドで指定の場所にファイル出力します。

以下のようなコマンドを実行するとAPP/tmpディレクトリにhoge.pdfができているはずです。
#./app/Console/cake mkpdf

タイトルとURLをコピーしました