cakephpでxkhtmltopdfをVPS(CentOS)で実行できるようにする


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

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