読者です 読者をやめる 読者になる 読者になる

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.
全角スペースも半角スペースも正確に認識しない
→よって、「&nbsp;」で対応すべし

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)

以上。新情報あれば追加します。