Pocket
LINEで送る

mPDFのcakePHP用コンポーネントを作ってくれている人がいるのでそれを使った。

コンポーネントの説明も分かりやすいし、操作も簡単なので有り難い。
このコンポーネントを使って出力すると下記のようになる。

public $components = array('Mpdf');

public function make_bill($filename){
	$this->layout = 'pdf';
	$info = array('name' => '太郎');
	$this->set(compact($info));
	$this->Mpdf->init(array('mode'=>'ja'));
	$this->Mpdf->setFilename($filename);
	$this->Mpdf->setOutput('F');
}

これだけで、普通にHTMLを表示する場合と同じように、レイアウト・ビューが使える。
ただ、このコンポーネントは、cakePHPがブラウザに出力する直前にmpdfのoutputを行っている。PDFを一つ作成するだけなら問題ないかもしれないが、複数のPDFファイルを作成し、サーバに保存したい場合などは、このコンポーネントだと問題がある。
複数のファイルを作成・保存する場合は、コンポーネントを改造するか、直接mPDF本体を使う必用がある。

mPDF本体を使う場合は下記のようになる。

private function make_bill2($filename,$info){
	Configure::write('debug', 0);
	App::import('Vendor', 'Mpdf/mpdf');
	
	//PDF作成用HTMLの取得
	$View = new View();
	$View->viewPath = 'jobs'; // Viewの下のフォルダ名
	$View->viewVars = $info; //パラメータ
	$html = $View->render('make_bill','pdf');
	
	//PDF作成
	$mpdf = new mPDF('ja', 'A4');
	$mpdf->writeHTML($html);
	$mpdf->Output($filename,'F');
}

これで、コンポーネント使用時と同じレイアウト・ビューも使える。

参考:
http://npucc.com/index.php?mPDF
【cakePHP】コントローラからViewファイルを使う

追記:2013年6月18日

Shell経由で上記を使うとうまくスタイルシートが読み込めなかった。pdfレイアウトにHTMLヘルパーで読み込んでるんだけど、絶対パスにしてもダメなので、下記のようにスタイルシートファイルを直接mPDFに渡した。

$css = file_get_contents(CSS . 'pdf.css');
$mpdf = new mPDF('ja', 'A4');
$mpdf->writeHTML($css,1);
$mpdf->writeHTML($html);
$mpdf->Output($full_path,'F');

スタイルシートを渡すときは、writeHTMLの第二引数を1にする。またHTMLよりも先に読み込ませる。

Pocket
LINEで送る


1件のコメント

cakephp mpdf A4横でブラウザ表示 | Logicky Blog · 08/15/2014 05:46

[…] 前の記事:cakePHP2.3 mPDFを使ってPDFを出力する(レイアウト・ビューを使ってPDFを作成しサーバに保存する) […]

コメントください

関連記事

プログラミング

Go言語によるビットコインのフルノード実装btcdを調べる(2)

btcdを実行した際のプログラムの流れを最初から確認してみます。 se 続きを読む …

プログラミング

Go – leveldb

Goで使えるLevelDB。 syndtr/goleveldb ドキュ 続きを読む …

%d人のブロガーが「いいね」をつけました。