MONZEN.ORG 2.0

site of a goat in sheep's clothing

TCPDFに関するリファレンス・ドキュメント

TCPDFについて

tcpdfTCPDF」は、PHP用のライブラリで、PDFファイルを動的に作成するためのライブラリ(クラス)です。

PHP4、PHP5のどちらでも利用可能で、Linuxだけでなく、Windowsにも対応しています。

また、日本語・中国語・韓国語を含め、UNICODEに対応しており、機能も豊富で、一般的に利用されているPDF書式の大部分を作成できます。

さらに、「ライブラリ自体は、PHP本体から完全に独立している」ので、例えばバージョンアップする場合でも、ライブラリのディレクトリを丸ごと入れ替えるだけで済みます。

このように取り扱いが簡単なため、使い勝手が抜群によい、という非常に大きな利点があります。

一方、TCPDFを使って作成したPDFは、ファイルサイズが大きくなりがち、という傾向があります。

そのため ISDNのような回線速度や低速なモバイル環境では、これが致命的な問題になるかもしれません。

これは、TCPDFが標準では「フォント埋め込み型PDF」を作成するためで、数ページのPDFドキュメントのファイルサイズが数MBに及ぶ場合もあります。

  • (※追記: VER 5.2.000/ 「フォント・サブセットだけを埋め込むPDFの作成」がサポートされ、この問題が軽減されました)

    但し、日本語TrueTypeFontでサブセット使うと、かなりの処理時間がかかります。 従って、現状ではTrueTypeFontでのサブセットはおススメできません。

    • ※VER5.2.000~VER5.3.010ではサブセット処理に不具合があるので、このバージョンを使わないか、 もしくはTrueTypeフォントを使わないで下さい(TCPDFに関する特記事項参照)。
    • ※VER5.4.000にてサブセットを無効にできない不具合が解消されました。
  • (※追記: VER 4.6.027/ 「フォントを埋め込まないPDFの作成」がサポートされましたので、この問題が軽減されました)
  • (※追記: VER 4.4.000/ ファイル・サイズを縮減するよう改善されています)

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

tcpdf ※TCPDFの公式サイトはTCPDF.ORG(TECKNICK.COM)です。

TCPDFのダウンロードとセットアップ

SOURCEFORGE.NET / TCPDF」より、最新の zip アーカイブをダウンロードする。

TCPDFのバージョンが、「6.0.038」であれば、アーカイブ・ファイルは「tcpdf_6_0_038.zip」となります。

※当サイト(MONZEN.ORG)はPHP5を使っています。

ダウンロードしたファイル「tcpdf_6_0_038.zip」を解凍、そのルート・ディレクトリ「tcpdf」ごとホストにアップロードする。

このディレクトリ内のライブラリ・ファイルを、includeやrequireにて呼び出すため、呼び出す事ができる場所に配置する事。

TCPDFの基本的な使い方

最低限、以下のようにPHPを記述するだけでPDFファイルが作成できます。

<?php

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

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

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

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

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

?>

⇒ このPHPスクリプトで作成した「サンプルPDF」。

もちろん、他に様々な機能が実装されていますので、以下の出力サンプルも参照下さい。

TCPDF出力サンプル

TCPDFを使って、PHPからダイナミックにPDFを作成するサンプルです。

- VER 6.0.038 -

