FuelPHPでfuel-pdfを使うまでの道のり
HTMLをPDFとして出力したいのでfuel-pdfをインストールしdompdfを使ってみる。
設定するまでにかなりてこずったのでメモ。
fuel-pdfをoilコマンドでいれるよりも、dompdfをそのまま
インストールしたほうがフォントのインストールとかも考えたら
やりやすいかもしれない。
⇒【FuelPHP】FuelPHPでdompdfを使うまでの道のり
■fuel-pdfをインストール
$ php oil package install pdf
■フォルダ名を変更する
「fuel/packages/fuel-pdf」から
「fuel/packages/pdf」に変更
■利用できるようにconfigを変更
編集ファイル:「fuel/app/config/config.php」
'always_load' => array( 'packages' => array( 'pdf' ), ・・・ ),
■とりあえず動かすために適当なコントローラを用意して以下を記述
public function action_hoge() { \Package::load('pdf'); $pdf = \Pdf::factory('dompdf')->init(); $html ='<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>xxx</title> <style> body { font-family: "ipagothic;" } </style> </head> <body> マルチバイト </body> </html>'; $pdf->load_html($html); $pdf->render(); $pdf->stream("test.pdf"); }
この状態でPDFがダウンロードできるが????とか文字化けしている状態のはず。
■日本語が表示できるフォントが無いのでIPAフォントをインストールする
まずIPAのサイトにしたがってフォントをサーバにインストールする。
Linuxに対するフォントインストール例
http://ipafont.ipa.go.jp/fontinstall.html
■dompdfを最新のものに変更
まず最初に。。
http://madroom-project.blogspot.jp/2012/11/fuel-pdfhtmlpdf.html
このサイトに沿って
pdf/lib/dompdfと
pdf/lib/dompdf/lib/php-font-lib
を差し替える
■次にdompdf側でIPAフォントをロードする
以下のコマンドでロードを行う模様
$ php load_font.php ipagothic /home/user/.fonts/IPAfont00303/ipagp.ttf
しかし失敗
$ php load_font.php ipagothic /home/user/.fonts/IPAfont00303/ipagp.ttf PHP Warning: require_once(/home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/php-font-lib/classes/Font.php): failed to open stream: No such file or directory in /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/dompdf_config.inc.php on line 332 PHP Fatal error: require_once(): Failed opening required '/home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/php-font-lib/classes/Font.php' (include_path='.:/usr/share/pear:/usr/share/php') in /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/dompdf_config.inc.php on line 332
「fuel/packages/pdf/lib/dompdf/lib/php-font-lib/classes/Font.php」
↑これが無いっていっている
dompdf fails to load
http://stackoverflow.com/questions/15028250/dompdf-fails-to-load
↑このページを参考にして
「php-font-lib/src/FontLib」を「php-font-lib/classes/」として配置する。
$ cd fuel/packages/pdf/lib/dompdf/lib/php-font-lib/src $ cp -r FontLib ../classes $ pwd /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/php-font-lib/classes $ ll 合計 68 drwxrwxr-x 8 user user 4096 2月 24 16:49 2015 ./ drwxrwxr-x 7 user user 4096 2月 24 16:49 2015 ../ -rw-rw-r-- 1 user user 5867 2月 24 16:49 2015 Adobe_Font_Metrics.php -rw-rw-r-- 1 user user 986 2月 24 16:49 2015 Autoloader.php -rw-rw-r-- 1 user user 8715 2月 24 16:49 2015 Binary_Stream.php drwxrwxr-x 2 user user 4096 2月 24 16:49 2015 EOT/ -rw-rw-r-- 1 user user 836 2月 24 16:49 2015 Encoding_Map.php -rw-rw-r-- 1 user user 1606 2月 24 16:49 2015 Font.php drwxrwxr-x 2 user user 4096 2月 24 16:49 2015 Glyph/ -rw-rw-r-- 1 user user 725 2月 24 16:49 2015 Header.php drwxrwxr-x 2 user user 4096 2月 24 16:49 2015 OpenType/ drwxrwxr-x 3 user user 4096 2月 24 16:49 2015 Table/ drwxrwxr-x 2 user user 4096 2月 24 16:49 2015 TrueType/ drwxrwxr-x 2 user user 4096 2月 24 16:49 2015 WOFF/
このようにしてFont.phpがある状態にする
しかしまだ失敗。。
$ php load_font.php ipagothic /home/user/.fonts/IPAfont00303/ipagp.ttf Unable to find bold face file. Unable to find italic face file. Unable to find bold_italic face file. Copying /home/user/.fonts/IPAfont00303/ipagp.ttf to /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/fonts/ipagp.ttf... Generating Adobe Font Metrics for /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/fonts/ipagp... PHP Fatal error: Class 'Font' not found in /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/load_font.php on line 139
DOMPDF – Class ‘Font’ not found
http://stackoverflow.com/questions/22226218/dompdf-class-font-not-found
↑このページを参考にload_font.phpを変更
require_once "dompdf_config.inc.php";
↓以下に変更する
require_once "dompdf_config.inc.php"; require_once "lib/php-font-lib/classes/Autoloader.php"; use FontLib\Font;
やっと成功。
$ php load_font.php ipagothic /home/user/.fonts/IPAfont00303/ipagp.ttf Unable to find bold face file. Unable to find italic face file. Unable to find bold_italic face file. Copying /home/user/.fonts/IPAfont00303/ipagp.ttf to /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/fonts/ipagp.ttf... Generating Adobe Font Metrics for /home/user/public_html/bantane/cooperation/fuel/packages/pdf/lib/dompdf/lib/fonts/ipagp...
load_font.phpは無事に動いた。
この状態でプログラムを動かすとPDFに日本語が表示された。
■参考サイト
TJS-Technology/fuel-pdf
https://github.com/TJS-Technology/fuel-pdf
FuelPHP の fuel-pdf パッケージを利用し日本語の PDF を生成する
http://qiita.com/hmukaida/items/a960408e736b079390ef
dompdf
https://code.google.com/p/dompdf/wiki/Installation
dompdfで日本語を扱う
http://www.yazin.info/blog/archives/2012/0719_203107.html
FuelPHPのfuel-pdfパッケージをセットアップしてHTMLをPDFにコンバートして出力
http://madroom-project.blogspot.jp/2012/11/fuel-pdfhtmlpdf.html
Unable to locate the ttf2afm / ttf2pt1 executable
http://stackoverflow.com/questions/21675533/unable-to-locate-the-ttf2afm-ttf2pt1-executable
dompdf fails to load
http://stackoverflow.com/questions/15028250/dompdf-fails-to-load
DOMPDF – Class ‘Font’ not found
http://stackoverflow.com/questions/22226218/dompdf-class-font-not-found
dompdf samples
http://pxd.me/dompdf/www/examples.php#encoding_utf-8.html,pdf