PHPでPDF出力 ~ tcpdfを利用した「ええ感じ」のサンプル(htmlを利用)
tcpdfの準備
プロジェクト用ディレクトリ作成
mkdir pdf-example
ディレクトリに移動
mkdir pdf-example
composer初期化
composer init
tcpdfインストール
composer require tecnickcom/tcpdf
IPAフォントダウンロード、解凍
curl https://ipafont.ipa.go.jp/IPAfont/IPAfont00303.zip --output IPAfont00303.zip unzip IPAfont00303.zip
tcpdfに日本語用フォント追加
php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipag -f 32 -i ./IPAfont00303/ipag.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipagp -f 32 -i ./IPAfont00303/ipagp.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipam -f 32 -i ./IPAfont00303/ipam.ttf php vendor/tecnickcom/tcpdf/tools/tcpdf_addfont.php -b -t ipamp -f 32 -i ./IPAfont00303/ipamp.ttf
画像埋め込みの確認用に猫の画像を検索してダウンロードしておく
ここで猫の画像を検索 visualhunt.com
名前はcat.phpにしよう。
phpファイル作成
それなりに、HTMLは色々と盛り込んでみました。
<?php // composerでインストールしたライブラリを参照する require_once('./vendor/tecnickcom/tcpdf/tcpdf.php'); // 用紙の方向、用紙サイズを指定する $tcpdf = new TCPDF('P', "pt",'A4'); $tcpdf->SetMargins(5, 5, 5); //マージン無効 $tcpdf->SetFont('ipag', '', 10); $tcpdf->setPrintHeader(false); $tcpdf->setPrintFooter(false); $tcpdf->AddPage(); $html = <<< EOF <style> .td { border: solid 1px black; } .td2 { border: solid 1px black; height:100px; } .td3 { font-size:20px; border: solid 1px black; height:100px; } .table{ 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="cat.jpg" width="300px"/> </div> <br> </td> </tr> </table> EOF; $tcpdf->WriteHTML($html, true, 0, false, true, 'L'); // 出力用バッファの内容を消去 ob_end_clean(); $tcpdf->Output("test.pdf", "D");
結果
URLを開くとファイルがダウンロードされます。
ファイルを開くとこんな感じに。
参考
その他
dompdfはこちら
dompdfバージョンのエントリは以下より。
wkhtmltopdfはこちら
wkhtmltopdfバージョンのエントリは以下より。