私のパソコン雑記帖

トップページに戻る 

PDF生成ライブラリTCPDF

カテゴリー: PHP
17Sep2013
更新 1Mar2015
更新 31May2022

TCPDFとは

TCPDFとはPHP用のPDF生成ライブラリで無償で自由に利用できます。

HTMLによるページ表示では正確に印刷仕様を規定することが出来ません。しかしPDFファイルであれば、ページの表示方法や、テキスト、グラフィックス、画像をページ上に表示する方法を完全に規定することができます。TCPDFはそのようなニーズを満たしてくれます。当サイトではこれまでFPDFを紹介してきましたが、今回いろいろな事情でTCPDFに切り替えることにしました。両者似たようなライブラリですが、日本語の実装はTCPDFのほうがはるかに容易です。

TCPDFの公式サイトは https://tcpdf.org/ です(英文)。豊富な samples も用意されています。ネット上では日本語の解説も少なくありませんから、合わせて目を通せば TCPDF の概要を把握するのはそれほど難しくはないと思われます。セットアップは公式サイトからダウンロード・解凍した TCPDF-main パッケージをアップロードするだけです。

当サイトでは簡単なサンプルとして、市販されているマルチカード名詞印刷用紙を使って名詞を作成する例を取り上げます(下図参照)。とりあえずこのような簡単な例で概要を把握するのが早道と思います。


作成例に従ったPHPコーディング

<?php

//名詞面の文字列に変数名を与えます。
$str1="アドアドアド株式会社";//会社名
$str2="広報部 リーダー";//タイトル
$str3="鈴木智子";//氏名
$str4="〒108-0022";//郵便番号
$str5="東京都海岸3-20-20";//住所1
$str6="ヨコソーレインボータワー5階";//住所2
$str7="連絡先";//
$str8="TEL:03-000-1234";//電話番号
$str9="FAX:03-000-5678";//ファックス番号
$str10="E-Mail:t_suzuki@adoadoado.com";//Eメールアドレス

//以下コーディング開始
require_once('tcpdf/tcpdf.php');//実行ファイル tcpdf.php(version 6.4.4)へのパス
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8');//用紙と数値単位の設定。補足3参照。
$pdf->setPrintHeader(false);//印刷ヘッダーを表示しない
$pdf->setPrintFooter(false);//印刷フッターーを表示しない
$pdf->SetMargins(14.0, 11.0, 14.0);//左マージン、トップマージン、右マージンの順
$pdf->AddPage();//新規ページ起こし
$pdf->SetAutoPageBreak(true,0);//改ページ設定、第2要素(数値)は下マージン。
$pdf->SetTextColor(0,0,0);//テキストの文字色をRGBで設定(この場合黒)

//以下名詞面の記述開始

