【門前.ORG/MONZEN.ORG】チーター・エンジニア/Cheetah Engineer

CheetahEnginner/MONZEN.ORGアセンブル・ウェブサイト/Assemble.JP アセンブル・ウェブサイト
MONZEN.ORG/WAKU MONZEN.ORG  2008/11/22(土) MONZEN.ORG/WAKU
アセンブル・ウェブサイト
 トップ | プライベート | 概要 | 開発ドキュメント | お問合せ | サイトマップ |  
 リファレンス > TCPDF
TCPDFについて
TCPDF」はPHPから動的にPDFを作成するためのPHP用ライブラリです。

PHP4、PHP5のどちらでも利用可能で、日本語を含めUNICODEにも対応しています。
また、ライブラリ自体が、PHP本体から完全に独立しているので、使い勝手が抜群によい、という非常に大きな利点があります。

一方、TCPDFを使って作成したPDFは、ファイルサイズが大きくなりがちという傾向もありますので、例えばISDNのような回線速度では、これが問題になるかもしれません。
 (※フォント埋め込み型のPDFを作成するため、ファイルサイズが大きくなりやすい)

以下、TCPDFを使って、PHPからPDFドキュメントを作成するために必要な事柄を、特に日本語を含むPDFを作成する点について、記載しておきます。


 ※TCPDFの公式サイトはTECKNICK.COMです
TCPDFのダウンロード
SOURCEFORGE.NET / TCPDF」より、最新の zip アーカイブをダウンロード。

TCPDFのバージョンが、「4.3.004」であれば、アーカイブは「tcpdf_4_3_004.zip」となります。

※当サイト(MONZEN.ORG)はPHP5を使っています。
TCPDFのセットアップ
上記でダウンロードした zip のアーカイブ・ファイルを解凍し、ディレクトリごとホストにアップロードする。
includerequire を使ってライブラリを呼び出すため、呼び出す事ができる場所に配置する事。
TCPDFの基本的な使い方
最低限、以下のようにPHPを記述するだけでPDFファイルが作成できます。
<?php

    /* ライブラリをインクルードする(TPDFをインストールしたパスを指定する) */
require_once('../config/lang/eng.php');
require_once('../tcpdf.php');

    /* PDF オブジェクトを作成し、以降の処理で操作します */
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true); 

    /* PDFドキュメントを初期化します */
$pdf->AliasNbPages();

    /* 1ページ目を準備します */
$pdf->AddPage();

    /* 枠付で文字列を出力します */
$pdf->Cell(0,12,"Hello !!!",1,1,'C');

    /* PDF を出力します */
$pdf->Output("sample.pdf", "I");

?>
     ⇒ このPHPで作成した「サンプルPDF」。

もちろん、他に様々な機能が実装されていますので、以下の出力サンプルも参照下さい。
TCPDF出力サンプル
TCPDFを使って、PHPからダイナミックにPDFを作成するサンプルです。

