HTMLをそのままPDFにできるPHPライブラリ TCPDF
こんにちは。sagaraです。現在携わっているPHPのプロジェクトで、領収書をPDF出力する処理があって、 どういうプロセスで生成しているのか見てみたところ、 PDF作成ライブラリ TCPDFを使用していました。
というわけで、今回はPDFを作成するライブラリについてのお話です。
PDFを作成するライブラリ
といったものがあります。上記のうち、HaruPDFとPDFlibは拡張モジュールでインストールが必要ですが、
FPDFとTCPDFはクラスライブラリなのでサーバーの適当な場所に配置すればいいです。
後者の方が手軽に始められますね。
TCPDFでPDF作成!
GitHubからダウンロードできます。
https://github.com/tecnickcom/tcpdf
HTML(XHTML+CSS)そのままPDFに
<?php
include "./TCPDF/tcpdf.php"; //ライブラリの読み込み
$tcpdf = new TCPDF("Portrait");
$tcpdf->AddPage();
$tcpdf->SetFont("kozminproregular", "", 10);
$html = <<< EOF
<style>
h1 {
font-size: 16px;
color: #333;
}
ul {
list-style-type: none;
}
ul li {
text-decoration: underline;
}
</style>
<h1>バシャログ。</h1>
<ul>
<li>スマホサイト制作</li>
<li>HTML/CSS</li>
<li>JavaScript</li>
<li>WordPress</li>
<li>PHP</li>
<li>gulp</li>
</ul>
EOF;
$tcpdf->writeHTML($html);
$tcpdf->Output("test.pdf");
ライブラリを読み込んでTCPDFクラスをnewしたら、
AddPage()でページ追加、SetFont()でフォントを設定。
セルや罫線を引くメソッドなどで作成していけますが、
TCPDFの場合はHTML(XHTML/CSS)をそのまま放り込んで出力できます。
すべてのタグやスタイルに対応しているわけではなく、
例えばCSSの:nth-childや:afterなどの擬似クラスは使えなかったです。
TCPDF(最新の更新日は2017年4月)には最初から日本語フォントが入っていて、
小塚ゴシック(kozgopromedium)と小塚明朝(kozminproregular)が使えます。
公式にはサンプルが豊富に載っているので、参考になるかと思います。
https://tcpdf.org/examples/
すでにある領収書のテンプレートに数値をのせて出力
既存のPDF文書の上に文字を載せるためには、FPDIを追加で読み込ませる必要があるようです。
$tcpdf = new FPDI();
$tcpdf->AddPage();
$tcpdf->setSourceFile('./templates/receipt.pdf'); //テンプレート読み込み
$index = $tcpdf->importPage(1);
$tcpdf->useTemplate($index); //テンプレートをページに適用
$tcpdf->SetFont("kozgopromedium", "", 12);
$tcpdf->MultiCell(35, 5, $total, 0, 'R', 0, 1, 150, 100);
// ...
$tcpdf->Output("receipt.pdf", "D");