2012年1月20日金曜日

PHPでHTMLをPDFで出力(Windows + Apache)

TCPDF を使用。

[1]
tcpdf_5_9_144.zip をダウンロードして解凍して使用するPHPから tcpdf/tcpdf.php を include する。

[2]
このままでは日本語は文字化けするので、tcpdf/config/lang 以下に jpn.php ファイルを作成して以下のコードを記述して保存する。
global $l;
$l = Array();
$l['a_meta_charset'] = 'UTF-8';
$l['a_meta_dir'] = 'jpn';
$l['a_meta_language'] = 'jp';
$l['w_page'] = 'ページ';
 [3]
以下のコードでPHPから使用できる。
include_once ("./tcpdf/config/lang/jpn.php");
include_once ("./tcpdf/tcpdf.php");

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
$pdf->setFontSubsetting(false);
$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);
$pdf->SetFont("kozgopromedium", "", 8);
$pdf->AddPage();
$tpl = mb_convert_encoding("<h1>テスト</h1>", "UTF8", "EUC-JP");
$pdf->writeHTML($tpl, true, 0, false, true, 'L');
$pdf->Output('sample.pdf', 'D');
この時は mb_internal_encoding が EUC-JP だったが、TCPDF は UTF8 で処理されるようなので、もし UTF8 以外でコードを書いている場合は変換する。

また、 writeHTML の内容は HTMLTidy のようなキチンと整形されたコードでなければエラーになってしまう。

CSS は それぞれのタグに style 属性で指定する。
(ブラウザでHTMLを表示した時と同じ・・・とまではいかないような・・・)