- VER 4.3.004 -
001 通常のヘッダ・フッタ Default Header and Footer ソース(PHP) (08.10.21)
002 ヘッダ・フッタ無し Removing Header and Footer ソース(PHP) (08.10.10)
003 カスタムヘッダ・フッタ Custom Header and Footer ソース(PHP) (08.10.10)
004 セル内/文字伸張 Cell stretching ソース(PHP) (08.10.10)
005 マルチセル Multicell ソース(PHP) (08.10.10)
006 HTML/RTL書式対応 WriteHTML and RTL support ソース(PHP) (08.11.06)
007 サイズ違いのカラム Two independent columns with WriteHTMLCell ソース(PHP) (08.10.10)
008 UTF-8形式テキスト Include external UTF-8 text file ソース(PHP) (08.10.10)
009 画像 Test Image ソース(PHP) (08.10.10)
010 段落形式のテキスト Text on multiple columns ソース(PHP) (08.10.30)
011 カラーテーブル Colored Table ソース(PHP) (08.10.10)
012 グラフィック関数 Graphic Functions ソース(PHP) (08.10.10)
013 グラフィック変換 Graphic Transformations ソース(PHP) (08.10.10)
014 Javascriptの埋め込み Javascript Form and user rights ソース(PHP) (08.10.29)
015 目次をつける Bookmarks (Table of Content) ソース(PHP) (08.10.10)
016 セキュリティ・ガード Document Encryption / Security ソース(PHP) (08.10.10)
017 サイズ違いのカラム(2) Two independent columns with MultiCell ソース(PHP) (08.10.29)
018 ペルシャ語サンプル RTL document with Persian language ソース(PHP) (08.11.12)
019 旧形式/非UNICODE対応 Non unicode with alternative config file ソース(PHP) (08.10.21)
020 セルの組み合わせ Two columns composed by MultiCell of different ソース(PHP) (08.10.10)
021 HTML出力 WriteHTML text flow ソース(PHP) (08.10.10)
022 CMYK色処理 CMYK colors ソース(PHP) (08.10.10)
023 ページ・グループ Page Groups ソース(PHP) (08.11.18)
024 画面表示/印刷出力制御 Object Visibility ソース(PHP) (08.10.10)
025 透明化 Object Transparency ソース(PHP) (08.10.10)
026 テキストによるクリッピング処理 Text Clipping ソース(PHP) (08.10.10)
027 バーコード Barcodes ソース(PHP) (08.11.16)
028 ページサイズを変更する Changing page formats ソース(PHP) (08.10.28)
029 PDFビューワのレイアウトを調整 Set PDF viewer display preferences ソース(PHP) (08.10.10)
030 色グラディエーション Colour gradients ソース(PHP) (08.10.10)
031 円グラフ Pie Chart ソース(PHP) (08.10.10)
032 PS/AIイメージ EPS/AI image ソース(PHP) (08.10.10)
033 混在フォント Mixed font types ソース(PHP) (08.11.19)
034 画像クリッピング Clipping ソース(PHP) (08.10.10)
035 セルの境界線種 Line styles with cells and multicells ソース(PHP) (08.10.10)
036 吹き出し Annotations ソース(PHP) (08.11.19)
037 色名の設定 Spot colors ソース(PHP) (08.10.10)
038 日本語(日中韓)フォントを実装 CID-0 CJK Fonts without embedding ソース(PHP) (08.09.15)
039 HTMLでの両端揃え HTML justification ソース(PHP) (08.10.29)
040 見開きページ(綴じ代を調整) Booklet mode (double-sided pages) ソース(PHP) (08.10.28)

更新内容の詳細は特記事項 を参照の事。
  • VER 4.3.004・・・(08.11.19) サンプル 036 更新(※サンプル033は更新ありません)。
  • VER 4.3.003・・・(08.11.18) サンプル 023 更新。
  • VER 4.3.002・・・(08.11.17) ※サンプル 017 の更新はありません。
  • VER 4.2.008・・・(08.11.13) サンプル 018 更新。
  • VER 4.2.007・・・(08.11.12) サンプル (041) test_custom_list_indent.php 配布。
  • VER 4.2.005・・・(08.11.06) サンプル 006 更新。
  • VER 4.2.000・・・(08.10.30) サンプル 010 更新。
TCPDFの日本語・標準フォントについて
初期状態でセットアップされて、そのまま使える「日本語(CJK:日中韓)フォント」は下記の通り。
※VER 4.0.026以降から配布されています。

1. Arial Uni CID0 (arialunicid0) サンプル(日本語)
2. 小塚ゴシックPro M (kozgopromedium) サンプル(日本語)
3. 小塚明朝Pro M (kozminproregular) サンプル(日本語)
4. HYSMyeongJoStd-Medium (hysmyeongjostdmedium) サンプル(日本語)
5. MSungStd-Light (msungstdlight) サンプル(日本語)
6. STSongStd-Light (stsongstdlight) サンプル(日本語)
TCPDFの欧文・標準フォントについて
初期状態でセットアップされる「欧文フォント」は下記の通り。
ZarBoldについては 特記事項 を参照の事。

