🔥
codeigniterでmpdf
今更感がありますが、
業務で管理画面にPDFの保存機能を実装しなければいけなくなったので
htmlからpdfへ出力できるphpライブラリ、mpdfを
codeigniterにライブラリとして追加して実装してみました。
需要あるかわかりませんが備忘録代わりにメモメモ。。
まずは<b>mpdf</b>のDL。
(※var6.0を使用しています)application/libraries/配下にDLしたフォルダごと配置します。
日本語に対応させるため、ttfファイルのインストールです。
商用可でみんな使っているipaフォントをDLします。
あとはconigにttfファイルを読ませます。
##config_fonts.php
mpdf/config_fonts.php
//この配列の最後にDLしたttfファイルを追加
$this->fonttrans = array(
"ipafont" => array(
'R' => "ipam.ttf",
),
これでview側でfontの指定をするときに
<div style=font-family: ipafont;"></div>
で日本語フォントが使えます(今回は明朝です)。
mpdfを使用するために、librariesにユーザーライブラリのファイルを作成します。
##Pdf_converter.php
Pdf_converter.php
class Pdf_converter
{
public function __construct()
{
require_once(APPPATH . 'libraries/mphp/mpdf.php');
}
/**
* PDFファイルを作成、保存する
* @param string $html [出力するhtml]
* @param string $file_name [保存ファイル名]
*/
public function convert_pdf($html, $file_name)
{
//日本語、A4、フォントサイズ、書式、上下左右、ヘッダ、フッタのマージンです
$mpdf = new mPDF('ja', 'A4', 0, '', 0, 0, 0, 0, 0, 0);
//trueでエラーmsgを出力
$mpdf->showImageErrors = ENVIRONMENT == 'development' ? true : false;
//WriteHTMLに出力するhtmlの文字列を渡す
$mpdf->WriteHTML($html);
//ファイルパスと”F”でサーバにファイルを保存
$mpdf->Output(FCPATH . 'pdf/' . $file_name, 'F');
return $file_name;
}
}
あとはコントローラー側からviewのデータを渡すだけ。
phpにはfile_get_contents()っていう関数がありますが、
codeigniterのviewをロードする際に記述する
$html = $this->load->view('output/index', param, true)
の第3引数にtureを指定するとviewの内容を文字列として扱えるので
そいつをさっき作成したライブラリに渡せばPDFが出力されます。
外部CSSを読み込んだりもできるらしいんですが、
いかんせん効かないスタイルがあったりと手探りな状態です。
個人的にはインライン要素(spanタグとか)ではCSSが効いていないような
感じがします。
どなたか検証した人いたら教えてください。
Discussion