TCPDFはできないことが多い!と感じる
先日クライアントに、PDFファイルを出力できるようにしてくれと言われた。
「やってやろうじゃないか!htmlとcssを組み合わせればレイアウトも自由自在でしょ!」といきまいて作業にとりかかったが、あら大変。実際はそんなに単純じゃなくて、PDFファイルのレイアウトを色々いじるのは難しい!と感じたので、忘れないうちに今回学んだことをメモ。
(もしかしたら私の知識や検索が不足していて、ホントはもっと効率的なやり方があるのかもしれないが、もしそうだとしたら悪しからず)
環境:CakePHP2.4による開発、tcpdf Ver 6.0.055
0. 前提:CSSは効くものと効かないものがある。外部CSSは読み込まないので、styleタグ内にCSSを書くしかない。完全に効かない!とかならまだしも、効くものとそうでないのがあるのが質が悪い。
1. styleタグ内で、id指定は効かない。class指定は効く
//×ケース <div id="content"></div> <style> #content { color: red; } </style> //◯ケース <div class="content"></div> <style> .content { color: red; } </style>
→よって、class指定すべし
2. margin, padding, float使えない。
→よって、レイアウトはtableタグを使ってやるべし
3.
全角スペースも半角スペースも正確に認識しない
→よって、「 」で対応すべし
4.
太い線が引けない。cssで「border: solid 10px black」と指定しても、 10pxの線にならない。(色は変えられる。しかし、太さと線の形式(dotted, double等)は効かない
→よって、tcpdfの関数を使うべし。以下コード($pdfは最初に作成したインスタンス)
$pdf->SetLineWidth(0.8); //0.8は線の太さ $pdf->Line(10.0, 52.0, 153.0, 52.0); //10.0, 52.0は線の始点のX座標, Y座標 //153.0, 52.0は線の終点のX座標, Y座標
その他のできないことリスト
・centerタグが使えない
参考になるサイト
・PDFファイルを生成するためのPHPライブラリ「TCPDF」 | モノについてのモノ語り(http://www.near-mint.com/blog/5040)
以上。新情報あれば追加します。