9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mpdfで利用するfontをライブラリ外から指定する方法

Posted at

mpdf version6.1環境を前提に記載します。

phpからhtmlをpdfに変換するライブラリとしてmpdfがあります。
歴史のあるライブラリのようなので、まだ利用されている方もいらっしゃると思います。
歴史があるだけあってコードを見てもムムムッってなりますね。
mpdf.phpだけで3万行以上あります。

さて表題の件ですがネットを見るとmpdf内のconfigファイルを直接編集する方法が出て来ます。
Composer経由でライブラリ管理した場合、一般的にvenderディレクトリはバージョン管理外に指定すると思いますので、上記以外の対応が必要になってきます。

以下の方法で対応が可能でした。

// フォントを探す際に_MPDF_SYSTEM_TTFONTSが優先して適用される。
// 外部から指定可能とするために未定義となっている。
define('_MPDF_SYSTEM_TTFONTS', APPPATH."ttfont/");
// CSSで利用するフォント名称
$JpFontName = 'ipapgothic';

// 日本語・中国語・韓国語を強制的に有効化
// ver6ではコンストラクタ内で'aCJK'が指定されていれば、useAdobeCJKが有効なる
$mpdf = new mPDF('ja+aCJK');

// fontのの指定を行います。
// setFontDataとかmethodで定義されていないのでmpdfのコンストラクタ内で実行しているfont設定処理も併せて実行します。
$mpdf->fontdata[$JpFontName] = array(
    'R' => 'ipapgothic.ttf',
);
$mpdf->available_unifonts[] = $JpFontName;
$mpdf->default_available_fonts[] = $JpFontName;

// 日本語の場合、以下の指定をしないと文字化けします。
// 以下の英語のコメントがあるので、下の解説と併せると不要に見えますが指定しておきます。
//----------------------------------------------------------------------------------------------
// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes
// but you do not require them. This allows a more efficient form of subsetting to be used.
//----------------------------------------------------------------------------------------------
// BMP:基本多言語面(Basic Multilingual Plane)
//  ・現在よく使われている欧米のアルファベットやCJK漢字コードなどが割り当てられている。最初のUnicode規格で制定されていた領域
//  ・この面のコードは16bit以内で表現できるため、コード効率がよい
// SMP:追加多言語面(Supplementary Multilingual Plane)
//  ・現在ではあまり使われていない古代の文字や、顔文字などの記号類を収容
// SIP:追加漢字面(Supplementary Ideographic Plane)
// ・人名でしか使わないような、使用頻度の低い漢字などを収容
//----------------------------------------------------------------------------------------------
$mpdf->BMPonly[] = $JpFontName;

$mpdf->SetDefaultFont($JpFontName);
9
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?