🔥

codeigniterでmpdf

2016/08/01に公開

今更感がありますが、
業務で管理画面にPDFの保存機能を実装しなければいけなくなったので
htmlからpdfへ出力できるphpライブラリ、mpdfを
codeigniterにライブラリとして追加して実装してみました。

需要あるかわかりませんが備忘録代わりにメモメモ。。

まずは<b>mpdf</b>のDL。
http://www.mpdf1.com/mpdf/index.php
(※var6.0を使用しています)

application/libraries/配下にDLしたフォルダごと配置します。
日本語に対応させるため、ttfファイルのインストールです。
商用可でみんな使っているipaフォントをDLします。

http://ipafont.ipa.go.jp/old/ipafont/download.html
あとは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