請求書をCSVから簡単にPDF出力。しかも綺麗で簡単!
見積書や請求書をいちいちWordやExcelで作成して、PDFに変換されている経営者や経理の方も多いと思いますが、こういう日々の作業って地味に手間ですよね。
以下の仕組みを使って、サーバーにCSVエクスポートすれば、簡単に綺麗な帳票が出力できるようになります。
PHP + Smarty + wkhtmltopdf + php-snappy
「wkhtmltopdf」というPDF変換ライブラリを使うと、なんとhtml5+css3でデザインしたレイアウトがそのままPDFに反映されます。
PHPで利用するには「php-snappy」という「wkhtmltopdf」を簡単に操作できるようになるラッパークラスを使います。
■導入編
cd /usr/local/src/
# wkhtmltopdfのインストール
wget http://download.gna.org/wkhtmltopdf/0.12/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos5-i386.rpm
sudo rpm -ivh wkhtmltox-0.12.2.1_linux-centos5-i386.rpm
# サーバーサイドで利用する日本語フォントのインストール
wget http://ipafont.ipa.go.jp/ipaexfont/ipaexm00201.php
unzip ipaexm00201.zip
sudo mv ipaexm00201/ /usr/share/fonts
fc-list | grep IPA
IPAex明朝,IPAexMincho:style=Regular // ←これ綺麗!
# 対象となるアプリケーション配下にphp-snappyを導入
cd ~/{アプリケーションパス}/
composer require knplabs/knp-snappy
■実装編
(前略)
$Smarty->assign('data', {CSVから読み込んだ帳票データ});
$context = $Smarty->fetch('帳票テンプレート.tpl');
header('application/pdf; charset=utf-8');
require '../lib/vendor/autoload.php';
$pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf');
$pdf->setOption('encoding', 'utf-8');
echo $pdf->getOutputFromHtml($context);
■出力例
(添付画像)
いい感じですね。
以前まではPDFのレイアウトは動的に組むのはとても大変だったので、あらかじめフォーマットとなるPDFを読み込んでそこに文字を埋め込んでいくことも多かったと思いますが、HTML形式でレイアウトを作成できるので、PDFデザインでもWEBデザイナーが本領発揮できます。
プログラマー側も、サーバーサイドでPDFへデータを割り当てていく際に必要な多くの専用メソッドを覚える必要もなく、Smarty等を使ってWEBアプリを作る感じでPDFにデータを埋め込んでいくことができます。
LGPLライセンスなので商用利用もし易いですし、優れものです。