fpdi-tfpdfのインストール
インストール自体は基本的に以下で可能
composer require setasign/fpdi-tfpdf:2.2
いくつか機能が分かれているようなのでcomposer経由でないと面倒な設定が必要になる。フォントファイル(.ttf)を用意して配置する必要がある。
IPA明朝あたりがライセンス的にも使いやすい。
https://ipafont.ipa.go.jp/old/ipafont/download.html
vender/setasign/tfpdf/font/unifont
以下に配置するのが一番問題が少ないようだ(ちょっと抵抗があるが)以下が動作サンプル
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <?php require_once $_SERVER [ 'DOCUMENT_ROOT' ] . '/vendor/autoload.php' ; use setasign\Fpdi\Tfpdf\Fpdi; $pdf = new Fpdi(); $pdf ->AddPage(); $pdf ->SetFont( 'Arial' , 'B' ,16); // 配置したフォントファイル名を指定する $pdf ->AddFont( 'IPA' , '' , 'ipamp.ttf' ,true); $pdf ->SetFont( 'IPA' , '' ,14); $pdf ->Write(8, 'Japanese: 日本語テスト' ); $pdf ->Output(); |
ここまでなら
http://www.fpdf.org/
のUTF-8 Supportからダウンロードして直接配置するだけでも動作する。
ただしテンプレートファイルに埋め込んで出力するような場合FPDIが別途必要になる(composer経由ならいい感じにしてくれる)
埋め込んだ場合のやり方は以下参照。
setSourceFileを使用する。
https://www.setasign.com/products/fpdi/about/
Ellipseなどを使用している場合以下のスニペット。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <?php require_once $_SERVER [ 'DOCUMENT_ROOT' ] . '/vendor/autoload.php' ; use setasign\Fpdi\Tfpdf\Fpdi; class myFPDF extends Fpdi { function Circle( $x , $y , $r , $style = 'D' ) { $this ->Ellipse( $x , $y , $r , $r , $style ); } function Ellipse( $x , $y , $rx , $ry , $style = 'D' ) { if ( $style == 'F' ) $op = 'f' ; elseif ( $style == 'FD' || $style == 'DF' ) $op = 'B' ; else $op = 'S' ; $lx =4/3*(M_SQRT2-1)* $rx ; $ly =4/3*(M_SQRT2-1)* $ry ; $k = $this ->k; $h = $this ->h; $this ->_out(sprintf( '%.2F %.2F m %.2F %.2F %.2F %.2F %.2F %.2F c' , ( $x + $rx )* $k ,( $h - $y )* $k , ( $x + $rx )* $k ,( $h -( $y - $ly ))* $k , ( $x + $lx )* $k ,( $h -( $y - $ry ))* $k , $x * $k ,( $h -( $y - $ry ))* $k )); $this ->_out(sprintf( '%.2F %.2F %.2F %.2F %.2F %.2F c' , ( $x - $lx )* $k ,( $h -( $y - $ry ))* $k , ( $x - $rx )* $k ,( $h -( $y - $ly ))* $k , ( $x - $rx )* $k ,( $h - $y )* $k )); $this ->_out(sprintf( '%.2F %.2F %.2F %.2F %.2F %.2F c' , ( $x - $rx )* $k ,( $h -( $y + $ly ))* $k , ( $x - $lx )* $k ,( $h -( $y + $ry ))* $k , $x * $k ,( $h -( $y + $ry ))* $k )); $this ->_out(sprintf( '%.2F %.2F %.2F %.2F %.2F %.2F c %s' , ( $x + $lx )* $k ,( $h -( $y + $ry ))* $k , ( $x + $rx )* $k ,( $h -( $y + $ly ))* $k , ( $x + $rx )* $k ,( $h - $y )* $k , $op )); } } |
Fpdiの代わりにmyFPDFを使用する。
参考
http://www.fpdf.org/
https://kantaro-cgi.com/blog/php/fpdf_fpdi_utf8_japanese.html
https://landhere.jp/blog/a176.html
https://github.com/Setasign/FPDI/blob/master/local-tests/tfpdf.php