PHPプログラミング

ベストプラクティス

出力

mPDFライブラリでPDFファイルを作成する

  • このエントリーをはてなブックマークに追加

mPDFライブラリを使ったPDFファイルの出力方法を解説。mPDFのインストールから、日本語でPDFファイルを出力するところまで、基本的な使い方を紹介します。

目次

  1. #  PHPからPDFファイルを出力するのに便利なmPDF
  2. #  mPDFライブラリをインストールする
  3. #  とりあえずPDFファイルを出力してみる
  4. #  日本語が扱えるように設定する

PHPからPDFファイルを出力するのに便利なmPDF

今回はPHPからPDFファイルを作成する基本的な方法を解説していきます。次のような方が対象です。

  • PHPで手軽にPDFファイルを出力したい
  • 日本語を正確に出力したい

今回はmPDFライブラリをインストールするところから、簡単なテキストをPDFファイルとして出力する基本的な部分を解説していきます。

mPDFライブラリをインストールする

mPDFライブラリは下記のページよりダウンロードします。
mPDF(英語)

ライブラリの使い方はこちら。
mPDF Manual(英語)

今回は現時点の最新版であるVersion6.0を使用します。
ダウンロードしたzipファイルを解凍し、「mpdf60」フォルダを任意の場所に設置します。

PDFファイルを作成するPHPを「mpdf.php」とし、mPDFライブラリを読み込んで実行していきます。
今回はシンプルに、同じ階層へ設置します。

ライブラリを設置したディレクトリ構造

以上でインストール完了です。
使用準備が整いました。

とりあえずPDFファイルを出力してみる

使用準備が整ったところで、とりあえず簡単なファイルを出力してみます。
mpdf.phpに次のコードを書き、実行してください。

mpdf.php

<?php

// ライブラリの読み込み
require_once 'mpdf60/mpdf.php';

// mPDFクラス作成
$mpdf = new mPDF();

// タイトルを指定
$mpdf->setTitle("MyPDF.pdf");

// テキストを設定
$mpdf->WriteHTML("Test");

// 出力
$mpdf->Output();

return;

実行結果

PDFの出力結果

このような「MyPDF.php」というファイルが出力されます。

解説

上から順に、コードを解説します。

まずはライブラリの読み込みから。
require_once関数を使って、「mpdf60」直下にある「mpdf.php」を読み込みます。

$mpdf = new mPDF();」の箇所でmPDFライブラリのクラスからインスタンスを作成し、タイトル(setTitleメソッド)、PDF内のテキスト(WriteHTMLメソッド)、ファイルの出力(Outputメソッド)をそれぞれメソッドを使って設定しています。
※タイトルと保存時(ダウンロード時)のファイル名の指定は別に行う必要があります。

短いコードで最低限ではありますが、しっかりとPDFファイルが出力されます。

しかし、このままだと日本語を出力することができず、あまり実用的ではありません。
次に、日本語も扱えるように設定を行なっていきましょう。

日本語が扱えるように設定する

標準のまま日本語を出力すると文字化けしてしまいます。
試しに、先ほどのコードのWriteHTMLメソッドを次のように変更して実行してみましょう。

mpdf.php

// テキストを日本語に変更
$mpdf->WriteHTML("テスト");

実行結果

日本語が文字化けしてしまう出力例

そこで、日本語が正しく表示されるように設定を行います。
まずは、mPDFクラスのインスタンスを生成する箇所で、次のようにパラメータを指定します。

mpdf.php

// mPDFクラス作成
$mpdf = new mPDF("ja");

日本語を扱いたいので「ja」を指定。
これだけで、「ひらがな」と「カタカナ」は問題なく表示できるようになります。

mpdf.php

// テキストを設定
$mpdf->WriteHTML("あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも やゆよ らりるれろ わをん");
$mpdf->WriteHTML("アイウエオ カキクケコ サシスセソ タチツテト ナニヌネノ ハヒフヘホ マミムメモ ヤユヨ ラリルレロ ワヲン");

実行結果

ひらがなとカタカナの表示例

しかし、漢字だけおかしい
例えば、「残り」「坂本」「変更」などを出力すると次のような表示に。

漢字を出力した例

「残」の傍線が1本足りなかったり、「坂」の上の棒が斜めだったり、「変」の跳ねるところが跳ねてなかったり。
文字化けってほどではないけど、やっぱりおかしいです。
これは、「統合漢字」という中国の簡体字や日本語の新字体が同じ文字コードとして扱われていることが原因です。

そこで、漢字も含めてしっかりと表示できるように設定を行います。

日本語フォントをダウンロードする

まずは、日本語のフォントを用意するところから。
IPA(情報処理推進機構)が用意している、IPAフォントを下記のページからダウンロードします。

IPAフォントのダウンロードページ
※IPAフォントライセンスを必ず確認してください。

こちらのページの「IPAサイトからダウンロード」にある「TTFファイル」から、「4書体パック(Ver.003.03)」をダウンロードします。

ダウンロードしたzipファイルを解凍し、中に入っている「ttf」の拡張子がついたファイルを、mPDFのフォルダ「mpdf60/ttfonts」へ移動してください。

mPDFライブラリの設定を行う

続いて、先ほどダウンロードしたIPAフォントをmPDFで読み込むように設定します。
設定するファイルは2つ。
まずは「config_fonts.php」を開いて、下記の赤いコードを追記してください。

config_fonts.php

// 85行目あたり
$this->fontdata = array(

...
/* CJK fonts */
	"sun-exta" => array(
		'R' => "Sun-ExtA.ttf",
		'sip-ext' => 'sun-extb',		/* SIP=Plane2 Unicode (extension B) */
		),
	"sun-extb" => array(
		'R' => "Sun-ExtB.ttf",
		),
	"unbatang" => array(	/* Korean */
		'R' => "UnBatang_0613.ttf",
		),

	"ipa" => array(
		'R' => "ipagp.ttf"
	),
);

「IPAゴシック」を読み込むように「ipagp.ttf」を指定しました。
もし、「IPA明朝」など他のフォントを使いたい場合はファイル名を置き換えてください。

続いて、「config_lang2fonts.php」を変更します。
356行目あたりにある、次の「ja」がある箇所を変更します。

config_lang2fonts.php (変更前)

	CASE "ja":  CASE "jpn":	// Japanese HIRAGANA KATAKANA
		if ($adobeCJK) { $unifont = "sjis"; }
		else { $unifont = "sun-exta"; }
		break;

config_lang2fonts.php (変更後)

	CASE "ja":  CASE "jpn":	// Japanese HIRAGANA KATAKANA
		if ($adobeCJK) { $unifont = "ipa,sjis"; }
		else { $unifont = "ipa"; }
		break;

以上で設定は完了です。
もう一度、表示のおかしかった「残り」「坂本」「変更」を出力してみましょう。

漢字を再出力

正確に出力されるようになりました。

以上、mPDFを使った基本的なPDF出力についてでした。

  • このエントリーをはてなブックマークに追加