インストールとテストをします。様々な解説がありますが、やっぱりハマります。
過去にはphpMyFaqでPDF出力にバグがあった際、それを直せなかった、挫折した経験があるので、同じものを使うとなると、やっぱりアレルギー出ます・・・。そしてしっかりハマりました。
ここではCakePHP 1.2の環境でPDF出力できるようにします。
FPDFの準備
- まず、ダウンロード
- 解凍したファイルを /vendors/fpdf に転送
FPDIの準備
- まず、ダウンロード
- 解凍したファイルを /vendors/fpdi に転送
スポンサードリンク
インストールというか、変更
fpdf/japanese.php の変更
変更1
//require('fpdf.php');
↓
App::import('Vendor', 'FPDF', array('file' => 'fpdf/fpdf.php')); App::import('Vendor', 'FPDI', array('file' => 'fpdi/fpdi.php'));
変更2
//class PDF_Japanese extends FPDF
↓ classの変更と、$SJIS_widths を class の外から内に移動して、var をつける
class PDF_Japanese extends FPDI{ var $SJIS_widths=array(' '=>278,'!'=>299,'"'=>353,'#'=>614,'$'=>614,'%'=>721,'&'=>735,'\''=>216,
変更3
function AddSJISFont($family='SJIS'){ //Add SJIS font with proportional Latin $name='KozMinPro-Regular-Acro'; //$cw=$GLOBALS['SJIS_widths']; $CMap='90msp-RKSJ-H'; $registry=array('ordering'=>'Japan1','supplement'=>2); //$this->AddCIDFonts($family,$name,$cw,$CMap,$registry); $this->AddCIDFonts($family,$name,$this->SJIS_widths,$CMap,$registry); }
レイアウトの追加
/views/layouts/pdf.ctp を作成
<?php //header('Content-type: text/html'); header('Content-type: application/pdf'); header('Content-Disposition: attachment; filename="downloaded.pdf"'); header('Cache-Control: no-store, no-cache, must-revalidate'); echo $content_for_layout; ?>
ヘルパーの追加
/views/helpers/fpdf.php を作成
以下のサイトから拝借。コピペは常に全角文字の混入などに注意する。
CakePHP1.2RC3でPDFを作成するときのメモ – 忍び歩く男 – SLYWALKER :
http://d.hatena.ne.jp/slywalker/20081030/1225374299
テスト環境の準備
コントローラ controllers/tests_controller.php 、 ビュー views/tests/index.ctp を以下を参考に準備する。
忍び歩く男 – SLYWALKER :
http://d.hatena.ne.jp/slywalker/200810
あとは設置urlにアクセスすれば保存画面が出る。
ハマリどころ
- CakePHP のバージョンの関係で使えなくなるもの、規約が変更になるものなどがあるので注意。thtmlはもう使わないとか。常にctpなので関係なかったけど。
- var $SJIS_widths の場所を移動しないと、そんなプロパティーはねぇと怒られる。
- header(‘Content-Disposition: attachment; filename=”downloaded.pdf”‘); を入れないと保存画面が出なかった。画面上で開ければいいけれどうまく行かなかった。
- HTTPのヘッダを確認することは重要。何が出てるのか調べると意外なものが出てたりする。キャッシュなどにも関係しているのでしょう。
- ハマったら、
- 全角文字の混入などにもう一度注意してみて~
- tests_controller.php のデバッグレベルを0にしているところを一度コメントアウトし~
- layout/pdf.ctp のhttpヘッダでPDFを出力しているとろを、一旦テキストにしてみて~
- httpヘッダを見るツールで見てみて~
- ブラウザもきちんと更新されているか動作を注意深く見てみて~ とかかな
参考文献
- “PDFファイルをPHPで即、生成” フォーラム – CakePHP Users in Japan :
CakePHP - Build fast, grow solid | PHPフレームワークCakePHP is an open-source web, rapid development framework that makes building web applications simpler, faster and requ... - 凛の開発メモ | CakePHPでPDF出力 :
凛の開発メモ | CakePHPでPDF出力EC-CUBEとかCakePHPとかWordPressとか。 - CakePHP の FPDF helper – 熊工房 ohgumaの腹凹ませたい日記 :
2007-02-27熊工房 ohgumaの腹凹ませたい日記 - notitle :
FPDFThe FPDF site - Setasign :: Downloads of FPDI and FPDF_TPL :
Download FPDI from ▷ setasign.comDownload the FPDI free from ⏩ setasign.com - FPDI was initially developed for FPDF but can also be used with TCPDF,tFPDF...
コメント