月: 2015年2月

【PHP】phpでstrftimeを使って和暦や午前、午後のフォーマットで表示する方法

phpでstrftimeを使って和暦や午前、午後のフォーマットで表示する方法

Linux環境で試したらできた。
(Cライブラリに依存するらしいです。)

setlocale(LC_TIME, "ja_JP.utf8", "Japanese_Japan.932");
print strftime('%EC%Ey年%B%#d日(%A) %OP %I時%M分', strtotime('2015-02-26 11:30:00'));
平成27年2月26日(木曜日) 午前 11時30分

■参考URL

strftimeで和暦表示
http://qiita.com/iwykzm@github/items/e6ff9f735a8ac7998a72

strftime – convert date and time to a string
http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html

【FuelPHP】dompdfで作成するPDFのサイズを小さくしてみる

dompdfで作成するPDFのサイズを小さくしてみる

前回dompdfを使ってHTMLからPDFを生成できるようになったのですが、
どうもPDFにフォントが全て含まれているようでファイルサイズがでかかった。
そこで設定を変更して利用しているフォントだけを含むようにしてみる。

■dompdf_config.custom.inc.php

//define("DOMPDF_ENABLE_FONTSUBSETTING", true);
// ↓
define("DOMPDF_ENABLE_FONTSUBSETTING", true);

上記の設定変更で問題無いはずだけど以下のエラーが発生。

Fatal Error - Class 'Font' not found in /****/fuel/packages/pdf/lib/dompdf/lib/class.pdf.php on line 2352
// Load font
$font_obj = Font::load($fbfile);

上記のFontクラスが読めていない模様。
そもそも前回パスを勝手に変更して設置しているのでその影響かもしれない。
とりあえず該当クラスでFontが読めるように数行追記

■packages/pdf/lib/dompdf/lib/class.pdf.php

require_once "php-font-lib/classes/Autoloader.php";
use FontLib\Font;

実行するとさらに以下のエラーが発生。

Fatal Error - Class 'Font_Binary_Stream' not found in /****/fuel/packages/pdf/lib/dompdf/lib/class.pdf.php on line 2367

php-font-lib/classesの下を見ても「Font_Binary_Stream」は無いので、
名前が似ている「Binary_Stream」を利用するように変更してみる。

■packages/pdf/lib/dompdf/lib/class.pdf.php

require_once "php-font-lib/classes/Autoloader.php";
use FontLib\Font;
use FontLib\Binary_Stream;

■packages/pdf/lib/dompdf/lib/class.pdf.php @2367くらい

//$font_obj->open($tmp_name, Font_Binary_Stream::modeWrite);
//↓
$font_obj->open($tmp_name, Binary_Stream::modeWrite);

実行すると動いた。
元々4.3MBあったPDFが39KBに激減した。

これでいいのかな・・・・?

■参考サイト
DOMPDFでPDFファイルサイズを小さくする
http://madroom-project.blogspot.jp/2012/12/dompdfpdf.html

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

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

CodeIgniterで「Disallowed Key Characters. __utmt_~1」

「Disallowed Key Characters. __utmt_~1」

CodeIgniterで作成したシステムで上記のエラーが
出るようになった。

原因は1ページ内にGoogle Analyticsのタグを複数
記述してしまったことが原因らしい。

タグを1つにして「~」のついているCookieを削除して解決。

ただCookieに入った「__utmt_~1」の「~」の影響で
「Disallowed Key Characters.」が出るのが気持ち悪い。。

Input.phpの「_clean_input_keys」に「~」を追加するやり方を
してる人もいた。

Disallowed Key Characters – Codeigniter urgent
http://stackoverflow.com/questions/26145721/disallowed-key-characters-codeigniter-urgent

Hunting Down the CodeIgniter “Disallowed Key Characters” Error
http://wejn.com/blog/2014/10/hunting-down-the-codeigniter-disallowed-key-characters-error/