1. Almohanad (almohanad) サンプル(英)
2. Courier (courier) サンプル(英)
3. Dejavu Sans (dejavusans-extralight) サンプル(英)
4.   (dejavusans) サンプル(英)
5.   (dejavusansb) サンプル(英)
6.   (dejavusansbi) サンプル(英)
7. Dejavu Sans Condensed (dejavusanscondensed) サンプル(英)
8.   (dejavusanscondensedb) サンプル(英)
9.   (dejavusanscondensedbi) サンプル(英)
10.   (dejavusanscondensedi) サンプル(英)
11. Dejavu Sans (dejavusansi) サンプル(英)
12. Dejavu Sans Mono (dejavusansmono) サンプル(英)
13.   (dejavusansmonob) サンプル(英)
14.   (dejavusansmonobi) サンプル(英)
15.   (dejavusansmonoi) サンプル(英)
16. Dejavu Serif (dejavuserif) サンプル(英)
17.   (dejavuserifb) サンプル(英)
18.   (dejavuserifbi) サンプル(英)
19. Dejavu Serif Condensed (dejavuserifcondensed) サンプル(英)
20.   (dejavuserifcondensedb) サンプル(英)
21.   (dejavuserifcondensedbi) サンプル(英)
22.   (dejavuserifcondensedi) サンプル(英)
23. Dejavu Serif (dejavuserifi) サンプル(英)
24. Free Mono (freemono) サンプル(英)
25.   (freemonob) サンプル(英)
26.   (freemonobi) サンプル(英)
27.   (freemonoi) サンプル(英)
28. Free Sans (freesans) サンプル(英)
29.   (freesansb) サンプル(英)
30.   (freesansbi) サンプル(英)
31.   (freesansi) サンプル(英)
32. Free Serif (freeserif) サンプル(英)
33.   (freeserifb) サンプル(英)
34.   (freeserifbi) サンプル(英)
35.   (freeserifi) サンプル(英)
36. Helvetica (helvetica) サンプル(英)
37. Times (times) サンプル(英)
38. ZarBold (zarbold) サンプル(英)
TCPDFで使えるフォントを自分で作成する
TCPDFで使えるフォントを作成する方法は、配布物の中の「README.TXT (英語)」に記述されています。
簡単に日本語にすると以下のような感じです。
1. フォントのファイル名は「全て小文字」にする。
 Unixではファイルの大文字小文字は区別されます。小文字で統一するようにします。

2. フォント・ファイルからAFM/UFMファイルを作成します。
 配布ファイル(tcpdf_4_3_004.zip)に同梱されている変換ツール
tcpdf/fonts/utils/ttf2ufm.exe 」を使います。

 ttf2ufm.exe を自分のWindows環境にコピーします。
 さらに、TCPDFで使いたいTrueTypeフォントのファイル myfont.ttf を、ttf2ufm.exe と同じディレクトリにコピーし、以下のようにコマンドを実行します。
$ ttf2ufm -a -F myfont.ttf
 フォントがOTF(Open Type Font)の場合にも同様に、以下のようにします。
$ ttf2ufm -a -F myfont.otf

3. PHP/Zファイルを作成します。
 上記2.を実行して作成されたファイルを、Linuxサーバーなど、PHPのスクリプトを実行できる環境に移動します。
 移動したディレクトリにて、PHPスクリプトを実行します。
 TTF の場合は、
$ php -q makefont.php myfont.ttf myfont.ufm
 OTF の場合も同様に、
$ php -q makefont.php myfont.otf myfont.ufm

4. 上記3.で作成した.php, .z and .ctg.zをTCPDFのフォントディレクトリに移動
 通常は tcpdf/fonts ディレクトリがフォント用のディレクトリです。
 このディレクトリに、上記の3つのファイル(.php、.z、.ctg.z)を移動します。

 また、フォントがCID-0の場合には .php を編集する必要があります。
・.phpファイルをエディタで開き、デフォルトフォント幅を指定する行を追加します。
$dw=1000;
・.phpファイル内の「$enc 、 $file 、$ctg 」について再定義します。
 日本語なので以下のように記述します。
$enc='UniJIS-UTF16-H'; $cidinfo=array('Registry'=>'Adobe', 'Ordering'=>'Japan1','Supplement'=>5); include(dirname(__FILE__).'/uni2cid_aj16.php');

5. フォント・ファイル名を調整します。
 4.までで作ったフォントのphpファイルが myfont.php だとすると、
myfont.php : レギュラー
myfontb.php : ボールド
myfonti.php : イタリック
myfontbi.php : ボールド&イタリック
のようにファイル名を調整します。

その他、文字化け対策など「フォント作成時の覚書 」参考の事。
日本語(漢字)のフリー・フォントによる拡張
以下のような、フリーの漢字フォントをTCPDF用に変換したサンプルを、
TCPDFで利用できるフリーの日本語フォント一覧」にて、ご確認下さい。
1.IPA ゴシック
IPA ゴシック
2.IPA Pゴシック
IPA Pゴシック
3.IPA UIゴシック
IPA UIゴシック
計 136 書体掲載中
日本語(漢字)のフリー・フォントのレイアウト・チェック
「日本語フォントを使ったPDFのレイアウト」を確認するためのツールです。
任意の文章で日本語の出力状態を確認できます。
TCPDF日本語(フリーフォント)動作確認ツール」からテストできます。
TCPDFに関する特記事項
VER 4.3.004 08.11.19
サンプル「examples036」が更新されました。
発音記号用の文言を吹き出しのテキストに埋め込んでいます。
... accented letters test: a`e`e'i`o`u`...
【変更前】(VER 4.3.003)は ⇒ サンプル036(PDF) | ソースPHP
VER 4.0.022 〜 4.3.004 08.11.19
Linux/BSD/Unixサーバーでは欧文フォント「zarbold」はそのままでは使えません。
フォントのファイル名を大文字から小文字に変更する必要があります。
ZarBold.ctg.z -> zarbold.ctg.z
ZarBold.z -> zarbold.z
VER 4.3.003 08.11.19
サンプル「examples023」が更新されました。
... $this->getGroupPageNo() ...
... $this->getGroupPageNoFormatted() ...

