CakePHPでPDF出力する(準備編)
投稿者: admin, カテゴリ: CakePHP, tags: CakePHP, PDF, PHP, phpMyFAQ投稿日: 2010.06.05 - 10:11
更新日: 2010.06.08 - 16:25
インストールとテストをします。様々な解説がありますが、やっぱりハマります。
過去には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 :
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=339&forum=3 - 凛の開発メモ | CakePHPでPDF出力 :
http://linbookmark.blog37.fc2.com/blog-entry-13.html - CakePHP の FPDF helper – 熊工房 ohgumaの腹凹ませたい日記 :
http://d.hatena.ne.jp/ohguma/20070227 - notitle :
http://www.fpdf.org/ - Setasign :: Downloads of FPDI and FPDF_TPL :
http://www.setasign.de/products/pdf-php-solutions/fpdi/downloads/
関連記事
- CakePHP,PHP でPDF出力(実践編)
- [CakePHP] 画像ファイルを読み込んで表示する
- phpMyFAQ warning [2]: Cannot modify header information
- CakePHP – PHPフレームワーク
- CakePHP 1.3 ヘルパー呼び出しの変更
- [PHP] 行ごとに背景色を変える
- PHPフレームワーク – CakePHP
スポンサードリンク
エントリ (RSS)