TCPDF – SetFont メソッドで “B”(太字)を指定しても太字にならない場合、独自にメソッドを追加することで解決できます。その方法をご紹介いたします。
※参考サイトは最下部に記載しております。
目次
TCPDF ライブラリ
TCPDF ライブラリは PHP で PDF ファイルを簡単に作成するためのライブラリです。
SetFont メソッド
TCPDF ライブラリの SetFont() メソッドは、使用するフォントを変更するためのメソッドですが、この第2引数に “B”(ボールド)を指定すると太字になるのですが… “ipag.ttf” や “ipam.ttf” などの日本語フォントを使っている場合には、太字に対応していないため “B”(ボールド)を指定しても 太字になりません、、
TCPDF で使えるフォントの例.
TCPDF 用のフォントとして(実際に使用できるもの)は、以下のようなものがあります。
- ipag.ttf … ゴシック体
- ipam.ttf … 明朝体
- aoyagi_reisho.ttf … 隷書フォント
- rounded-mplus-2m-regular.ttf … 丸ゴシック体
拡張子 “ttf” とは?
拡張子 “ttf” は「True Type Font」の略です。True Type フォントは、Apple Computer が開発したデジタルフォントの規格で 2次ベジェ曲線を接続したもので曲線を表現しています(ビットマップを定義している訳ではないため、フォントサイズを拡大しても美しく表示することが可能です)。
太字メソッドを独自に追加する
例えば Write() メソッドを使う際に(少し手間ですが)X / Y 座標をぐるっと一周 上に少しずらして印字し、右に少しずらして印字し 下に少しずらして印字し 左に少しずらして印字する…と、太字で書いたように見せることができます。ただ、毎回それを書くとやっかいなので、クラスを拡張して新しいメソッドを作っておきます。
TCPDF ライブラリ は TCPDF クラス が定義されてますので、この TCPDF クラスを拡張することで オリジナルメソッドの作成が可能です!
サンプルプログラム
別記事「PHP4行で PDF作成できる ~ TCPDF サンプルプログラム」で紹介したように 最もシンプルな TCPDF サンプルプログラムは以下の通りです…
<?php
//TCPDF ライブラリを読む込む
require_once('lib/tcpdf/tcpdf.php');
//TCPDF オブジェクト初期化
$pdf = new TCPDF("L", "mm", "A4", true, "UTF-8");
$pdf->setPrintHeader(FALSE);
$pdf->setPrintFooter(FALSE);
//フォント定義
$GOTHIC = $pdf->addTTFfont('lib/tcpdf/fonts/ipag.ttf');
$MARUGOTHIC = $pdf->addTTFfont('lib/tcpdf/fonts/rounded-mplus-2m-regular.ttf');
$MINCHO = $pdf->addTTFfont('lib/tcpdf/fonts/ipam.ttf');
//ページ追加
$pdf->AddPage("P");//P:Portrait(縦長) L:Landscape(横長)
//フォント設定
$pdf->SetFont($GOTHIC, "", 9);
//現在時刻の出力
$pdf->Write(4, date("Y年n月j日 H:i"));
//ブラウザ出力
$pdf->Output("sample-tcpdf-3.pdf", "I");
?>
この22行目 Write() メソッドで現在時刻を出力する箇所を、新しく WriteBold() メソッドを作って 太字で書き出してみましょう!
TCPDF クラスを継承する
TCPDF クラスを継承して、新しいクラス “MyTCPDF” を作り WriteBold() メソッドを定義するには以下のようなコードを 上記の5行目「TCPDF クラス初期化」の前に書いてやります…
※WriteBold() メソッドには Write() メソッドと同じように「行の高さ」と「テキスト」の2つの引数を用意します。
class MyTCPDF extends TCPDF {
public function WriteBold($sngLineHeight, $strText){
}
}
WriteBold メソッドを追加する
WriteBold() メソッドの中には、以下の内容のコードを書き足します…
- 現在の X 座標、Y 座標を取得しておきます。
- 上に 0.01mm ずらした位置に印字出力します。
- 右に 0.01mm ずらした位置に印字出力します。
- 下に 0.01mm ずらした位置に印字出力します。
- 左に 0.01mm ずらした位置に印字出力します。
- 本来の位置に印字出力します。
これを PHP で書くと、こうなります…
※なぜ「0.01mmか?」というと、実際にやってみた感じ ちょうど良かったからです。
class MyTCPDF extends TCPDF {
public function WriteBold($sngLineHeight, $strText){
//現在の座標を取得しておきます
$sngCurrentX = $this->GetX();
$sngCurrentY = $this->GetY();
//上に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY - 0.01);
$this->Write($sngLineHeight, $strText);
//右に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX + 0.01, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
//下に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY + 0.01);
$this->Write($sngLineHeight, $strText);
//左に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX - 0.01, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
//本来の位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
}
}
完成
上記のサンプルの6行目 new TCPDF を new MyTCPDF に、22行目 Write() メソッドを WriteBold() メソッドに置き換えると完成です…
<?php
//TCPDF ライブラリを読む込む
require_once('lib/tcpdf/tcpdf.php');
class MyTCPDF extends TCPDF {
public function WriteBold($sngLineHeight, $strText){
//現在の座標を取得しておきます
$sngCurrentX = $this->GetX();
$sngCurrentY = $this->GetY();
//上に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY - 0.01);
$this->Write($sngLineHeight, $strText);
//右に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX + 0.01, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
//下に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY + 0.01);
$this->Write($sngLineHeight, $strText);
//左に 0.01mm ずらした位置に印字出力します
$this->SetXY($sngCurrentX - 0.01, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
//本来の位置に印字出力します
$this->SetXY($sngCurrentX, $sngCurrentY);
$this->Write($sngLineHeight, $strText);
}
}
//TCPDF オブジェクト初期化
$pdf = new MyTCPDF("L", "mm", "A4", true, "UTF-8");
$pdf->setPrintHeader(FALSE);
$pdf->setPrintFooter(FALSE);
//フォント定義
$GOTHIC = $pdf->addTTFfont('lib/tcpdf/fonts/ipag.ttf');
$MARUGOTHIC = $pdf->addTTFfont('lib/tcpdf/fonts/rounded-mplus-2m-regular.ttf');
$MINCHO = $pdf->addTTFfont('lib/tcpdf/fonts/ipam.ttf');
//ページ追加
$pdf->AddPage("P");//P:Portrait(縦長) L:Landscape(横長)
//フォント設定
$pdf->SetFont($GOTHIC, "", 9);
//現在時刻の出力
$pdf->WriteBold(4, date("Y年n月j日 H:i"));
//ブラウザ出力
$pdf->Output("sample.pdf", "I");
?>
動作確認
実際に表示させてみると こんな 感じになります!
参考サイト
別記事「PHP4行で PDF作成できる ~ TCPDF サンプルプログラム」
https://blog.soln-sns.net/4-lines-php-sample-how-to-generate-pdf-using-tcpdf/
Write : TCPDFマニュアル(勝手訳)
http://tcpdf.penlabo.net/method/w/Write.html