LoginSignup
20
27

More than 5 years have passed since last update.

【tFPDF】FPDFで日本語(UTF-8)を使う

Last updated at Posted at 2015-05-01

FPDFで日本語(UTF-8)を使う方法

tFPDFとは

前回、FPDF 1.7 リファレンスマニュアル(非公式)を投稿しました。
しかし、FPDFは本来マルチバイト文字に対応していません。
FPDFで日本語を使うには古くからの方法だと「japanese.php」を使う方法が知られていますが、文字コードがSJISらしく私は使ったことがありません。
というか実は本来のFPDFも使ったことがなく、もっぱら今回ご紹介する「tFPDF」を使っています。
tFDPF」はwww.fpdf.org本家で開発されているFDPFのUTF-8対応版で、Unicodeフォントが使うことができます。
これらの技術は「mPDF」の開発からバックポートされたものです。

tFPDFのダウンロード

そもそも、「FPDF」は必要ありません。
かわりに「tFPDF」があるので、www.fpdf.orgのtFPDFのページの下の方にダウンロードのリンクがあるのでそこからダウンロードして展開して配置するだけです。

tFPDFの使い方

Unicodeフォントを使うためには、AddFont() メソッドの第4引数に「true」を設定します。
そしてフォントファイルの位置はtfpdf.phpと同じ階層下の/font/unifont かシステムで指定されたフォルダ(例えば_SYSTEM_TTFONTS 定数で定義された場所)に配置します。
パッケージには DejaVu フォントが同梱されています。

また、PHPではmbstring拡張が有効になっている必要があります。

サンプル

<?php

// オプションでシステムフォントのパスを定義することが出来ます。
// 他の方法として tFPDF は [path to tFPDF]/font/unifont/ ディレクトリを使用します。
// define("_SYSTEM_TTFONTS", "C:/Windows/Fonts/");

require('tfpdf.php');

$pdf = new tFPDF();
$pdf->AddPage();

// フォントの追加(第4引数をtrueにしてUTF-8を有効にする)
$pdf->AddFont('DejaVu','','DejaVuSansCondensed.ttf',true);
$pdf->SetFont('DejaVu','',14);

// 例としてUTF-8で作成されたファイルをロードして表示
$txt = file_get_contents('HelloWorld.txt'); /** UTF-8で作成されたファイル
$pdf->Write(8,$txt);

// Select a standard font (uses windows-1252)
$pdf->SetFont('Arial','',14);
$pdf->Ln(10);
$pdf->Write(5,'The file size of this PDF is only 12 KB.');

$pdf->Output();
?>

tFPDFをもっと有効に使う

tFPDF を使用するだけならばFPDFの置き換えだけで簡単に出来ます。
ところがFPDIを併用してPDFのテンプレート取り込めるようにしようなどとすると、
FPDIがFPDFクラスを継承していたりで、ちと面倒です。
FDPI のクラス定義でtPDFを継承するように書き換えても良いのですが、FPDIをバージョンアップしたりするとかなりの確率で修正を忘れると思います。
そこでプログラム側でしれっとFPDFクラスを作っちゃいます。

fpdf.php
<?php
include_once("tfpdf.php");
class FPDF extends tDPDF
{
    public function __construct()
    {
        parent::__construct();
    }
}
?>

こんな感じでFPDFクラスを作っておけばFPDFの拡張をあとで付け足す時も悩まなくて幸せなんじゃないかと思います。

FPDIに関してはまたの機会に。

20
27
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
20
27