PHPで便利にPDFデータを作成できる「TCPDF」ライブラリ

こんにちわ。
頻度高くペチっている、下駄です。
あ〜ペチっていうのは、ペチパー(PHPer)がPHPを使うことを言っています。
「ペチパー」とかけまして、
「浅草の天丼屋」と、ときます。
そのココロは・・・
今現在活躍している上、その業界において「老舗」の存在です。
TCPDF
とある案件でPDFファイルを作成するシステムを組むことになったので、調べてみたらGithubでも公開されている「TCPDF」というライブラリがすぐに検索に引っかかりました。
他にも「mPDF」というPHPライブラリもありますが、使い方が似た感じなので、今回はSEOが上位のTCPDFを使ってみたいと思います。
ただ、簡単に・・・というレベルではなく、PDFを表示するまで、少しばかりコツが必要だったので、そのソースコードを掲載しておきます。
事前準備
まずはじめに、TCPDFのGithubページから、ライブラリをcloneしておきます。
そして、PHPで以下のソースコードを記述すれば、とりあえず簡単にPDF表示ができるようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?php // 画像の入っているディレクトリを指定する値を事前にクリアしておく。 define('K_PATH_IMAGES', ''); // ライブラリを読み込む require_once("./TCPDF/tcpdf.php"); // PDF用紙の向き設定 $orientation = 'P'; // 用紙の向き(P=portrait(縦), L=landscape(横)) // オブジェクト作成 // ["向き" , "単位" , "用紙" , "Unicode" , "エンコード" , "ディスクキャッシュ"] $pdf = new \TCPDF($orientation, 'mm', 'A4', true, 'UTF-8', false); // 初期設定 ---------- // 印刷ヘッダー表示 $pdf->setPrintHeader(true); // 印刷フッターを表示しない $pdf->setPrintFooter(false); // PDFファイルのタイトルを設定 $pdf->setTitle("MyTitle"); // PDFファイルのサブタイトルを設定 $pdf->SetSubject('PDF Subject'); // PDFファイルの作成者を設定 $pdf->SetAuthor('Create by ideacompo'); // 余白を設定する(左, 上, 右 の順で設定 / 単位はコンストラクタで設定したものに準拠) $pdf->SetMargins(4, 10, 4); // キーワードセット $pdf->SetKeywords('TCPDF, PDF, example, test, guide'); // ヘッダ項目のセット $pdf->SetHeaderData("images/sample.png", 100 , "" , "PDF Sample Document"); $pdf->setHeaderFont(Array('kozminproregular', '', 14)); // フォント設定 $pdf->setFont('kozminproregular', '', 14); // ページ作成 $pdf->AddPage(); $html = "<h1>Hello World !!</h1>"; $pdf->writeHTML($html, true, true, true, true); // 画像表示 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); $x = 0; $y = 100; $w = 100; $h = 30; $pdf->Rect($x, $y, $w, $h, 'F', array(), array(255,255,255)); $pdf->Image('images/sample.jpg' , $x,$y,$w,$h,"JPG","","M",false,300 , "",false, false, 0, false, false, false); // ページ終了 $pdf->lastPage(); // ファイルを出力 $fileName = './sample.pdf'; $pdfData = $pdf->Output(rawurlencode($fileName), 'S'); // ブラウザに表示 header('Content-Type: application/pdf'); header("Content-Disposition: inline; filename*=UTF-8''".rawurlencode($fileName)); echo $pdfData; |
注意点とライブラリの評価
コメントに詳細を書いておいたので、読めばそこそこ理解できると思います。
ページを増やしたい場合は、addpageを増やしていくとできます。
IMGタグが使えるとどこかの解説ページに書いてあったのだけど、実際は、imageで直接座標などを指定しなければ、表示できませんでした。
何か特殊なやり方があるのかな?
使った感想としては、細かく設定できる点はいいのですが、デフォルト値が少し簡単に使う用になっていなかったり、
パラメータの指定が必須か任意かが明確でないので、思わぬところでエラーになったりして、結構困惑していました。
そして、フッタの表示をOFFにしていないと、小さくこっそりと本家ページのリンクがページ最下部に表示されていて、製作者のしたたかさが現れています。
ただ、PDFを作るという点において、一度コーディングしてしまえば、かなり便利に扱えるため、自分用の表示関数を作っておけば、かなり便利に使えるという事はわかりました。
ビジネスツールとPDFファイルは結構、切っても切り離せない関係ですからね。
今後も便利に使わせてもらいましょう。
ちなみに、本家サイトのExamplesページには、大量にサンプルが掲載されていて、表組みや、外部画像の使い方などが、載っているので、できるかどうか迷ったら見てみるといいでしょう。
参考
TCPDF-Github
https://github.com/tecnickcom/TCPDF
TCPDF-本家サイト
https://tcpdf.org/
TCPDF-紹介ページ
https://blitzgate.co.jp/blog/1737/
mPDF紹介ページ
https://gray-code.com/php/output-to-pdf-file-by-mpdf-libraries/