Posted on

tcpdfでIPAフォントを入れる手順の覚書

PDFを吐き出すシステムを作った時に、tcpdfがデフォルトで用意してくれている
フォントでは今回の案件に対応できなかったので、IPAフォントを使う事にしました。

以下のURLを参考に作業を進めていきました。
http://hrgs.xrea.jp/2006/08/24/how_to_use_japanese_with_tcpdf

IPAフォントは
http://ossipedia.ipa.go.jp/ipafont/
でIPAfont00203.zipをダウンロードしてくる。
展開していくつかttfファイルが出来るので、以後ipag.ttf
を使って作業をしてみる。

tcpdfをダウンロードしてきてFPDIを動かすところに配置する。
tcpdf/fonts/utils/の下にいるmakefont.phpとttf2ufm.exeを使って
ipag.ttfファイルからPDFで使えるファイルを生成する。

phpの動くところにtcpdfを設置してtcpdf/fonts/utils/以下に
ipag.ttfを置いておく。

コマンドプロンプトでtcpdf/fonts/utils/の下に移動して
「ttf2ufm.exe -a -F ipag.ttf」をコマンドで打つ。
すると処理が走って「ipag.afm、ipag.t1a、ipag.ufm」の
3つのファイルを生成する。

続いて同じ場所で
「[php.exeまでの相対パス] makeform.php ipag.ttf ipag.ufm」
をコマンドで打つ。
そうすると「ipag.ctg.z、ipag.php、ipag.z」の3つのファイルを生成する。

上記の3つのファイルをtcpdf/fonts/の下においてFPDI
から呼んであげます。
そうすると入れたフォントがPDFで表示されるようになりました。

Posted on

CakePHP ナイスなクリスマスプレゼント!!

みなさん、今年ももうすぐ終わりですね・・・
今のプロジェクトが忙しいので全然年の終わりって気がしませんが、
巷ではサンタさんがナイスなプレゼントをくれました。

その名も、

CakePHP 1.2 Final (1.2.0.7962)!!

ついに出ました安定版。

プロジェクトにかかわっていただいているみなさんありがとうございます。
このブログでちょっとでも恩返しできたら幸いです。

では、皆さん良いお年を・・・

Posted on

CakePHP関西勉強会で発表してきました

CakePHP関西勉強会に行って来ました。
今回はいつも聞いているだけの立場から何か話しをしてみようということでライトニングトークに立候補しました。
話す内容はというとCakePHPでの開発事例と失敗談という事で発表しました。

失敗談を話すために今まで、はまった事を思い出しながらパワーポイントを作っていたのですが結構失敗しているなーという実感です。

ただこれらのいくつかは自己解決をせずに別の方法で逃げたとか、次のバージョンで直ってたという形の発表になってしまったのでちょっと後ろめたさもあったのですが、自分も同じような経験をしたけどこういう方法で解決をしたよとアドバイスを頂いたりして凄くありがたかったです。

懇親会でも同じような失敗をしておられる方がいて凄く参考になったと声を掛けていただいたので、発表して良かったなと心底思いました。

発表をしていて思ったことは聞いている皆さんのリアクションが凄いうれしいなという事です。
開発事例でフォーム数が200以上もあると言ったところでみんなが「ウワー」とリアクションを取ってくれたことで気持ちが楽になってリラックスして発表をしていくことが出来ました。ありがとうございました。
終わったときの満足感もあって凄く楽しい勉強会でした。

Posted on

CakePHP関西勉強会に参加してきました

関西では初となるCakePHP関西勉強会に参加してきました。

10月に東京でCakePHPカンファレンスに行って以来、関西でもしましょう!と言って無事に実現できたのでとても感激でした。今回で、終わらせず、2,3ヶ月ペースでやっていきたいですね。次回は僕も発表しようかな?(今回は弊社の福井が発表させていただきました。)ネタを考えておこう・・・

1. CakePHP アプリケーションの流れを追う

  • shin1×1さん
  • 今までポワーンとわかっていたつもりでしたが、図で動きを説明してもらうととってもわかりやすかったです。
  • 特に前処理、後処理が色々あったのにびっくりした。
  • componentが便利そう!今、modelが肥大化傾向にあるので考えてみようかな・・・
  • Cakeのソースまた読んでみよう(だいぶきれいになったらしいので)

2. フォームメールを生成するプラグイン

  • slywalkerさん
  • 風水系にたとえていた今までの職業が気になりました(懇親会で聞けずじまい・・・)
  • いままで独学で開発されていたのはすごいです。
  • プラグインは使ったことがなかったので勉強になりました。
  • default.ctpなどがあちこちに出来るのをどうしよう・・・
  • 貴重な発表ありがとうございました。

LT1. 開発事例と失敗談

  • keisonさん
  • うまく実例と失敗談をまとめてくれました
  • チケット投げるようなバグもあったので(現在は修正済み)英語を勉強しなくては・・・
  • comporntファイルがないのに呼んでapachが落ちるバグはなんかのクラスをnewしまくってメモリが飛んでる感じでした・・・
  • 発表お疲れ様でしたm(_ _)m

