PHPからPDFを生成する方法として、wkhtmltopdfというツールを使う方法があります。
CSSも外部ファイル以外の方式なら解析してくれます。
かなり便利なので、ご紹介したいと思います。
インストール
まず本家サイトより、安定版をDLしてサーバー内で解凍します。自分はCentOSを使っているので、Linuxを選択です。
自分の場合はこんな感じでやりました。しかし、こんな拡張子の圧縮ファイルもあるんですね。
cd /usr/local/src/ mkdir wkhtmltopdf cd wkhtmltopdf wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz tar Jxfv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
wkhtmltoxというディレクトリが生成されていますので、中に移動すると次のようなディレクトリが存在します。
bin include lib share
binに移動すると次のような実行ファイルがあります。
wkhtmltoimage wkhtmltopdf
これらの実行ファイルを/usr/local/bin/にコピーします。
cp -p * /usr/local/bin/
以上で、wkhtmltopdfのインストールは完了です。
次にwkhtmltopdfをphpから簡単に利用できるようにしてくれるsnappyをインストールします。
snappyはcomposerで一発です。
composer require knplabs/knp-snappy
使い方
プログラム内でhtmlを作成して、pdfに変換して出力するサンプルを作成しました。
<?php
// snappyの使えるように読み込む
include 'vendor/autoload.php';
use Knp\Snappy\Pdf;
// 出力したいHTMLを作成
$message = "HTMLからPDF作成";
ob_start();
include_once 'pdf.html';
$html = ob_get_contents();
ob_end_clean();
// snappyのPDFオブジェクトを生成。引数にはwkhtmltopdfのパス
$pdf = new Pdf('/usr/local/bin/wkhtmltopdf');
// これからPDFを送りますよ宣言
header("Content-Type: application/pdf");
// HTMLをPDFに変換して出力
echo $pdf->getOutputFromHtml($html);
読み込んでいるpdf.htmlは次のようになります。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PDFサンプル</title>
<style>
.page{
padding:2em;
border:2em solid black;
text-align:center;
height:100%;
page-break-after: always;
page-break-inside: avoid;
}
.page:last-child{
page-break-after: auto;
}
p.red{
color:red;
}
</style>
</head>
<body>
<div class="page">
<?php echo $message ?>
</div>
<div class="page">
<p class="red"><?php echo $message ?></p>
</div>
</body>
</html>
出力結果はこんな感じです。
といった具合にすごく簡単にpdfが作成できてしまいます。
PD〇libとか有料で使ってた頃とは隔世の感がありますね。