No. サンプル名 最終更新日
001 通常のヘッダ・フッタ Default Header and Footer (PHP) (13.06.04)
002 ヘッダ・フッタ無し Removing Header and Footer (PHP) (13.06.04)
003 カスタムヘッダ・フッタ Custom Header and Footer (PHP) (13.06.04)
004 セル内/文字伸張 Cell stretching (PHP) (13.06.04)
005 マルチセル Multicell (PHP) (13.06.04)
006 HTML/RTL書式対応 WriteHTML and RTL support (PHP) (13.06.04)
007 サイズ違いのカラム Two independent columns with WriteHTMLCell (PHP) (13.06.04)
008 UTF-8形式テキスト Include external UTF-8 text file (PHP) (13.06.04)
009 画像 Test Image (PHP) (13.06.04)
010 段組形式のテキスト Text on multiple columns (PHP) (13.06.04)
011 カラーテーブル Colored Table (PHP) (13.06.04)
012 グラフィック関数 Graphic Functions (PHP) (13.06.04)
013 グラフィック変換 Graphic Transformations (PHP) (13.06.04)
014 Javascriptの埋め込み Javascript Form and user rights (PHP) (13.06.04)
015 目次をつける Bookmarks (Table of Content) (PHP) (13.06.04)
016 セキュリティ・ガード Document Encryption / Security (PHP) (13.06.04)
017 サイズ違いのカラム(2) Two independent columns with MultiCell (PHP) (13.06.04)
018 ペルシャ語サンプル RTL document with Persian language (PHP) (13.05.14)
019 旧形式/非UNICODE対応 Non unicode with alternative config file (PHP) (13.05.16)
020 セルの組み合わせ Two columns composed by MultiCell of different (PHP) (13.06.04)
021 HTML出力 WriteHTML text flow (PHP) (13.06.04)
022 CMYK色処理 CMYK colors (PHP) (13.06.04)
023 ページ・グループ Page Groups (PHP) (13.06.04)
024 画面表示/印刷出力制御 Object Visibility (PHP) (13.06.04)
025 透明化 Object Transparency (PHP) (13.06.04)
026 テキストによるクリッピング処理 Text Clipping (PHP) (13.06.04)
027 バーコード Barcodes (PHP) (13.06.04)
028 ページサイズを変更する Changing page formats (PHP) (13.06.04)
029 PDFビューワのレイアウトを調整 Set PDF viewer display preferences (PHP) (13.06.04)
030 色グラディエーション Colour gradients (PHP) (13.06.04)
031 円グラフ Pie Chart (PHP) (13.06.04)
032 PS/AIイメージ EPS/AI image (PHP) (13.06.04)
033 混在フォント Mixed font types (PHP) (13.06.04)
034 画像クリッピング Clipping (PHP) (13.06.04)
035 セルの境界線種 Line styles with cells and multicells (PHP) (13.06.04)
036 吹き出し Annotations (PHP) (13.06.04)
037 色名の設定 Spot colors (PHP) (13.09.30)
038 日本語(日中韓)フォントを実装 CID-0 CJK Fonts without embedding (PHP) (13.06.04)
039 HTMLでの両端揃え HTML justification (PHP) (13.06.04)
040 見開きページ(綴じ代を調整) Booklet mode (double-sided pages) (PHP) (13.06.04)
041 PDF内の添付ファイル Annotation - FileAttachment (PHP) (13.06.04)
042 透過画像 Test Image with alpha channel (PHP) (13.06.04)
043 PDFファイルのキャッシュ化 Disk caching (PHP) (13.06.04)
044 ページを動的に移動/削除 Move and delete pages (PHP) (13.06.04)
045 目次を作成 Bookmarks and Table of Content (PHP) (13.06.04)
046 単語折り返し'-'表記 Text Hyphenation (PHP) (13.06.04)
047 取り消し(アンドゥ) Transactions (PHP) (13.06.04)
048 HTMLでの表タグ HTML tables and table headers (PHP) (13.06.04)
049 HTMLからのTcpdf関数呼び出し WriteHTML with TCPDF callback functions (PHP) (13.06.04)
050 2次元バーコード 2D Barcodes (PHP) (13.06.04)
051 全面ふちなし背景イメージ Full page background (PHP) (13.06.04)
052 署名の設定 Certification Signature (PHP) (13.06.04)
053 PDF内でのJavascriptの実行 Javascript example (PHP) (13.06.04)
054 XHTMLによる入力コンポーネント XHTML Forms (PHP) (13.06.04)
055 主要フォントでの文字表記一覧 Display all characters available on core fonts (PHP) (13.06.04)
056 画像の表示境界マーク Crop Marks and Registration Marks (PHP) (13.09.30)
057 セル内での縦方向文字位置合わせ Cell vertical alignments (PHP) (13.06.04)
058 SVG画像出力 SVG Image (PHP) (13.06.04)
059 HTMLで目次のテンプレートを指定 Table Of Content with HTML templates (PHP) (13.06.04)
060 (拡張)ページ設定 Advanced page settings (PHP) (13.06.04)
061 XHTML + CSS XHTML + CSS (PHP) (13.06.04)
062 グラフィックObjectテンプレート XObject Template (PHP) (13.06.04)
063 文字の拡大/縮小/文字間隔設定 Text stretching and spacing (kerning) (PHP) (13.06.04)
064 矩形領域の埋め込み No-write page regions (PHP) (13.06.04)
065 PDF/A-1への対応 PDF/A-1b document (PHP) (13.06.04)
目次 - Index

