PHPプログラミング

最終更新日:
公開日:

レシピ

mPDFライブラリ

mPDFの出力方法を指定する

mPDFライブラリで作成したPDFファイルの出力形式を指定する方法を解説します。

この記事のポイント

  • PDFファイルの出力形式を必要に応じて使い分ける
  • PDFファイルを直接サーバーに保存する
  • PDFファイルをメールの添付して送信する

目次

PDFの出力方法は4種類

mPDFライブラリで作成するPDFファイルは、用途に応じて次の4種類から出力方法を指定することができます。

  • I (\Mpdf\Output\Destination::INLINE) – ブラウザにプレビュー表示。初期値。
  • D (\Mpdf\Output\Destination::DOWNLOAD) – ブラウザでプレビューをしないで保存(ダウンロード)。
  • F (\Mpdf\Output\Destination::FILE) – サーバーの指定したフォルダへ保存。
  • S (\Mpdf\Output\Destination::STRING_RETURN) – 文字列として出力。メールの添付などに利用。

出力形式はPDFを出力するOutputメソッドで指定します。
それぞれの出力パターンを解説していきます。

なお、mPDFライブラリはすでにインストールされていることを前提とします。
インストールから基本的な使い方については「mPDFライブラリでPDFファイルを作成する」をご覧ください。

ブラウザにプレビュー表示

出力形式はOutputメソッドの第2パラメータに指定します。
指定しなかった場合は初期値である「I」になります。

mpdf.php

$mpdf->Output( "MyPDF.pdf", "I");

作成されたPDFファイルがブラウザでプレビュー表示されます。
ここで表示したPDFを保存(ダウンロード)する時はOutputメソッドの第1パラメータで指定したファイル名が適用されます。

I」を「\Mpdf\Output\Destination::INLINE」と書くこともできます。

$mpdf->Output( "MyPDF.pdf", \Mpdf\Output\Destination::INLINE);

こちらの場合は「 (ダブルクォーテーション)」で囲まずに記述します。

サーバーの指定したフォルダへ保存

作成したPDFをサーバーの指定したディレクトリに保存します。
プレビュー表示をしつつ、作成されたPDFをサーバーに保存しておきたい場合に使用します。

mpdf.php

// プレビュー表示
$mpdf->Output("MyPDF.pdf","I");

// サーバーに保存(tempディレクトリに保存)
$mpdf->Output("/temp/MyPDF_2219955828.pdf", "F");

1回目のOutputメソッドは通常のプレビュー表示、2回目のOutputメソッドはサーバーの「temp」フォルダへ保存を行います。
ファイル名もそれぞれ異なるものを指定することが可能です。

上記コードの「F」は次のように指定することもできます。

$mpdf->Output("/temp/MyPDF_2219955828.pdf", \Mpdf\Output\Destination::FILE);

プレビュー表示せずに保存(ダウンロード)のみ実行する

作成したPDFファイルをプレビュー表示せず、直接保存(ダウンロード)する場合は「D」パラメータを指定します。

mpdf.php

$mpdf->Output("MyPDF.pdf", "D");

次のように書くこともできます。

$mpdf->Output("MyPDF.pdf", \Mpdf\Output\Destination::DOWNLOAD);

PDFを文字列で取得する

作成したPDFをそのままメールに添付して送信したり、データベースへ保存するなど後の処理のために文字列の形式で取得することもできます。
その時はパラメータに「S」を指定します。

次のコードはmb_send_mail関数と組み合わせて、作成したPDFをメールに添付して送信する例です。
コードがやや長いため、「PDF作成」と「メール作成」の2パートに区分しました。

mpdf.php

<?php
require_once __DIR__.'/vendor/autoload.php';

//-------------------------------------------------------
// PDF作成
//-------------------------------------------------------

$mpdf = new \Mpdf\Mpdf([
	'fontdata' => [
	    'ipa' => [
		    'R' => 'ipag.ttf'
		]
	],
	'format' => 'B5-P'
]);

// HTML&CSSファイルの読み込み
$html_doc = new DOMDocument();
$html_doc->loadHTMLFile('test.html');

// PDFのタイトルを設定
$pdf_title = 'PDFファイルの添付テスト';

// PDFを文字列で取得
$pdf_file = $mpdf->Output( "MyPDF.pdf", "S");

//-------------------------------------------------------
// メール作成
//-------------------------------------------------------

//日本語の使用宣言
mb_language("ja");
mb_internal_encoding("UTF-8");

// 宛先、件名、本文の設定
$to = 'test@sample.com';
$subject = 'mPDFライブラリの出力テスト';
$text = 'テストメールです。';

// 送信元の設定
$sender_email = 'noreply@gray-code.com';
$from = 'GRAYCODE';

// ヘッダー設定
$header = '';
$header .= "Content-Type: multipart/mixed;boundary=\"__BOUNDARY__\"\n";
$header .= "Return-Path: " . $sender_email . " \n";
$header .= "From: " . $from ." \n";
$header .= "Sender: " . $from ." \n";
$header .= "Reply-To: " . $sender_email . " \n";
$header .= "X-Sender: " . $from . " \n";
$header .= "X-Priority: 3 \n";

// テキストメッセージを記述
$body = "--__BOUNDARY__\n";
$body .= "Content-Type: text/plain; charset=\"ISO-2022-JP\"\n\n";
$body .= $text . "\n";
$body .= "--__BOUNDARY__\n";

// ファイルを添付
$body .= "Content-Type: application/octet-stream; name=\"{$pdf_title}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$pdf_title}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode($pdf_file)) . "\n";
$body .= "--__BOUNDARY__--";

//メール送信
$res = mb_send_mail( $to, $subject, $body, $header);

「PDF作成」パートの肝は、最後の1行です。

$pdf_file = $mpdf->Output( "MyPDF.pdf", "S");

変数$pdf_fileに作成したPDFの内容が入ります。
この変数の値を、「メール作成」パートの「// ファイルを添付」部分で本文に添付します。

// ファイルを添付
$body .= "Content-Type: application/octet-stream; name=\"{$pdf_title}\"\n";
$body .= "Content-Disposition: attachment; filename=\"{$pdf_title}\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "\n";
$body .= chunk_split(base64_encode($pdf_file)) . "\n";
$body .= "--__BOUNDARY__--";

以上の内容で実行すると、PDFファイルを添付したメールが$toに指定した宛先へ送信されます。

メールにファイルを添付する方法について詳しくは、別記事「メールにファイルを添付して送信する」をご覧ください。

なお、Outputメソッドの第2パラメータに指定した「”S”」は、次のように指定することもできます。

$pdf_file = $mpdf->Output( "MyPDF.pdf", \Mpdf\Output\Destination::STRING_RETURN);

以上、mPDFライブラリで指定可能な出力方法についてでした。
実装する用途に応じて出力形式を選択してください。