【FuelPHP】FuelPHPでfuel-pdfを使うまでの道のり


【FuelPHP】FuelPHPでfuel-pdfを使うまでの道のり | Bamboo lath 日々の記録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

コメントを残す

メールアドレスが公開されることはありません。