2024/04/20 時点で 6.7.5
2018/11/30 時点で 6.2.26
2016/01/13 時点で 6_2_12
2014/05/22 時点で 6_0_080
さくらサーバでは、php.ini で memory_limit = 256M で動作しています(日本語フォントが大きくなっていました )
2013/09/11 時点で 6_0_025
『TCPDF をダウンロードして、Windows の任意のフォルダで TCPDF 同梱のサンプルを実行する為の設定』の続きです。
TCPDF 用の専用フォント(情報)ファイルは TCPDF そのもの( tcpdf_addfont.php )に作成させるようになっていて、コマンドプロンプトから php で処理できます。
埋め込み : c:\php\php tcpdf_addfont.php -t TrueTypeUnicode -f 32 -i hc-poo5.ttf
非埋め込み : c:\php\php tcpdf_addfont.php -t CID0JP -f 32 -i hc-poo5.ttf
-t は省略すると フォントファイルをチェックして通常は TrueTypeUnicode になり、-f は省略すると 32 です。 ※ -b を指定すると、character bounding box の情報を php のフォントファイルに書き込みます( If true includes the character bounding box information on the php font file. )
動的にフォントファイルを作成する addTTFfont メソッドの使い方
以下のようにして使用できますが、一度作成すると無駄なコードとなる上に ttf ファイルをサーバに置く管理になるので最初に TCPDF 用のフォントファイルを作成しておいて使用するのが現実的です。( TCPDF は サーバーに ttf ファイルを必要としません )
// フォントを動的に作成して使用する方法( 作成するのは最初だけ ) // ※ 32 はデフォルトですが、メソッドの都合上省略しない // ※ フォントフォルダのパスを / で終了させる $fontname = TCPDF_FONTS::addTTFfont("hc-poo5.ttf", "TrueTypeUnicode", "", 32, "C:\\httpd142p\\pdf_format\\tcpdf\\fonts/");
フリーフォントは、通常システムに無いですから、『埋め込み』で処理する事になります。但しそのぶん PDF が大きくなってしまいますが、PC の環境に依存せず表示されます。
フリーフォントによっては崩れて使え無いですが、現在デフォルトで『部分埋込($font_subsetting)』により使用している文字のみ埋め込むようになっています( 全て埋め込む場合は $pdf->setFontSubsetting(false); を実行)
部分埋め込み : 84k
全て埋め込み : 4224k
🔴 フォントに依存しますが、フリーフォントを使用する場合、固定の文書ならば部分埋め込みで出力してから校正すればいいですが、動的な文書の場合は全て埋め込みにする必要があります。
/** * Boolean flag: if true enables font subsetting by default. * @protected * @since 5.3.002 (2010-06-07) */ protected $font_subsetting = true;
非埋め込み型は、Windows(等) に最初からあるフォントを対象とし、PDF のサイズを小さくする事が主な目的となります。 こちらから、実際に『HCP丸ゴシック(蓬莱和多流)』と言うフリーフォントを使ったPDF がご覧いただけます(部分埋め込み)。この PDF は、サンプルの38番を書き換えたもので、オリジナルよりさらにシンプルになっています。 (部分埋め込み型です)
<?php require_once('tcpdf_include.php'); // create new PDF document $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); // set auto page breaks $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); $pdf->SetFont('hcpoo5', '', 20); $pdf->AddPage(); $txt = 'example_038.pdfは非埋め込み型フォントのサンプルですが、hcpoo5はフリーフォントを埋め込み型で変換したものです '; $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0); $pdf->SetFont('hcpoo5', '', 14); $txt = '埋め込み : c:\php\php tcpdf_addfont.php -i hc-poo5.ttf 非埋め込み : c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf '; $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0); $pdf->SetFont('hcpoo5', '', 40); $txt = 'こんにちは世界あいうえお漢字表示'; for( $i = 0; $i < 4; $i++ ) { $txt .= $txt; } $pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0); // --------------------------------------------------------- //Close and output PDF document $pdf->Output('example_038.pdf', 'I');
TCPDF 用フォントの作成 作成されたフォントは、fonts フォルダにコピーされますが、再作成する場合はいったん削除します。埋め込み型では、3つ作成されますが、非埋め込み型だと1つです。
>c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf >>> Converting fonts for TCPDF: *** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/ +++ OK : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as hcpoo5 >>> Process successfully completed! >c:\php\php tcpdf_addfont.php -i hc-poo5.ttf >>> Converting fonts for TCPDF: *** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/ +++ OK : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as hcpoo5 >>> Process successfully completed!
( 上が非埋め込み、下が埋め込み ) 非埋め込み型フォント使用時の代替フォントについて TCPDF 内には cid0jp という非埋め込み型のフォントが用意されていますが、実際に PC にインストールされているフォントを内部では指定していません。なので、表示は代替フォントで表示されます。ただ、代替フォントについて詳細な情報はあまりありません。Adobe のドキュメントでのみ( 代替フォント )という言葉を見る事ができました。しかし、具体的にどのフォントを使うかまでは確認できていません。 こちらの環境(Windows)では、非埋め込み型フォントを使ってそのフォントが無い場合は代替で MSゴシックまたはMS明朝(たぶん)が使われていました 再度確認してみると、Chrome PDF Viewer で MS明朝(らしい)。Firefox 内臓ビュアーでMSゴシック Firefox は、ブラウザの規定のフォントが使われていたので変更可能でした Chrome は、pdf.dll の中に『Arial Unicode MS MingLiU SimSun MS Mincho』という文字列があったので、MS明朝が優先されているような気がします( 変更方法は不明 ) cid0jp について補足 $name='cid0jp'; 部分の cid0jp を日本語で置き換えて SHIFT_JIS で保存すると、英数字の文字ピッチは狂うと思いますが、インストールされているフォントであれば一応の表示が可能です。![]()
漢字等にはほぼ影響出ないとは思いますが、正しいピッチで表示するにはオリジナルのフォントから非埋め込み用フォントを作成して登録する必要があります ※ Office で使用可能なフォントに関しては英語名が使用できませんでした 関連する記事
|