[Codeigniter3]mPDFを使う

■インストール

https://github.com/mpdf/mpdf/

composerでインストール

$ composer require mpdf/mpdf

composer.json

{
    "require": {
        "twig/twig" : "1.*",
        "mpdf/mpdf": "^7.0"
    }
}

■日本語対応

※「残り」「坂本」「変更」等がおかしい。

https://ipafont.ipa.go.jp/old/ipafont/download.html

TTFファイルの「4書体パック」をダウンロード&解凍後、以下のTTFファイル(4ファイル)をapplication/vendor/mpdf/mpdf/ttfontsに保存します。

ipag.ttf
ipagp.ttf
ipam.ttf
ipamp.ttf

■設定

application/vendor/mpdf/mpdf/src/Config/FontVariables.php

	public function __construct()
	{
		$this->defaults = [

			'fontdata' => [
				/* CJK fonts */
				"sun-exta" => [
					'R' => "Sun-ExtA.ttf",
					'sip-ext' => 'sun-extb', /* SIP=Plane2 Unicode (extension B) */
				],
				"sun-extb" => [
					'R' => "Sun-ExtB.ttf",
				],
				"unbatang" => [/* Korean */
					'R' => "UnBatang_0613.ttf",
				],
			// 追記
				"ipa" => [
					'R' => "ipamp.ttf",		// 使用するフォントを記述
				],
			],
		];

application/vendor/mpdf/mpdf/src/Language/LanguageToFont.php

	public function getLanguageOptions($llcc, $adobeCJK)
	{

		switch ($lang) {
			・・・
			case "ja":
			case "jpn": // Japanese HIRAGANA KATAKANA
				if ($adobeCJK) {
					$unifont = "ipa,sjis";		// 変更
				} else {
					$unifont = "ipa";			// 変更
				}
				break;

■使い方

application/controllers/Pdf.php

	/*
	 * PDF作成
	 */
	 public function makePdf(){

		$data = [];

		// ファイル名を設定
		$filename = 'sample.pdf';

		// CSSファイル指定
		$css = file_get_contents($this->config->base_url() . "/css/pdf.css");

		// mPDF設定
		$mpdf = new \Mpdf\Mpdf(['mode' => 'ja',
								'format' => 'A4',
								'margin_left' => 3,
								'margin_right' => 3,
								'margin_top' => 2,
								'margin_bottom' => 2,
					]);

		// テンプレート指定
		$template = 'template/pdf/pdf.twig';

		// レンダリング後の出力を取得
		$html = $this->twig->render($template, $data);
		$mpdf->WriteHTML($css, 1);	// 1:CSS指定
		$mpdf->WriteHTML($html, 2);	// 2:HTML指定

		$mpdf->setTitle($filename);
		$mpdf->Output($filename, 'D');		// D:ファイル名を指定してダウンロード
		// $mpdf->Output($filename, 'I');	// I:ファイル名を指定してブラウザに出力
	
	 }

コメント

タイトルとURLをコピーしました