[PHP]tcpdf用の日本語フォントファイルの作成方法
ソーシャルブックマークに追加:
仕事で中国語と日本語が混在したPDFを出力しなきゃ
いけなくなったので今までfpdfを使ってshift-jisで出力
してたのをtcpdfを使ってutf8で出力するように
ライブラリを差し替え中、
で、任意のフォントを使う場合に
.ttfファイルをtcpdf用のフォントファイルに
変換しなきゃいけなかったので覚書。
1、tcpdf/fonts/utilsをローカルにコピーする。
2、変換したいフォント.ttfをutilsフォルダにコピー。
3、コマンドプロンプトでutilsフォルダまで移動。
4、ttf2ufm.exe -a -F フォント名.ttf を実行。
5、utilsをphpのパスの通った場所に移動。
6、php makefont(uni).php フォント名.ttf フォント名.ufm を実行。
7、出来あがった フォント名.php フォント名.z フォント名.ctg.zをtcpdfのfontsディレクトへ格納。
あとは、
fpdfドキュメント
tcpdfドキュメント
とかの通りにaddfontすればOK。
今まで、fpdf⇒fpdi⇒mbfpdf⇒mbfpdiって使ってきて、
extendしまくってたのが、tcpdfに差し替えてさっくり動いてすっきり
したのですが、、
それにしてもtcpdfに差し替えてからpdfの作成が重くなったなぁ。
フォントのライセンスとかどうしようかなぁ。
PHPでチェックデジット計算する
ソーシャルブックマークに追加:WEB上にPHPで書かれている
チェックデジット(モジュラス10)
の算出がなかったので、
載せておきます。
チェックデジットの算出式をそのまま
書いてるだけですが。
(末尾から偶数桁、奇数桁の和をとり、
偶数桁の合計の三倍と奇数桁を足し、
その結果の一桁目の補数がチェックデジット。)
-------------------------------------------------------
function dgt($n){
$f=0;
$g=0;
$k=0;
$res=explode(',',chunk_split($n,1,','));
for($ii=count($res)-1;$ii>-1;$ii--){
$x=intval($res[$ii]);
if($f==0){
$k+=$x;
$f=1;
}else{
$g+=$x;
$f=0;
}
}
return substr(strval(10-intval(substr(strval($g*3+$k), -1))),-1);
}
-------------------------------------------------------
PHPでエクセルファイル(.xls)を作る方法
ソーシャルブックマークに追加:PHPでエクセル(.xls)のファイルが作りたくて、
こんな方法で.xlsファイルは作れるって話。
その方法は簡単な話で、
「XML形式のエクセルの拡張子を.xlsに変える」だけ。
[エクセルのXML形式]
の基本的な構成は
<Workbook>
<Worksheet>
<Table>
<Row>
<Cell>
これしか必要ないみたいで
後は、<Style>とか<Data>とか見た目を指定したり、
型を指定したりするタグが大量にある。
それで、試しにワークシート名、二次元配列の表データ、作成ファイル
を渡すと、エクセルファイル(.xls)を作成するfunction作ってみた。
-----------------------------------------------------------------------------------------
function CreateXls($ws_name,$data,$path){
$res='<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<Worksheet ss:Name="' . $ws_name . '">
<Table>' . "\n";
foreach($data as $data_one){
$res.='<Row>' . "\n";
for($ii=0;$ii<count($data_one);$ii++){
$res.='<Cell><Data ss:Type="String">' . $data_one[$ii] . '</Data></Cell>' . "\n";
}
$res.='</Row>' . "\n";
}
$res.='</Table>
</Worksheet>
</Workbook>';
$fp = fopen($path,"w");
flock($fp, LOCK_SH);
fputs($fp,$res);
flock($fp, LOCK_UN);
fclose($fp);
}
-----------------------------------------------------------------------------------------
追記:
記事をあげてから調べたら、
もしかして、上記ファイルはOffice 2003でしか開けないかもしれない。
しかも今のofficeはもともとXML??
最新office持ってないから確認できず。。
javascriptで違う文字コードのURLエンコード(utf-8,euc-jp,sjis etc,)
ソーシャルブックマークに追加:インクリメンタル脳内メーカーを作る際に、
困った。
脳内メーカーはEUC-JPだった為、javascriptで
エンコードせねばならず、
ぐぐったら、ありました。
Escape Codec Library: ecl.js
以下、仕様
変換されたものを元の文字列にデコードすることができる関数のライブラリです。
escape()
, unescape()
とは異なり、どの種類のブラウザでも同じ変換結果が得られます。
Shift_JISコードやEUC-JPコードなどの文字コードとしてのエンコード・デコード
も可能となっています。なお、この変換テーブルには、直接漢字は記述せず、
Unicode 番号を圧縮したデータをASCIIコードの文字で記述しているので、
任意の文字コードで使えるという特徴があります。
うむ、すばらしい。
使い方もいたってシンプル。
$res=EscapeEUCJP('株式会社ステレオタイプラボ');
こんな感じ。
楽だ、でも、大量のstringを渡すのは禁物、遅い。。
試す、環境も提供されていたので、
使ってみてはいかが?
テスト環境
bye!!
[php]phpからdocument.writeでjavascript出したりするときに便利なやつ
ソーシャルブックマークに追加:ありがたく使わせて頂きます。
いつもdocument.writeでわざわざくくってましたが。
---------------------------------------------------------------------------------------------------------------------
function js_write($a)
{
$lines = split("\n", $a);
if(!empty($lines)){
foreach($lines as $i => $line){
$line = str_replace("'", "\'" , $line);
$lines[$i] = preg_replace("|^(.*)$|", '\'$1\n\'+', $line);
}
}
$a = join("\n", $lines);
$a = substr($a, 0, strlen($a)-1);
return 'document.write('.$str.');';
}
-------------------------------------------------------------------------------------------------
とりあえず↓
function jsAction(){
echo $this->_js_document_write("<script type='text/javascript'>alert('aaaaa');</script>");
}
な感じで、うまく動いた。