Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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);
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした