SQLの窓

2018年12月02日


TCPDF をダウンロードして、フリーフォントを埋め込み型で使用する方法


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_025TCPDF をダウンロードして、Windows の任意のフォルダで 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 用のフォントファイルを作成しておいて使用するのが現実的です。
1.// フォントを動的に作成して使用する方法( 作成するのは最初だけ )
2.// ※ 32 はデフォルトですが、メソッドの都合上省略しない
3.// ※ フォントフォルダのパスを / で終了させる
4.$fontname = TCPDF_FONTS::addTTFfont("hc-poo5.ttf", "TrueTypeUnicode", "", 32, "C:\\httpd142p\\pdf_format\\tcpdf\\fonts/");
フリーフォントは、通常システムに無いですから、『埋め込み』で処理する事になります。但しそのぶん PDF が大きくなってしまいますが、PC の環境に依存せず表示されます。
フリーフォントによっては崩れて使え無いですが、現在デフォルトで『部分埋込($font_subsetting)』により使用している文字のみ埋め込むようになっています( 全て埋め込む場合は $pdf->setFontSubsetting(false); を実行)
部分埋め込み : 84k
全て埋め込み : 4224k
1./**
2. * Boolean flag: if true enables font subsetting by default.
3. * @protected
4. * @since 5.3.002 (2010-06-07)
5. */
6.protected $font_subsetting = true;
非埋め込み型は、Windows(等) に最初からあるフォントを対象とし、PDF のサイズを小さくする事が主な目的となります。

こちらから、実際に『HCP丸ゴシック(蓬莱和多流)』と言うフリーフォントを使ったPDF がご覧いただけます(部分埋め込み)。


この PDF は、サンプルの38番を書き換えたもので、オリジナルよりさらにシンプルになっています。
(部分埋め込み型です)
01.<?php
02.require_once('tcpdf_include.php');
03. 
04.// create new PDF document
05.$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
06. 
07.$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
08.$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
09. 
10.// set auto page breaks
11.$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
12. 
13.$pdf->SetFont('hcpoo5', '', 20);
14.$pdf->AddPage();
15. 
16.$txt = 'example_038.pdfは非埋め込み型フォントのサンプルですが、hcpoo5はフリーフォントを埋め込み型で変換したものです
17. 
18.';
19.$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
20. 
21.$pdf->SetFont('hcpoo5', '', 14);
22.$txt = '埋め込み    : c:\php\php tcpdf_addfont.php -i hc-poo5.ttf
23.非埋め込み   : c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf
24. 
25.';
26.$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
27. 
28.$pdf->SetFont('hcpoo5', '', 40);
29. 
30.$txt = 'こんにちは世界あいうえお漢字表示';
31.for( $i = 0; $i < 4; $i++ ) {
32.        $txt .= $txt;
33.}
34. 
35.$pdf->Write(0, $txt, '', 0, 'L', false, 0, false, false, 0);
36. 
37.// ---------------------------------------------------------
38. 
39.//Close and output PDF document
40.$pdf->Output('example_038.pdf', 'I');
TCPDF 用フォントの作成

作成されたフォントは、fonts フォルダにコピーされますが、再作成する場合はいったん削除します。埋め込み型では、3つ作成されますが、非埋め込み型だと1つです。
01.>c:\php\php tcpdf_addfont.php -t CID0JP -i hc-poo5.ttf
02. 
03.>>> Converting fonts for TCPDF:
04.*** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
05.+++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
06.hcpoo5
07.>>> Process successfully completed!
08. 
09. 
10.>c:\php\php tcpdf_addfont.php -i hc-poo5.ttf
11. 
12.>>> Converting fonts for TCPDF:
13.*** Output dir set to C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf/fonts/
14.+++ OK   : C:\httpd142p\lightbox\tcpdf_6_0_080\tcpdf\tools\hc-poo5.ttf added as
15.hcpoo5
16.>>> 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 で使用可能なフォントに関しては英語名が使用できませんでした


関連する記事

タグ:PHP TCPDF PDF
posted by lightbox at 2018-12-02 11:44 | PHP + PDF | このブログの読者になる | 更新情報をチェックする

container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり
読込中