LT2. CakePHPと私(仮)

  • 飯、カメラ、飯、カメラ、飯、カメラ、若干PHP
  • CakePHPは・・・(笑)
  • 写真の解説が面白かったです。
  • 湯布院から帰ってきて体重増えてませんでした?(笑)

懇親会

韓国料理おいしかったです。みんなと打ち解けだした頃に終電で帰らなければならず、すごく残念でした。もっとCakeの話をしたかったです。
次回はまだ話せなかった人と話してみたいです。
なんと、偶然、8年ぶりに会った高校の同級生も参加してました!!ビックリ!!

みなさん、お疲れ様でした。

Posted on

Ajax郵便番号住所入力

今回も、Ajax系で書かせていただきます。
まあ、よくある郵便番号を入力すると住所が自動で入力される物です。

DBを使いたくなかったのでググッたらKawa.net様が公開されているAjaxZip2を使わせていただきました。
色々な入力フォームに対応しているのですごく便利になりました。

そこで、郵便番号が変更になった時にAjaxZip2で使っているjsonファイルを更新しますが
その更新用プログラムをPHPで作ってみたので公開します。良かったらどんどん使ってください。
(perlの更新プログラムはKawa.net様が公開されています。)

住所更新プログラムはこちら

Posted on

日付の入力補助カレンダー

みなさん、WEBサイトで日付を入力するのって大変ですよね。
そこで、JavaScriptで現在稼働中のサイトでもすぐにカレンダーの入力が出来るようになる物を紹介したいと思います。

株式会社スプーキーズ様がSpookies LabsでProtoCalendarを公開されております。
デモはこちらで色々な入力フォームに使用できます。

デモの日本用のカレンダーの日曜が右端だったので日曜を左端に持ってくる書き方をメモっておきます。



引数を2つ指定するだけでした。
一つハマったのが、編集画面などでデータが「2008/11/22」ではなく「2008-11-22」のようになっていると入力フォームの初期値が消えてしまいました。

株式会社スプーキーズ様いい物をありがとうございます。

Posted on

複数行のリストを一気に登録する際の入力チェック

お客さんの要望で複数行のリストを直接リストの画面で編集したいと
言われて作った時に困った入力チェックの方法を覚書しておきます。

シチュエーションは注文カートに注文情報を入れてるリストで
数量を一気に変えたいというものでした。

まずビューで登録されている注文の商品と個数を一覧に出します。

<table>
<tr>
<th>商品名</th>
<th>値段</th>
<th>数量</th>
</tr>
<?php foreach($lists as $key=>$val) { ?>
<tr>
<td><?= es($val['Order']['name']) ?></td>
<td><?= es($val['Order']['price']) ?></td>
<td><?php echo $form->input("Order.{$key}.num", array('type' => 'text')); ?></td>
</tr>
<?php } ?>
</table>
<input type="submit" name="recalc" value="再計算" >

ここで数量のところをテキスト入力にしておいて再計算ボタンを押して$this[‘Order’][キーの番号][‘num’]
という風にコントローラに持ってきます。

これをモデルに渡して数量の入力チェックをかけます。

//注文リストの変更の際の入力チェック
function orderValidates($data) {
$chk =& Validation::getInstance();
//注文リストに入れる際に入力チェックをする
foreach($data['Order'] as $key=>$val) {
if (empty($val['num']) || !$chk->numeric($val['num'])) {
$this->validationErrors[$key]['num'] = '数量が不正です';
}
}
//結果の返却
if (count($this->validationErrors) > 0) {
return false;
}
return true;
}

これで数量の入力チェックでエラーが出た時にエラーの行の数量のテキストエリアの
隣に「数量が不正です」とメッセージをcakeが自動で出してくれました。

Posted on

PHP関西勉強会に行ってきました

関西では久しぶりというPHPの勉強会です。
kunitさんらがKOFに絡めてPHPの勉強会でもやりましょうかという突発的な感じで始められた今回の勉強会です。
勉強会の3日前にevents.php.gr.jpで募集をかけたにもかかわらず当日行ってみると満員との事にかなりの驚き!!
関西にもPHPの情報を欲しがっている人は一杯居るんだなと実感しました。
とりあえず勉強会の内容を書いていきたいと思います。

PHPUnitのこんな機能知ってる? (kunit)
トップバッターはkunitさんのテストのお話です。
まず最初にseleniumの紹介をサラッとされて本題の「PHPUnit + seleniumRC」の組み合わせで自動でテストをしてみようというもの。
seleniumRCとはseleniumテストを遠隔操作するための製品ということで開発環境とは別にselenium-serverを立ててそこにテストを流し込んでいくものみたいです。
メリットはブラウザの種類だけselenium-serverを用意しておくと一つのテストケースで全てのブラウザのテストが出来てしまうという事だと。
ここでPHPUnitで作ったテストケースをseleniumRCにドバット渡して自動でテストをガリガリしてくれるという感じでした。
用意する時間が無かったみたいなので実装まで見ることが出来ませんでしたがすごく便利そうな機能だなと思いました。(見たかった残念!!)

