帳票などを HTML を表示し、それを PDF にしたいことはよくあります。FPDF などを使えば PHP で PDF を生成することもできますが、結構面倒です。しかし mPDF を使うことにより PHP で簡単に HTML から PDF を生成することが可能です。

インストール

mPDF をインストールします。mPDF のサイトより zip ファイルをダウンロードし、解凍します。それを PHP からインクルードできるディレクトリへアップロードします。今回は mpdf というディレクトリを作りその中にアップロードしました。
アップロード後、tmp ディレクトリと graph_cache ディレクトリに書き込み権限を与えておきます。

mPDF で PDF を生成する

使い方は簡単です。HTML を与えて、出力するだけです。使い方の例は以下のようになります。例として Yahoo!ジャパンのトップページを PDF にしてみました。

include("./mpdf/mpdf.php");
$html = file_get_contents("http://www.yahoo.co.jp");
$mpdf=new mPDF('sjis', 'A4');
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;

変換した PDF はこちらで確認できます。Yahoo! Japanのトップページを PDF 化

例では外部から HTML を読み込んでいますが、要は HTML 文字列を与えればいいので、サーバ内の HTML でも直接 HTML を書いて与えても OK です。外部から HTML を読み込んだ場合は画像は URL で指定されていれば表示されますが、相対パスで指定されている場合は表示されません。予め HTML を加工しておく必要があるでしょう。サーバ内の HTML の場合は mPDF を実行しているパスから相対パスで読み込めます。

外部 CSS を読み込んでいる場合は次に説明する外部 CSS の適用をする必要があります。

外部 CSS を読み込み適用する

内部 CSS はそのまま適用されますが、外部 CSS は読み込んで適用する必要があります。mPDF は HTML も CSS も UTF-8 しか処理できないので、CSS が UTF-8 でない場合は変換しておきます。

$stylesheet = file_get_contents("http://example.com/stylesheet.css" );
// CSS が UTF-8 でない場合は変換しておく
$stylesheet = mb_convert_encoding($stylesheet, "UTF-8");
$mpdf->WriteHTML($stylesheet,1);

ウォーターマークを入れる

ウォーターマークも簡単に入れられます。結果はこちら ウォーターマークが入った PDF

include("./mpdf/mpdf.php");
$html = file_get_contents("http://www.yahoo.co.jp");
$mpdf=new mPDF('sjis', 'A4'); 

// ウォーターマークを入れる
$mpdf->SetWatermarkText('DRAFT');
$mpdf->watermark_font = 'DejaVuSansCondensed';
$mpdf->showWatermarkText = true;

$mpdf->WriteHTML($html);

$mpdf->Output();
exit;

サーバに PDF を保存する

サーバに保存する場合は最後の Output メソッドを以下のようにします。

$mpdf->Output("hoge.pdf", 'F');

その他

Yahoo! のトップページの変換結果をどうみるかはそれぞれでしょう。しかし、PDF 変換が求められるのは帳票などが多くその程度の HTML から PDF への変換であれば十分実用に耐えうると思います。FPDF で PDF 生成処理を書くことを考えれば、オススメです。

ダウンロードした中にある examples というディレクトリに多くのサンプルコードがあります。また、オンラインドキュメントもあります。
mPDF Manual

これらは見ることによりやりたいことはだいたいできるかと思います。

関連する投稿