概要
mpdf7で外部フォントを指定する方法となります。
※参考にさせていただいた記事、「mpdfで利用するfontをライブラリ外から指定する方法」
を、mpdf7で可能にするものになります。
動作環境 | |
---|---|
PHP | PHP7 |
mpdf | 7.0.0-beta2 (https://github.com/mpdf/mpdf/tree/v7.0.0-beta2) |
手順
IPAゴシックを設置
下記URL
http://ipafont.ipa.go.jp/old/ipafont/IPAGTTC00303.php
などから、zipをダウンロードして解凍した「ipag.ttc」を、
たとえば、/path/to/ipag/ttcfont
フォルダに置く。
IPAゴシックを使うMpdfを初期化するサンプルコード
Util/PdfUtils.php
<?php
namespace App\Util;
class PdfUtils {
/** IPAゴシックフォントを置いたフォルダのパス */
const IPAG_FONT_FOLDER_PATH = '/path/to/ipag/ttcfont';
/**
* IPAゴシックフォントが利用可能のMpdfインスタンスを返す
* @param array Mpdfのconfig
* @return Mpdf IPAゴシックフォントが利用可能のMpdfインスタンス
*/
public static function initIpagFontAvailableMpdf($config){
$config['fontDir'] = [
(new \Mpdf\Config\ConfigVariables)->getDefaults()['fontDir'],
PdfUtils::IPAG_FONT_FOLDER_PATH,
];
$config['mode'] = 'ja+aCJK';
$mpdf = new \Mpdf\Mpdf($config);
$ipa_fonts = [
'ipag' => [
'R' => 'ipag.ttc',
'TTCfontID' => ['R' => 1],
],
'ipagp' => [
'R' => 'ipag.ttc',
'TTCfontID' => ['R' => 2],
],
];
foreach($ipa_fonts as $k => $v){
$mpdf->fontdata[$k] = $v;
$mpdf->available_unifonts[] = $k;
$mpdf->default_available_fonts[] = $k;
$mpdf->BMPonly[] = $k;
}
$mpdf->SetDefaultFont($config['default_font']);
return $mpdf;
}
}
↑Utilの呼び出し例
呼び出し例
use App\Util\PdfUtils;
//pdf設定
$mpdf_config = [
'mode' => 'ja',
'format' => 'A4-L',
'default_font_size' => 0,
'default_font' => 'ipag',
'margin_left' => 3,
'margin_right' => 3,
'margin_top' => 3,
'margin_bottom' => 3,
'margin_header' => 8,
'margin_footer' => 8,
'orientation' => 'P',
];
//$mpdf = new \Mpdf\Mpdf($mpdf_config); と書く代わりに↓でインスタンスを取得する
$mpdf = PdfUtils::initIpagFontAvailableMpdf($mpdf_config);
$mpdf->WriteHTML('<html><body>あいうえお</body></html>');
$pdf = $mpdf->Output(null, 'S');
参考記事
mpdfで利用するfontをライブラリ外から指定する方法
http://qiita.com/kunihiko_sugiura/items/7e33cd6490ea53a1b87d
mpdf/tests/Mpdf/ConfigurationTest.php
https://github.com/mpdf/mpdf/blob/9da7df98cc0cc2ff158ba7207a1324db222f04ee/tests/Mpdf/ConfigurationTest.php
所感など
Mpdfでは、まだotf形式のフォントが使えない様子。いまのところ古いttf(ttc)があるものしかいまのところ有効でないです。