出力サンプルの更新履歴は、文量が増えたため「TCPDFリファレンスドキュメント・更新履歴のページ」に移動しました。

TCPDFの日本語・標準フォントについて

初期状態でセットアップされて、そのまま使える「日本語(CJK:日中韓)フォント」は下記の通り。

※VER 4.0.026以降から配布されています。

1. 青柳衡山 行書 (aoyagi-kouzan-font-gyousyo) サンプル(日本語)
2. 青柳衡山 草書 (aoyagi-kouzan-font-sousyo2) サンプル(日本語)
3. 青柳衡山 フォントT (aoyagi-kouzan-font-t) サンプル(日本語)
4. 青柳衡山 フォント2 (aoyagi-kouzan-font2) サンプル(日本語)

TCPDFの欧文・標準フォントについて

初期状態でセットアップされる「欧文フォント」は下記の通り。

ZarBoldについては TCPDFに関する特記事項 を参照の事。

1. aealarabiya aealarabiya サンプル(英)
2. aefurat aefurat サンプル(英)
3. Courier (courier) サンプル(英)
4. Dejavu Sans (dejavusans) サンプル(英)
5.   (dejavusansb) サンプル(英)
6.   (dejavusansbi) サンプル(英)
7. Dejavu Sans Condensed (dejavusanscondensed) サンプル(英)
8.   (dejavusanscondensedb) サンプル(英)
9.   (dejavusanscondensedbi) サンプル(英)
10.   (dejavusanscondensedi) サンプル(英)
11. Dejavu Sans (dejavusansextralight) サンプル(英)
12.   (dejavusansi) サンプル(英)
13. Dejavu Sans Mono (dejavusansmono) サンプル(英)
14.   (dejavusansmonob) サンプル(英)
15.   (dejavusansmonobi) サンプル(英)
16.   (dejavusansmonoi) サンプル(英)
17. Dejavu Serif (dejavuserif) サンプル(英)
18.   (dejavuserifb) サンプル(英)
19.   (dejavuserifbi) サンプル(英)
20. Dejavu Serif Condensed (dejavuserifcondensed) サンプル(英)
21.   (dejavuserifcondensedb) サンプル(英)
22.   (dejavuserifcondensedbi) サンプル(英)
23.   (dejavuserifcondensedi) サンプル(英)
24. Dejavu Serif (dejavuserifi) サンプル(英)
25. Free Mono (freemono) サンプル(英)
26.   (freemonob) サンプル(英)
27.   (freemonobi) サンプル(英)
28.   (freemonoi) サンプル(英)
29. Free Sans (freesans) サンプル(英)
30.   (freesansb) サンプル(英)
31.   (freesansbi) サンプル(英)
32.   (freesansi) サンプル(英)
33. Free Serif (freeserif) サンプル(英)
34.   (freeserifb) サンプル(英)
35.   (freeserifbi) サンプル(英)
36.   (freeserifi) サンプル(英)
37. Helvetica (helvetica) サンプル(英)
38. Times (times) サンプル(英)

TCPDFで使えるフォントを自分で作成する

TCPDFで使えるフォントを作成する方法は、配布物の中の「README.TXT (英語)」に記述されています。

