最終更新日:
公開日:
レシピ
mPDFライブラリ
mPDFでHTMLからPDFを作成する
mPDFライブラリでHTML&CSSの内容をそのままPDF出力する方法について解説します。
この記事のポイント
- HTMLファイルからPDFファイルを作成する
- メディアクエリでPDF出力用のCSSを読み込む
目次
HTMLをそのままPDFファイルとして出力する
今回は、mPDFライブラリを使ってHTML&CSSからPDFファイルを作成します。
次のような流れで解説を進めていきます。
- 出力するHTMLの確認
- PDFファイルを作成
- 不要なタグを取り除いてPDFファイルを最適化
mPDFライブラリはすでにインストールされていることを前提に進めます。
インストールや基本的な使い方については、「mPDFライブラリでPDFファイルを作成する」を参照ください。
こちらで解説している内容は公式リファレンスを元にしています。
リファレンスを参照したい方はこちらをご覧ください。
mPDF Manual (英語)
PDFファイルに出力するHTMLとCSSを確認
PDFを作成する前に、まずはPDFに出力したいHTMLとCSSの内容を確認します。
HTMLは「test.html」、CSSは「style.css」です。
test.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="description" content="テストページです。">
<title>HTMLからPDFを作成する</title>
<link type="text/css" rel="stylesheet" href="style.css">
</head>
<body>
<h1><span>PDF出力のテスト</span></h1>
<p>こちらはテスト用のHTMLページです。特に意味はありません。</p>
<figure><img src="pic.jpg"></figure>
</body>
</html>
このHTMLでは次の「style.css」を読み込みます。
style.css
/* Reset CSS
------------------------- */
html, body, div, span, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
abbr, address, cite, code,
del, dfn, em, img, ins, kbd, q, samp,
small, strong, sub, sup, var,
b, i,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, figcaption, figure,
footer, header, hgroup, menu, nav, section, summary,
time, mark, audio, video {
margin:0;
padding:0;
border:0;
outline:0;
font-size:100%;
vertical-align:baseline;
background:transparent;
}
body {
line-height:1;
}
article,aside,details,figcaption,figure,
footer,header,hgroup,menu,nav,section {
display:block;
}
nav ul {
list-style:none;
}
blockquote, q {
quotes:none;
}
blockquote:before, blockquote:after,
q:before, q:after {
content:'';
content:none;
}
a {
margin:0;
padding:0;
font-size:100%;
vertical-align:baseline;
background:transparent;
}
/* change colours to suit your needs */
ins {
background-color:#ff9;
color:#000;
text-decoration:none;
}
/* change colours to suit your needs */
mark {
background-color:#ff9;
color:#000;
font-style:italic;
font-weight:bold;
}
del {
text-decoration: line-through;
}
abbr[title], dfn[title] {
border-bottom:1px dotted;
cursor:help;
}
table {
border-collapse:collapse;
border-spacing:0;
}
hr {
display:block;
height:1px;
border:0;
border-top:1px solid #cccccc;
margin:1em 0;
padding:0;
}
input, select {
vertical-align:middle;
}
/* CSS
------------------------- */
body {
padding: 20px;
color: #333;
background-color: #f7f7f7;
}
h1 {
margin-bottom: 40px;
padding: 10px 0;
font-size: 129%;
color: #fff;
text-align: center;
background: #0088cf;
}
p {
margin-bottom: 20px;
}
figure {
margin-bottom: 40px;
width: 100%;
}
figure img {
max-width: 100%;
height: auto;
line-height: 1.0em;
vertical-align: top;
}
このHTMLをブラウザで表示すると次のようになります。
この表示をそのままPDFファイルとして出力していきます。
PDFファイルを作成する
PDFを作成する以下のコードを「mpdf.php」に書きます。
mpdf.php
<?php
require_once __DIR__.'/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf([
'fontdata' => [
'ipa' => [
'R' => 'ipag.ttf'
]
],
'format' => 'B5-P'
]);
// HTMLファイルの読み込み
$html_doc = new DOMDocument();
$html_doc->loadHTMLFile('test.html');
// PDFファイルにHTMLをセット
$mpdf->WriteHTML( $html_doc->saveHTML());
// PDFファイルとして出力
$mpdf->Output();
return;
このコードを実行すると、読み込んだHTMLをそのままPDFファイルとして出力します。
コードを上から順に解説していきます。
2〜11行目まではmPDFライブラリの読み込み、mPDFクラスのインスタンス作成という基本設定を行っています。
require_once __DIR__.'/vendor/autoload.php';
$mpdf = new \Mpdf\Mpdf([
'fontdata' => [
'ipa' => [
'R' => 'ipag.ttf'
]
],
'format' => 'B5-P'
]);
続く13〜15行目では、先述のHTMLファイルをそれぞれ読み込む指定です。
// HTMLファイルの読み込み
$html_doc = new DOMDocument();
$html_doc->loadHTMLFile('test.html');
HTMLファイルの読み込みには、まずDOMDocumentクラスのインスタンスを作成します。
その後に、loadHTMLFileメソッドで読み込みたいHTMLファイルを指定し、読み込みを行います。
// PDFファイルにHTMLをセット
$mpdf->WriteHTML( $html_doc->saveHTML());
最後に、OutputメソッドでPDFファイルを出力して終了です。
// PDFファイルとして出力
$mpdf->Output();
return;
PDFのタイトルは、HTMLのhead要素内にあるtitleタグから自動的に設定されます。
複数のCSSを読み込む
先ほどのHTMLでは1つのCSSを読み込んでいますが、通常のHTMLページ同様に複数のCSSを読み込むことも可能です。
次の例では「reset.css」「style.css」「test.css」の3つのCSSを読み込んでいます。
test.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="description" content="テストページです。">
<title>HTMLからPDFを作成する</title>
<link type="text/css" rel="stylesheet" href="reset.css">
<link type="text/css" rel="stylesheet" href="style.css">
<link type="text/css" rel="stylesheet" href="test.css">
</head>
<body>
<h1><span>PDF出力のテスト</span></h1>
<p>こちらはテスト用のHTMLページです。特に意味はありません。</p>
<figure><img src="pic.jpg"></figure>
</body>
</html>
HTML&CSSがPDF出力以外の場所でも使用している場合などに、もしPDF出力にのみ適用したいCSSがあるときはメディアクエリ「print」で印刷用CSSを用意するのも1つの方法です。
<link type="text/css" rel="stylesheet" href="style.css">
<link type="text/css" rel="stylesheet" media="print" href="pdf.css">