Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
7
Help us understand the problem. What is going on with this article?
@kunihiko_sugiura

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);
7
Help us understand the problem. What is going on with this article?
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.
Sign Up
If you already have a Qiita account Login
7
Help us understand the problem. What is going on with this article?