3.7K Views
October 14, 23
スライド概要
札幌のウェブエンジニア
PHPでPDFを作ってみる 第1回札幌PHP勉強会 10/14 Sapporo Engineer Base 西村航
自己紹介 西村航 ( @_n13u_) フロントエンドエンジニア 個人で会社の副代表やりながら、 Sapporo Engineer Base という札幌市の エンジニア支援・育成の取り組みを しています。 PHP歴、そんなにないです。 Laravelとかのフレームワークは触ったことがある 程度です。
今日の話 PHPでのPDF生成ライブラリについて 比較してみたという話です タイトルがシンプルすぎて逆にすごいものが 出てくるとかはないです…
動機 お仕事でhtml(ないしは事前に何らかの形式で定義された)のテ ンプレートに情報を埋め込んで出力するものをつくる ▶A4やらなんやら指定したいのはあるが、適切なライブラリがわか らん
みなさんPHPでPDF生成したことありますか? 皆さんの使ってるライブラリなんでしょう... mPDF?domPDF?snappy?wkhtmltopdf?
分類してみました HTML to PDF系 FPDF Webkit系 v1.0 2001/9/17 ~ 後継 MPDF v1.1 2008/5/1 ~ TCPDF DOMPDF v1.53.0.TC004 2005/01/04~ v0.6.0 β-3 2013/8/6 外部コマンド WKHTMLTOPDF v0.1.1 ? ラッパーライブラリ Snappy v0.1.2 2013/9/6~
mPDF / domPDF - 大きな違いはCSSの対応とフォント指定方法 - どちらもCSS2.1までの基本的なスタイル指定のみ - JavaScriptなどは使えたり使えなかったり←いる - domPDFはファイルをそのまま、Laravelなどで返すことができる - mPDFは一度ファイル形式として出力する必要あり
wkhtmltopdf / snappy - 中身はどちらもWebkit(レンダリングエンジン) + QT(PDF生成) - wkhtmltopdfは外部のコマンド実行をする形で生成する - snappyはそのまま実行できる
$html = '<html> <head> <title>Sample Page</title> </head> <body> <h1>Hello,
World!</h1> </body> </html>'; // 一時的なHTMLファイルを作成します
$tmpHtmlFile = tempnam(sys_get_temp_dir(), 'wkhtmltopdf');
file_put_contents($tmpHtmlFile, $html);
// 一時的なPDFファイルのパスを指定します $tmpPdfFile =
tempnam(sys_get_temp_dir(), 'wkhtmltopdf') . '.pdf';
// wkhtmltopdfコマンドを実行します
$command = "wkhtmltopdf {$tmpHtmlFile} {$tmpPdfFile}";
exec($command); // PDFを出力します
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="output.pdf"');
readfile($tmpPdfFile);
// 一時ファイルを削除します
unlink($tmpHtmlFile);
unlink($tmpPdfFile);
use SnappyPdf;
$pdf = SnappyPdf::loadHTML('<h1>Hello, World!</h1>');
return $pdf->inline();