簡単に日本語にすると以下のような感じです。

  • 1. フォントのファイル名は「全て小文字」にする。

    Unixではファイルの大文字小文字は区別されます。小文字で統一するようにします。

  • 2. フォント・ファイルからAFM/UFMファイルを作成します。

    VER4.4.0より、Linux用の変換モジュール「ttf2ufm」が配布されていますので、 WindowsだけでなくLinux環境でも変換作業を行えるようになりました。

    Windows環境で変換する場合
     配布物(tcpdf_6_0_038.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

    Linux環境で変換する場合
    上記の ttf2ufm.exettf2ufm と置き換えます。

  • 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

    上記↑2.3.の作業をLinuxで一括して行う

    Linux環境用に「makeallttffonts.php」というスクリプトが配布されています。

    このスクリプトを使って、2.3.の作業を一括処理できます。

    カレントディレクトリに「*.ttf」ファイルが存在する状態で、以下のように実行します。

    $ php -f makeallttffonts.php

    この処理で上記「2.3.」で作成するufmファイルやphpファイルが作成されます。

  • 4. 上記3.で作成した「.php」「.z」「.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 : ボールド&イタリック

    のようにファイル名を調整します。

■補足1. 文字化け対策

その他、文字化け対策など「フォント作成時の覚書」参考の事。

■補足2. フォントファイルの配置先ディレクトリ

※VER 4.5.003より「フォントを配置するフォルダが任意に指定できる」ようになりました。

これまでは、以下のいずれかのディレクトリに配置しなければなりませんでした。

  • 「K_PATH_FONTS」で定義されるディレクトリ(通常は fonts)
  • カレント・ディレクトリ

これに加え「AddFontメソッド」を使って、任意のフォント・ファイルを指定できるようになりました。

■補足3. フォントを埋め込まないPDFの作成

VER 4.6.027よりフォントを埋め込まないPDFの作成がサポートされました。

TCPDFに関する特記事項」を参照下さい。

■補足4. フォント・サブセットPDFの作成

VER 5.2.000よりフォント・サブセット(実際に使っている文字のフォント)だけを埋め込むPDFの作成がサポートされました。

このサブセットを生成する処理は、実行時間とCPUを大いに消費しますので、2010.06.16現在では、利用を控える事をおススメします。

TCPDFに関する特記事項」を参照下さい。

日本語(漢字)のフリー・フォントによる拡張

以下のような、フリーの漢字フォントが利用できます。

1.IPA ゴシック

IPA ゴシック

2.IPA Pゴシック

IPA Pゴシック

3.IPA UIゴシック

IPA UIゴシック

TCPDFで利用できるフリーの日本語フォント一覧」 に掲載しています。

計 137 書体掲載中

また、任意の文章について、日本語の出力状況を確認するためのツールを作成してみました。

TCPDF日本語(フリーフォント)動作確認ツール」からテストできます。

一覧からフォントを選択し、表示したい文章を自由に入力して下さい。

TCPDFの定数定義・コンフィギュレーション

TCPDFで用いられる「定数」は、配布物の中のコンフィギュレーション・ファイル「tcpdf_config.php」に定義されています。

例えば、「出力ページの用紙の向き」を指定する(既定の)定数として、「PDF_PAGE_ORIENTATION」が定義されています。

ちなみに、オンライン・マニュアル(英語)では、PDF_PAGE_ORIENTATION に記載されています。

上記のコンフィギュレーション・ファイルでは、以下のように既定値として「縦(PORTRAIT)」が定義されています。

define ('PDF_PAGE_ORIENTATION', 'P');

これを使って、実際のプログラムでは以下のように指定する事になります。

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true); 

指定できる値は以下の2種類です。

  • 「縦:PORTRAIT」の場合、'P'を指定。
  • 「横:LANDSCAPE」の場合、'L'を指定。

従って「」を指定する場合、以下のように記述するのがてっとり早いでしょう。

$pdf = new TCPDF('L', PDF_UNIT, PDF_PAGE_FORMAT, true); 

こうした定数定義の一覧はオンライン・マニュアルの「Docs for page tcpdf_config.php」にも掲載されていますのでご参照下さい。

TCPDFに関する特記事項

特記事項の文量が増えたため、別途「TCPDFに関する特記事項のページ」を設けました。

TCPDFオンライン・マニュアル/リリースノート

オンライン・マニュアル (英語)

TCPDFの更新内容は「更新履歴」を参照下さい。

※旧バージョンのオンラインマニュアルは、 TCPDFリファレンスドキュメント・更新履歴のページに移動しました。

VER 4.6.021 (09.08.06) オンライン・マニュアル (日本語訳)

オンラインマニュアル日本語訳は、暫定的に掲載しています。

誤記や追記、ご意見等ございましたら、随時ご連絡下さい。

更新履歴