【変更前】(VER 4.3.002)は ⇒ サンプル023(PDF) | ソースPHP
VER 4.2.008 08.11.13
サンプル「examples018」が更新されました。
単語「Farsi」が「Percian」に変更されています。
【変更前】(VER 4.2.007)は ⇒ サンプル018(PDF) | ソースPHP
VER 4.2.007 〜 4.2.008 08.11.13
サンプル「examples」に含まれる「test_custom_list_indent.php」は、通常のサンプルとは異なります。TCPDF自体の挙動に影響を及ぼすものではありませんが、配布物に含まれているので、一応ここに掲載しておきます。
VER 4.2.005 08.11.07
サンプル「examples006」が更新されました。
006サンプルPDFの4ページ目に出力されるテスト・フォントが変更されています。
「arialunicid0」 -> 「dejavusans
【変更前】(VER 4.2.004)は ⇒ サンプル006(PDF) | ソースPHP
VER 4.2.000 08.10.30
サンプル「examples010」が更新されました。
RTL形式の書式に対応。
【変更前】(VER 4.1.004)は ⇒ サンプル010(PDF) | ソースPHP
VER 4.0.033 08.10.14
サンプル「examples」に含まれる「test20081013_fonts.php」は、通常のサンプルとは異なります。VER 4.0.033 のリリース上の問題だけであり、挙動に影響を及ぼすものではありませんが、配布物に含まれているので、一応ここに掲載しておきます。
TCPDFオンライン・マニュアル/リリースノート
VER 4.3.004 (08.11.19) オンライン・マニュアル (英語)
VER 4.3.003 (08.11.18) オンライン・マニュアル (英語)
VER 4.3.002 (08.11.17) オンライン・マニュアル (英語)
VER 4.2.009 (08.11.13) オンライン・マニュアル (英語)
VER 4.1.004 (08.10.23) オンライン・マニュアル (英語)
VER 4.0.033 (08.10.13) オンライン・マニュアル (英語)
VER 3.1.001 (08.06.13) オンライン・マニュアル (英語)

TCPDFの更新内容は、「リリースノート / Release Notes and Changelog (4.3.004 | 英語)」を参照下さい。
更新履歴
08.11
11.19 - VER 4.3.004 に対応しました。
11.19 - VER 4.3.003 に対応しました。
11.18 - VER 4.3.002 に対応しました。
11.15 - VER 4.3.000 に対応しました。
11.13 - VER 4.2.009 に対応しました。
11.13 - VER 4.2.008 に対応しました。
11.12 - VER 4.2.007 に対応しました。
11.07 - VER 4.2.006 に対応しました。
11.05 - VER 4.2.004 に対応しました。
11.01 - VER 4.2.003 に対応しました。
08.10
10.14 - TCPDFの基本的な使い方について記載しました。
10.** - 日本語フリーフォント・手書き系に「Y.OzN04/S04/K05」計9書体を追加しました。
10.** - VER 4.0.030〜4.2.001 に対応しました。
08.09
09.30 - TCPDF用フォントの作成方法について記載しました。
09.27 - (CJK)日本語初期フォントを掲載しました。
09.** - 日本語フリーフォント・手書き系に「おひさまフォント/Y.OzC04/Y.OzE04」を追加しました。
09.** - VER 4.0.023〜4.0.029 に対応しました。
08.08
08.** - 日本語フリーフォント・手書き系に「ふい字フォント/まきばフォント」を追加しました。
08.** - VER 4.0.017〜4.0.022 に対応しました。
08.07
07.31 - VER 4.0.016 に対応しました。
07.01 - VER 3.1.001 に対応しました。
MONZEN.ORG/WAKU MONZEN.ORG/WAKU
アッセンブル