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