2011

  • 11.01 - VER 5.9.134 に対応しました。
  • 06.** - VER 5.9.082~VER 5.9.088 に対応しました。
  • 05.** - VER 5.9.081~VER 5.9.081 に対応しました。
  • 04.** - VER 5.9.063~VER 5.9.072 に対応しました。
  • 03.** - VER 5.9.060 に対応しました。
  • 02.** - VER 5.9.049~VER 5.9.059 に対応しました。
  • 01.** - VER 5.9.035~VER 5.9.046 に対応しました。

2010

  • 12.** - VER 5.9.027~VER 5.9.034 に対応しました。
  • 11.** - VER 5.9.011~VER 5.9.026 に対応しました。
  • 10.** - VER 5.9.000~VER 5.9.010 に対応しました。
  • 09.** - VER 5.8.023~VER 5.8.034 に対応しました。
  • 08.** - VER 5.7.001~VER 5.8.022 に対応しました。
  • 07.** - VER 5.5.008~VER 5.5.015 に対応しました。
  • 06.** - VER 5.2.000~VER 5.5.006 に対応しました。
  • 05.** - VER 5.0.000~VER 5.1.002 に対応しました。
  • 04.** - VER 4.9.004~VER 4.9.018 に対応しました。
  • 03.** - VER 4.8.037~VER 4.9.003 に対応しました。
  • 02.** - VER 4.8.031~VER 4.8.036 に対応しました。
  • 01.** - VER 4.8.021~VER 4.8.030 に対応しました。

2009

  • 12.** - VER 4.8.018~VER 4.8.020 に対応しました。
  • 11.** - VER 4.8.013~VER 4.8.017 に対応しました。
  • 10.** - VER 4.8.010~VER 4.8.012 に対応しました。
  • 09.** - VER 4.7.003~VER 4.8.009 に対応しました。
  • 08.08 - 日本語フリーフォント・活字系に「FSゴシック・FS明朝」計2書体を追加しました。
  • 08.06 - VER 4.6.021 マニュアル日本語訳を「暫定的」に掲載しました。
  • 08.05 - PHPコードの表示にSyntaxHighlighterを用いるよう変更。
  • 08.** - VER 4.6.023~VER 4.7.001 に対応しました。
  • 07.** - VER 4.6.017~VER 4.6.022 に対応しました。
  • 06.29 - 「PHP 逆引きレシピ (PROGRAMMER’S RECiPE) 」が発売されました。 公式サイトは「PHP逆引きレシピ」です(本サイトが紹介されています)。
  • 06.** - VER 4.6.014~VER 4.6.016 に対応しました。
  • 05.** - VER 4.6.007~VER 4.6.013 に対応しました。
  • 04.** - VER 4.5.036~VER 4.6.006 に対応しました。
  • 03.** - VER 4.5.019~VER 4.5.035 に対応しました。
  • 02.16 - 日本語フリーフォント・手書き系に「YSフォント」計4書体を追加しました。
  • 02.** - VER 4.5.013~VER 4.5.018 に対応しました。
  • 01.24 - コンフィギュレーションについて記載しました。
  • 01.07 - 日本語フリーフォント・手書き系に「あずき・うずらフォント」計7書体を追加しました。
  • 01.05 - TCPDに関する特記事項のページを設けました。
  • 01.** - VER 4.5.001~VER 4.5.010 に対応しました。

2008

  • ~12.** - ~VER 4.4.009 に対応しました。
  • 12.08 - 日本語フリーフォント・手書き系に「みかちゃんフォント」計4書体を追加しました。
  • 10.14 - TCPDFの基本的な使い方について記載しました。
  • ~07.** - ~VER 3.1.001 に対応しました。

TCPDFリファレンスドキュメント・更新履歴のページを設けました。

更新履歴

2014.04.16 TCPDF用フォントのダウンロード先リンクを再作成。
2013.11.24 全面リニューアルしました(MONZEN.ORG 2.0)。
2013.11.24 ITラボラトリにフォントテストを追加しました。
2013.11.24 ITラボラトリに文字列エンコードを追加しました。
2013.07.01 サーバーを入れ替えました(内容は変わりません)。
...全て

お知らせ

2014.04.16 TCPDF用フォントのダウンロードリンク切れを修正しました(岡田氏・風間氏ご指摘感謝)。
2013.12.01 フリーの日本語フォント情報を募集しています。
2007.01.01 相互リンクサイトを募集しています。