こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

mpdfで複数のフォントを使いたい

mpdfを使ってhtmlをPDFに変換していますが、一番に優先されるフォントでしか表示されません。
複数のフォントを使えるようにするにはどうすればよいでしょうか。


★元となるhtml
http://pips.chu.jp/pdf/font2/index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta name="GENERATOR" content="IBM WebSphere Studio Homepage Builder Version 14.0.8.0 for Windows">
<title></title>
<style type="text/css">
<!--
body{
font-family : IPAPゴシック,IPAP明朝;
}
-->
</style>
</head>
<body>
<font face="IPAPゴシック">この部分はゴシックにしたい(IPAPゴシック)</font>
<br><br>
<font face="IPAP明朝">この部分は明朝にしたい(IPAP明朝)</font>
</body>
</html>


★上記のhtmlをPDF変換するためにmpdfのデータを修正

手順1.「ttfonts/」フォルダの中にipagp.ttfファイルとipamp.ttfファイルを置きました。


手順2.「config_fonts.php」の「$this->fontdata()」にてフォントを定義しました。

$this->fontdata = array(
"dejavusanscondensed" => array(
'R' => "DejaVuSansCondensed.ttf",
'B' => "DejaVuSansCondensed-Bold.ttf",
'I' => "DejaVuSansCondensed-Oblique.ttf",
'BI' => "DejaVuSansCondensed-BoldOblique.ttf",
),
"dejavusans" => array(
'R' => "DejaVuSans.ttf",
'B' => "DejaVuSans-Bold.ttf",
'I' => "DejaVuSans-Oblique.ttf",
'BI' => "DejaVuSans-BoldOblique.ttf",
),

~~ 中略 ~~

"ipag" => array(
'R' => "ipagp.ttf",
),
"ipam" => array(
'R' => "ipamp.ttf",
),
);



手順3.「config_fonts.php」の「$this->BMPonly」にもフォントを定義しました。

$this->BMPonly = array(
"dejavusanscondensed",
"dejavusans",
"dejavuserifcondensed",
"dejavuserif",
"dejavusansmono",
"pagp.ttf",
"pamp.ttf",
);


手順4.「config_cp.php」の「$unifonts」にてフォントを使いますよ宣言をしました。

CASE "ja":
if ($adobeCJK) {
$unifonts = "ipagp.ttf,ipamp.ttf,sjis,sjisB,sjisI,sjisBI";
}


★呼び出し元(index.php)は下記の通りです。

<?php
require_once('mpdf.php');

$html = file_get_contents("http://pips.chu.jp/pdf/font2/index.html");

$mpdf = new mPDF('ja','A4');
$mpdf->WriteHTML($html);

$mpdf->Output();
?>



★結果的には、手順4の $unifonts = "ipagp.ttf,ipamp.ttf,sjis,sjisB,sjisI,sjisBI";の部分の先頭に置いたフォントのみが使用されます。
上記の場合はipagp.ttfを先頭においたので、ファイル全てがipagp.ttf(ゴシック)で表示されます。

http://pips.chu.jp/pdf/font2/mpdf/index.php

※ちなみにipamp.ttfを先頭に置いてみると、ipamp.ttf(明朝)で表示されました。



★最終的に、ひとつのhtmlの中に明朝系とゴシック系を混在させてデザインしたいと思っております。
htmlまたはmpdfの設定で間違っているところがありましたらご指摘頂きたいです。
何卒よろしくお願いします。

投稿日時 - 2014-07-04 10:01:59

QNo.8664315

困ってます

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

使用するフォントのパラメーラを省略しているので、登録したフォントの1番目が使われます。
mpdfのドキュメントをよく見ましょう。

投稿日時 - 2014-07-04 11:50:34

お礼

memphis 様
ご回答ありがとうございました。

プログラミングに関して勉強を始めたばかりで、どの部分のパラメータが省略されているのかがわかりません。
いろいろ試してみました。例えば

★mpdf/index.php
<?php
require_once('mpdf.php');

$html = file_get_contents("http://pips.chu.jp/pdf/font3/index.html");

$mpdf = new mPDF('ja','A4');

$mpdf->SetFont('ipamp.ttf')
$mpdf->SetFont('ipagp.ttf')

$mpdf->WriteHTML($html);

$mpdf->Output();
?>

が、効果はありませんでした。

せっかくのアドバイスを生かしきれず申し訳ありません。
もし、他にヒントになることがありましたら何卒ご教授ください。

投稿日時 - 2014-07-05 08:49:51

あなたにオススメの質問