PHPでPDF出力 ~ wkhtmltopdfを利用した「ええ感じ」のサンプル(htmlを利用)
- wkhtmltopdfをインストール(Homebrew-cask利用)
- knplabs/knp-snappyの準備
- 画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
- phpファイル作成
- 結果
- その他
wkhtmltopdfをインストール(Homebrew-cask利用)
wkhtmltopdfはバイナリ。バイナリな分速度は早いのですが、 環境に依存しますので、サーバによっては使えない場合が有ります。 (共有サーバとかだとインストールできない場合が多い、または難易度が上がります。)
brew cask install wkhtmltopdf
knplabs/knp-snappyの準備
プロジェクト用ディレクトリ作成
mkdir pdf-example3
ディレクトリに移動
cd pdf-example3
composerの準備
composer init
knplabs/knp-snappyのインストール
composer require knplabs/knp-snappy
画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
ここで猫の画像を検索 visualhunt.com
名前はcat.jpgにしよう。
phpファイル作成
base64で事前に読み込んでおく。
<?php<?php require './vendor/autoload.php'; $img = base64_encode(file_get_contents("cat.jpg")); $html = <<< EOF <style> body { font-family: ipag; } .td { border: solid 1px black; } .td2 { border: solid 1px black; height:100px; } .td3 { font-size:20px; border: solid 1px black; height:100px; } .table{ width:100%; border-collapse: collapse; border-spacing: 0px; } .left{ text-align: left; border: solid 1px black; height:30px; } .right{ text-align: right; border: solid 1px black; height:30px; } .center{ text-align: center; border: solid 1px black; height:30px; } .decoration{ text-decoration: line-through; border: solid 1px black; } .sample1 {text-decoration: none;} .sample2 {text-decoration: underline;} .sample3 {text-decoration: overline;} .sample4 {text-decoration: line-through;} .sample5 {text-decoration: underline dotted red;} .color{ background-color:black; color:white; } </style> <table class="table"> <tr> <td class="left">text-align: left;</td> <td class="center">text-align: center;</td> <td class="right">text-align: right;</td> </tr> <tr> <td class="td">test</td> <td class="td">日本語</td> <td class="td">hoge</td> </tr> <tr> <td class="td">test</td> <td class="td"><table class="table"> <tr> <td class="td" >test</td> </tr> <tr> <td class="td" >test</td> </tr> </table></td> <td class="td">hoge</td> </tr> <tr> <td class="td" colspan="2">colspan="2"</td> <td class="td" rowspan="2">rowspan="2"</td> </tr> <tr> <td class="td">test</td> <td class="td">fuga</td> </tr> <tr> <td class="td2" colspan="3">height:100px; colspan="3"</td> </tr> <tr> <td class="td2 color" colspan="3">改行<br> brタグ<br> で改行<br> 背景色変更<br> フォントカラー変更<br> </td> </tr> <tr> <td class="td3" colspan="3">改行<br> brタグ<br> で改行<br> </td> </tr> <tr> <td class="td2" colspan="3"> <div><span class="sample1">none</span> text-decoration: none;</div> <div><span class="sample2">underline</span> text-decoration: underline;</div> <div><span class="sample3">overline</span> text-decoration: overline;</div> <div><span class="sample4">line-through</span> text-decoration: line-through;</div> <div><span class="sample5">underline dotted red</span> text-decoration: underline dotted red;</div> </td> </tr> <tr> <td class="td2" colspan="3"> 画像挿入 <br> <div> <img src="data:image/jpeg;base64,{$img}" width="300px"/> </div> <br> </td> </tr> </table> EOF; // wkhtmltopdfの位置をコンストラクタに渡す $pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf'); // encoding = utf-8をセット $pdf->setOption('encoding', 'utf-8'); // PDFをブラウザに出力 header("Content-Type: application/pdf"); echo $pdf->getOutputFromHtml($html);
結果
その他
tcpdfはこちら
tcpdfバージョンのエントリは以下より。
dompdfはこちら
tcpdfバージョンのエントリは以下より。