CakePHPとか (shin1x1)
次にshin1x1さんのCakePHPについてのお話です。
CakePHPを導入するに当たってフレームワークに行こうとしたきっかけや、フレームワーク選定はどういう基準で行ったかという話でした。それを聞いてまったくうちと同じだなという感じでした。
CakePHPを選んだ基準は
1.php4/5どちらでも動く
2.他のフレームワークに比べてゆるい構造
3.日本語の文献が多かった
4.Rubyの思想で作っているので最悪Rubyに乗り換えれる
5.分かりやすかった
と他にもおっしゃっていたと思うのですがこれらの理由で決めたということでした。
何より分かりやすかったというのが一番の決め手だと言っておられました。
最後にCakePHP関西を開催するということも!!

PHPScraping2008 (させざき)

最後にさせざきさんのPHPScrapingについてのお話です。
PHPScrapingとはHTMLを取得して取り出したいデータを取り出して再利用すると言うものだったと思います。
ライブラリの説明と構造を追ってどういう処理を行っているという事をおっしゃっておられました。
途中ZendFramworkを使って作っておられるのかなと言う部分も見受けられて参考になりました。

というわけで急遽決まった勉強会なのにお三方ともに素晴らしい講義ありがとうございました。すごい勉強になりました。
懇親会も技術談話に必死に喰らいついていきながら美味しいお酒が飲めました。非常に満足です。
これを機に関西でも勉強会が定着してくれたらなと思っています。

Posted on

CakePHPのHasAndBelongsToManyを使う

多対多のデータを扱うのにHasAndBelongsToManyをモデルで指定してあげると
簡単にデータの取り出しや保存が出来ました。

今回は社員が複数の部署に属すという仕様で使いました。
テーブルは次のようにしました。
parts(部署テーブル)、
users(社員テーブル)、
parts_users(部署・社員連携テーブル)
部署・社員連携テーブルは繋げたいテーブルを「_」で連結させてテーブル名とします。
parts_usersのフィールドは「part_id、user_id」となります。

次にPartsUserモデルを作っていないとエラーになるので作っておきます。

class PartsUser extends AppModel
{
var $name = 'PartsUser';
var $useTable = 'parts_users';
}

Userモデルで

class User extends AppModel
{
var $name = 'User';
var $useTable = 'users';
var $hasAndBelongsToMany = array('Part');
}

と記述してあげるとUserモデルでセレクトして得られた配列に
所属している部署全てが取得できています。

データの取得はこれですんなりと上手くいったのですがデータの保存が
あまり資料が無くはまりました。
データをセレクトで取得した形式でsaveしてあげても上手く保存が出来ません。
ではどういう配列構造で保存してあげればいいのか、

$this->data['Part']['Part'][0] = 部署番号
$this->data['Part']['Part'][1] = 部署番号
$this->data['Part']['Part'][2] = 部署番号
・
・
・

という感じにデータを持たしてあげるとparts_usersテーブルに社員と部署を
連携したデータを保存してくれます。

Posted on

CakePHPカンファレンス東京に行ってきました!!

東京日帰りという強行日程でCakePHPカンファレンス東京に行ってきました。
今回の勉強会は前回までと違って昼間に開催してくれたので僕ら遠征組でも参加しやすかったです。
そうとはいえ東京までの移動と始発の電車に乗るため家を出たので会場に着いたときにはかなり疲れていました。
けどカンファレンスが始まると疲れも忘れる感じに聞き入ってしまいました。

まず安藤さんの「国内でのCakePHPの利用状況について」
CakePHPは初心者から玄人まで全てのユーザーに使っていただけるフレームワークだということ、
ネットでもCakePHPの情報がかなり手に入りやすい状況になってきているほど、
ここ最近はすごい普及してきているという事をおっしゃっていました。

次に岸田さんの「Agileな開発現場での実践例」
テストコードをCakePHPで書いておられて、実際にテストではまった所などを詳しく説明してくれて、
とても参考になりました。またテストコードを書いていると開発期間は倍になるということもおっしゃってましたが
それでも後のメンテナンスやバージョンアップの時に楽になるので導入するべきだと言っておられました。

午後からGarrett氏の「招待講演」
CakePHPの始まったきっかけや、これからCakePHPはどうなっていくということをおっしゃられていました。
バージョン2.0をリリース予定で2.0からはphp5での対応になるということでした。ただ予定は未定という感じで・・・
CakePHP開発チームにとってチケットを投げてもらう時にテストケースとパッチをつけてくれと言っていました。

その後、鶴岡さんの「XoopsCubeなのにCakePHPを使う!」
Xoopsの中にCakePHPで書いたプログラムを埋め込む事が簡単に出来るということで実際に埋め込む方法を
実践してくれていました。自作でCMSを作るよりより多くの人に使ってもらうために今もう既に存在していて認知されている物に乗っける方が結果的にいいんだということを言っておられました。

最後にライトニングトークで皆さんの実績やアイデアを聞かせてもらいすごい勉強になりました。
懇親会にも参加して色々な話が出来てとても充実した時間がすごせました。
日帰り東京という過酷なスケジュールでしたがとても満足なカンファレンスでした。