for($i=1;$i<=5;$i++){//1段2列の記述を5回繰り返す
//1段2列の記述
$pdf->SetFont('arialuni', '',14);//フォント指定。補足4参照。

$pdf->Cell(182,4,'',0,1,'L',false,'',0,true);//幅182高さ4のブランクスペース。Cell については補足5参照。

$pdf->Cell(2,5.0,'',0,0,'L',false,'',0,true);//以下4行は、高さ5.0のスペースに文字列 $str1 を書きこむ。
$pdf->Cell(89,5.0,$str1,0,0,'L',false,'',0,true);
$pdf->Cell(2,5.0,'',0,0,'L',false,'',0,true);
$pdf->Cell(89,5.0,$str1,0,1,'L',false,'',0,true);

$pdf->Cell(182,0.5,'',0,1,'L',false,'',0,true);//幅182高さ0.5のブランクスペース。

$pdf->SetFillColor(255,0,0);//背景色をRGBで設定(赤)
$pdf->Cell(182,0.5,'',0,1,'L',true,'',0,true);//幅182高さ0.5背景色赤のブランクスペース。

$pdf->Cell(182,0.5,'',0,1,'L',false,'',0,true);//幅182高さ0.5のブランクスペース。

$pdf->SetFillColor(0,0,255);//背景色をRGBで設定(青)
$pdf->Cell(182,0.5,'',0,1,'L',true,'',0,true);//幅182高さ0.5背景色青のブランクスペース。

$pdf->Cell(182,2.5,'',0,1,'L',false,'',0,true);//幅182高さ2.5のブランクスペース。

$pdf->SetFontSize(9);//フォントサイズ変更。フォントサイズは pt で指定。


$pdf->Cell(13,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str2 を書きこむ。
$pdf->Cell(78,3.5,$str2,0,0,'L',false,'',0,true);
$pdf->Cell(13,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(78,3.5,$str2,0,1,'L',false,'',0,true);

$pdf->Cell(182,1.5,'',0,1,'L',false,'',0,true);//幅182高さ1.5のブランクスペース。

$pdf->SetFontSize(16);//フォントサイズ変更。

$pdf->Cell(13,6,'',0,0,'L',false,'',0,true);//以下4行は、高さ6のスペースに文字列 $str3 を書きこむ。
$pdf->Cell(78,6,$str3,0,0,'L',false,'',0,true);
$pdf->Cell(13,6,'',0,0,'L',false,'',0,true);
$pdf->Cell(78,6,$str3,0,1,'L',false,'',0,true);

$pdf->Cell(182,4,'',0,1,'L',false,'',0,true);//幅182高さ4のブランクスペース。

$pdf->SetFontSize(9);//フォントサイズ変更。

$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str4 を書きこむ
$pdf->Cell(57,3.5,$str4,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str4,0,1,'L',false,'',0,true);

$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str5 を書きこむ
$pdf->Cell(57,3.5,$str5,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str5,0,1,'L',false,'',0,true);

$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str6 を書きこむ
$pdf->Cell(57,3.5,$str6,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str6,0,1,'L',false,'',0,true);

$pdf->Cell(31,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str7 を書きこむ
$pdf->Cell(60,3.5,$str7,0,0,'L',false,'',0,true);
$pdf->Cell(31,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(60,3.5,$str7,0,1,'L',false,'',0,true);

$pdf->SetFont('helvetica', '',9);//フォント指定。補足4参照。
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str8 を書きこむ
$pdf->Cell(57,3.5,$str8,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str8,0,1,'L',false,'',0,true);

$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str9 を書きこむ
$pdf->Cell(57,3.5,$str9,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str9,0,1,'L',false,'',0,true);

$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);//以下4行は、高さ3.5のスペースに文字列 $str10 を書きこむ
$pdf->Cell(57,3.5,$str10,0,0,'L',false,'',0,true);
$pdf->Cell(34,3.5,'',0,0,'L',false,'',0,true);
$pdf->Cell(57,3.5,$str10,0,1,'L',false,'',0,true);

$pdf->Cell(182,2,'',0,1,'L',false,'',0,true);//幅182高さ4のブランクスペース。
//1段2列の記述(終了)
}

$pdf->Output();
?>

以上で高さの合計が 275mm(55mmx5)、幅が 182mm になります。マージンを加えると、高さ 297mm 幅 210mm 即ち A4 用紙サイズになります。

この出力を印刷する時は、たとえば次のような標準的な設定画面で「PDFのページサイズに合わせて用紙を選択」にチェックを入れ、「実際のサイズ」を選択します。これで意図した諸寸法を維持した印刷が可能になります。


補足説明

  1. 上掲のphpコードを通常のhtml構文の<body>~</body>内に納めると"Some data has already been output, can't send PDF file"というエラーメッセージが出ます。<?phpで始まり?>で終わる構文でなければなりません。
  2. 名詞面の記述開始前に setPrintHeader() setPrintFooter() SetMargins() AddPage() SetAutoPageBreak() SetTextColor() 等が設定されていますが、実例の説明でほぼ足りていると思います。
  3. tcpdf() について
     第1要素:'P'は縦書き、'L'は横書き 第4要素:ドキュメントテキストが Unicode の場合 true。
  4. SetFont() について
     tcpdf.php と同列にある fonts フォールダ内に (フォント名).php という形でフォントが収納されている。
     ここに収納されているフォントはどれでも随時に選択できる。
     ただし日本語対応のフォントは arialuni kozgopromedium kozminproregular など限られている。
     ちなみに作成例では arialuni を使い、途中一部で helvetica を使っている。
     第1要素はフォント名。第2要素はスタイル。作成例ではすべてブランク(regular)にしている。
     第3要素はフォントサイズ(ptで指定)、これは省略しない。
  5. Cellメソッドは特別重要なので、以下要素に応じて説明します。
    • 第1要素:幅
    • 第2要素:高さ
    • 第3要素:テキスト
    • 第4要素:枠線 0:枠なし 1:枠あり あるいは L(左)T(上)R(右)B(下)の組合せ(自由)。
       枠線の色はあらかじめ SetDrawColor(R,G,B) で規定できる。省いた場合は黒。
    • 第5要素:出力後の移動方法 0:右へ移動 1:次の行へ移動(改行)。作成例では4枠セットを多用して、
       4枠を横並びにして、最後に改行しているが、この第5要素でコントロールしている。
    • 第6要素:テキストの配置 L:左寄せ C:中央 R:右寄せ J:両端揃え
    • 第7要素:背景色を塗る場合は true、ただし事前に SetFillColor(R,G,B) で背景色の指定が必要。
       作成例では 赤線 青線 以外はすべて false にしている。
    • 第8要素:リンク、URL指定。作成例では全てブランクにしている。
    • 第9要素:テキストの伸縮。作成例では全て0(無し)にしている。
    • 第10要素:高さの最小値調整。作成例では全てtrue(調整しない)にしている。
    •  作成例では小数点以下の高さ指定を多用しているので、この第10要素は極めて重要。
  6. 文字サイズがスペースの高さ以上のときは文字が削られます。1ptは1/72インチ(0.353mm)ですから、例えば、高さ5に納まるフォントサイズ14になります。



コメント


【admin】  2014年09月03日 11時28分

わかりやすい記事で大変参考になりました!
おかげでfpdfのUTF8化の問題解決しました。
ありがとうございました。