CakePHPを利用しているとき、PDFを出力できるようにしたいとき、htmlからPDFを作成するプラグイン「wkhtmltopdf」を利用します。
-
VPSのOSをチェック
cat /etc/ \
ls /etc -F | grep "release$|version$"`` -
OSがLinuxのサーバーで、xkhtmltopdfを利用する
-
以下のURLページで、Linux(CentOS6)の64bitをダウンロードすると以下が保存される
http://wkhtmltopdf.org/downloads.html
wkhtmltox-0.12.1_linux-centos6-amd64.rpm -
その後、解凍アプリケーションで、wkhtmltox-0.12.1_linux-centos6-amd64.rpmを解凍。
-
実行ファイル「wkhtmltopdf」と「wkhtmltoimage」をサーバーの「/usr/local/bin/」直下にアップロードする
-
以下のコマンドで、「/usr/local/bin/」の「wkhtmltopdf」ファイルの権限を変更する
chmod a+w wkhtmltopdf -
解凍した他のファイルも、サーバーの各ディレクトリに配置する
usr/local/lib/
->libwkhtmltox.so.0.12.1、libwkhtmltotox.so.0、libwkhtmltox.so、libwkhtmltox.so.0.12
usr/local/include/
->/wkhtmltox/
->dllend.inc、pdf.h、image.h、dllbegin.inc
usr/local/share/
->.fonts、fonts、IPAexfont00201、man
-
以下のコマンドを実行し、ライブラリをインストールする
sudo yum install libjpeg libpng libXrender libXext fontconfig
参考URL:https://github.com/zakird/wkhtmltopdf_binary_gem/issues/19 -
bootstrap.phpに以下のコードを追加
Cache::config('default', array(
'engine' => 'File',
'mask' => 0666 //本番環境に合わせる
));
CakePlugin::load('CakePdf', array('bootstrap' => true, 'routes' => true));
Configure::write('CakePdf', array(
'engine' => 'CakePdf.WkHtmlToPdf', // 使用するPDFエンジン
'binary' => '/usr/local/bin/wkhtmltopdf', // WkHtmlToPdfバイナリファイルのパス
'options' => array(
'print-media-type' => false,
'outline' => true,
'dpi' => 96
),
'margin' => array(
'bottom' => 0,
'left' => 0,
'right' => 0,
'top' => 0
),
'orientation' => 'landscape', // landscape(横)指定もできる
'download' => false // 表示のみかダウンロードか
));
- route.phpには以下を追加。
これで、.pdfの拡張を利用できるようになる
Router::parseExtensions('pdf');
-
PDFを出力したいコントローラー内で、以下を追加する
public $components = array('RequestHandler');
-
そして、Viewは以下のように用意する
View/モデル名/pdf/view.ctp
View/Layout/pdf/default.ctp