割と簡単に対応ができるし、高機能だけど見た目の調整は結構めんどうかも。。
今回はTCPDFを使用してみました。
TCPDFとは…
- PHP用のライブラリで、PDFファイルを動的に作成するためのライブラリ
- PHP4、PHP5で動作する
- UNICODEで対応
- Linux 、Windowsで動作
- 日本語フォントにも対応しており、標準で「arialunicid0」「kozgopromedium」「kozminproregular」あたりが設定可能。
など。。細かいところはここを参照。
▼TCPDFのダウンロード
SorceForge(http://sourceforge.net/projects/tcpdf/files/)に最新のファイルがあるようなので、こちらからダウンロード
(PHP4のものはファイル名の後ろに_php4と書いてあるようです)
▼汎用ライブラリの作成
TCPDF側で持っているスタイルは基本利用しない形で作ってみました。
<?php require_once(MLC_LIB_DIR . '/extlib/tcpdf/tcpdf.php'); /** * Pdf生成ライブラリ */ class Pdf extends TCPDF { var $pdfInstance; var $_pdfFileName = 'sample.pdf'; var $_pdfData; var $_pdfSubject = '○○株式会社様へのお知らせ'; var $defaultFontType = 'kozminproregular'; /** * */ function Pdf($pdfEncode) { parent::__construct(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, $pdfEncode, false); $this->SetCreator(PDF_CREATOR); $this->SetAuthor('AUTHOR'); $this->SetTitle('TITLE'); $this->SetSubject('SUBJECT'); $this->SetKeywords('KEYWORD'); /** * ヘッダ・フッタ設定 */ $this->setHeaderFont(false); $this->setFooterFont(false); $this->setPrintHeader(false); /** * 固定幅フォント設定 */ $this->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); /** * マージン設定 */ $this->SetMargins(0/*PDF_MARGIN_LEFT*/, 0/*PDF_MARGIN_TOP*/, 0/*PDF_MARGIN_RIGHT*/); $this->SetHeaderMargin(0/*PDF_MARGIN_HEADER*/); $this->SetFooterMargin(0/*PDF_MARGIN_FOOTER*/); /** * ページブレイクの設定 */ $this->SetAutoPageBreak(false, 0/*PDF_MARGIN_BOTTOM*/); /** * */ $this->setImageScale(PDF_IMAGE_SCALE_RATIO); /** * */ $this->setLanguageArray($l); /** * */ $this->setFontSubsetting(true); /** * */ $this->SetFont($this->defaultFontType, '', 20, '', true); /** * */ $this->AddPage(); } /** * */ function setPdfSubject($pdfSubject) { $this->_pdfSubject = $pdfSubject; } /** * */ function getPdfSubject() { return $this->_pdfSubject; } /** * */ function setPdfFileName($pdfFileName) { $this->_pdfFileName = $pdfFileName; } /** * */ function getPdfFileName() { return $this->_pdfFileName; } /** * */ function setPdfData($pdfData) { $this->_pdfData = $pdfData; } /** * */ function getPdfData() { return $this->_pdfData; } /** * PDFファイルの生成 * * @param $execMode PDF生成モード(D:ダウンロード, I:出力) */ function exec($execMode = 'D') { $this->writeHTML($this->getPdfData(), true, 0, true, 0); $this->Output($this->getPdfFileName(), $execMode); } /** * インスタンスの生成 * */ function &getInstance($pdfEncode = 'UTF-8') { static $instance; if ( !$instance ) { $instance = new Pdf($pdfEncode); } return $instance; } }
こんな感じで利用
$pdfInstance = Pdf::getInstance('UTF-8'); $pdfInstance->setPdfFileName($pdfFileName); $pdfInstance->setPdfData($template); $pdfInstance->exec();
これCSSとかも反映されるし、すごい高機能だなーって印象。